Skip to content

Commit 53399b6

Browse files
authored
Mask iKeys in logs (#43698)
1 parent d12b697 commit 53399b6

File tree

1 file changed

+29
-12
lines changed
  • sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/main/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/pipeline

1 file changed

+29
-12
lines changed

sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/main/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/pipeline/TelemetryItemExporter.java

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.Objects;
2929
import java.util.Set;
3030
import java.util.concurrent.ConcurrentHashMap;
31+
import java.util.stream.Collectors;
3132
import java.util.zip.GZIPOutputStream;
3233

3334
import 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

Comments
 (0)