diff --git a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/main/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/pipeline/TelemetryItemExporter.java b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/main/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/pipeline/TelemetryItemExporter.java index f089803eb611..4ff48fb7b8af 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/main/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/pipeline/TelemetryItemExporter.java +++ b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/main/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/pipeline/TelemetryItemExporter.java @@ -28,6 +28,7 @@ import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; import java.util.zip.GZIPOutputStream; import static com.azure.monitor.opentelemetry.autoconfigure.implementation.utils.AzureMonitorMsgId.TELEMETRY_ITEM_EXPORTER_ERROR; @@ -131,18 +132,9 @@ CompletableResultCode internalSendByBatch(TelemetryItemBatchKey telemetryItemBat private static List serialize(List telemetryItems) { try { if (logger.canLogAtLevel(LogLevel.VERBOSE)) { - try (StringWriter debug = new StringWriter()) { - for (int i = 0; i < telemetryItems.size(); i++) { - JsonWriter jsonWriter = JsonProviders.createWriter(debug); - telemetryItems.get(i).toJson(jsonWriter); - jsonWriter.flush(); - - if (i < telemetryItems.size() - 1) { - debug.write('\n'); - } - } - logger.verbose("sending telemetry to ingestion service:{}{}", System.lineSeparator(), debug); - } + String json = toJson(telemetryItems); + String jsonWithoutIKeys = maskIKeys(telemetryItems, json); + logger.verbose("sending telemetry to ingestion service:{}{}", System.lineSeparator(), jsonWithoutIKeys); } ByteBufferOutputStream out = writeTelemetryItemsAsByteBufferOutputStream(telemetryItems); @@ -157,6 +149,31 @@ private static List serialize(List telemetryItems) { } } + private static String toJson(List telemetryItems) throws IOException { + try (StringWriter debug = new StringWriter()) { + for (int i = 0; i < telemetryItems.size(); i++) { + JsonWriter jsonWriter = JsonProviders.createWriter(debug); + TelemetryItem telemetryItem = telemetryItems.get(i); + telemetryItem.toJson(jsonWriter); + jsonWriter.flush(); + if (i < telemetryItems.size() - 1) { + debug.write('\n'); + } + } + return debug.toString(); + } + } + + private static String maskIKeys(List telemetryItems, String json) { + Set iKeys + = telemetryItems.stream().map(TelemetryItem::getInstrumentationKey).collect(Collectors.toSet()); + for (String instrumentationKey : iKeys) { + String maskedIKey = "*" + instrumentationKey.substring(instrumentationKey.length() - 13); + json = json.replace(instrumentationKey, maskedIKey); + } + return json; + } + // gzip and add new line delimiter from a list of telemetry items to a byte buffer output stream private static ByteBufferOutputStream writeTelemetryItemsAsByteBufferOutputStream(List telemetryItems) throws IOException {