2828import java .util .Objects ;
2929import java .util .Set ;
3030import java .util .concurrent .ConcurrentHashMap ;
31+ import java .util .stream .Collectors ;
3132import java .util .zip .GZIPOutputStream ;
3233
3334import static com .azure .monitor .opentelemetry .autoconfigure .implementation .utils .AzureMonitorMsgId .TELEMETRY_ITEM_EXPORTER_ERROR ;
@@ -131,18 +132,9 @@ CompletableResultCode internalSendByBatch(TelemetryItemBatchKey telemetryItemBat
131132 private static List <ByteBuffer > serialize (List <TelemetryItem > telemetryItems ) {
132133 try {
133134 if (logger .canLogAtLevel (LogLevel .VERBOSE )) {
134- try (StringWriter debug = new StringWriter ()) {
135- for (int i = 0 ; i < telemetryItems .size (); i ++) {
136- JsonWriter jsonWriter = JsonProviders .createWriter (debug );
137- telemetryItems .get (i ).toJson (jsonWriter );
138- jsonWriter .flush ();
139-
140- if (i < telemetryItems .size () - 1 ) {
141- debug .write ('\n' );
142- }
143- }
144- logger .verbose ("sending telemetry to ingestion service:{}{}" , System .lineSeparator (), debug );
145- }
135+ String json = toJson (telemetryItems );
136+ String jsonWithoutIKeys = maskIKeys (telemetryItems , json );
137+ logger .verbose ("sending telemetry to ingestion service:{}{}" , System .lineSeparator (), jsonWithoutIKeys );
146138 }
147139
148140 ByteBufferOutputStream out = writeTelemetryItemsAsByteBufferOutputStream (telemetryItems );
@@ -157,6 +149,31 @@ private static List<ByteBuffer> serialize(List<TelemetryItem> telemetryItems) {
157149 }
158150 }
159151
152+ private static String toJson (List <TelemetryItem > telemetryItems ) throws IOException {
153+ try (StringWriter debug = new StringWriter ()) {
154+ for (int i = 0 ; i < telemetryItems .size (); i ++) {
155+ JsonWriter jsonWriter = JsonProviders .createWriter (debug );
156+ TelemetryItem telemetryItem = telemetryItems .get (i );
157+ telemetryItem .toJson (jsonWriter );
158+ jsonWriter .flush ();
159+ if (i < telemetryItems .size () - 1 ) {
160+ debug .write ('\n' );
161+ }
162+ }
163+ return debug .toString ();
164+ }
165+ }
166+
167+ private static String maskIKeys (List <TelemetryItem > telemetryItems , String json ) {
168+ Set <String > iKeys
169+ = telemetryItems .stream ().map (TelemetryItem ::getInstrumentationKey ).collect (Collectors .toSet ());
170+ for (String instrumentationKey : iKeys ) {
171+ String maskedIKey = "*" + instrumentationKey .substring (instrumentationKey .length () - 13 );
172+ json = json .replace (instrumentationKey , maskedIKey );
173+ }
174+ return json ;
175+ }
176+
160177 // gzip and add new line delimiter from a list of telemetry items to a byte buffer output stream
161178 private static ByteBufferOutputStream
162179 writeTelemetryItemsAsByteBufferOutputStream (List <TelemetryItem > telemetryItems ) throws IOException {
0 commit comments