diff --git a/core/Azure.Mcp.Core/src/Areas/Server/Commands/ServiceStartCommand.cs b/core/Azure.Mcp.Core/src/Areas/Server/Commands/ServiceStartCommand.cs
index 91bd5fc168..335470aa51 100644
--- a/core/Azure.Mcp.Core/src/Areas/Server/Commands/ServiceStartCommand.cs
+++ b/core/Azure.Mcp.Core/src/Areas/Server/Commands/ServiceStartCommand.cs
@@ -405,7 +405,6 @@ private IHost CreateStdioHost(ServiceStartOptions serverOptions)
.ConfigureLogging(logging =>
{
logging.ClearProviders();
- logging.ConfigureOpenTelemetryLogger();
logging.AddEventSourceLogger();
if (serverOptions.Debug)
@@ -451,7 +450,6 @@ private IHost CreateHttpHost(ServiceStartOptions serverOptions)
// Configure logging
builder.Logging.ClearProviders();
- builder.Logging.ConfigureOpenTelemetryLogger();
builder.Logging.AddEventSourceLogger();
builder.Logging.AddConsole();
ConfigureSupportLogging(builder.Logging, serverOptions);
@@ -629,7 +627,6 @@ private IHost CreateIncomingAuthDisabledHttpHost(ServiceStartOptions serverOptio
// Configure logging
builder.Logging.ClearProviders();
- builder.Logging.ConfigureOpenTelemetryLogger();
builder.Logging.AddEventSourceLogger();
builder.Logging.AddConsole();
ConfigureSupportLogging(builder.Logging, serverOptions);
diff --git a/core/Azure.Mcp.Core/src/Extensions/OpenTelemetryExtensions.cs b/core/Azure.Mcp.Core/src/Extensions/OpenTelemetryExtensions.cs
index 0b20b2ef9a..b0ae283231 100644
--- a/core/Azure.Mcp.Core/src/Extensions/OpenTelemetryExtensions.cs
+++ b/core/Azure.Mcp.Core/src/Extensions/OpenTelemetryExtensions.cs
@@ -10,6 +10,7 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
+using Microsoft.Mcp.Core.Commands;
using OpenTelemetry.Logs;
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;
@@ -48,14 +49,6 @@ public static void ConfigureOpenTelemetry(this IServiceCollection services)
EnableAzureMonitor(services);
}
- public static void ConfigureOpenTelemetryLogger(this ILoggingBuilder builder)
- {
- builder.AddOpenTelemetry(logger =>
- {
- logger.AddProcessor(new TelemetryLogRecordEraser());
- });
- }
-
private static void EnableAzureMonitor(this IServiceCollection services)
{
#if DEBUG
@@ -92,7 +85,7 @@ private static void EnableAzureMonitor(this IServiceCollection services)
if (!string.IsNullOrWhiteSpace(userProvidedAppInsightsConnectionString))
{
// Configure telemetry to be sent to user-provided Application Insights instance regardless of build configuration.
- ConfigureAzureMonitorExporter(otelBuilder, userProvidedAppInsightsConnectionString, "UserProvided");
+ ConfigureUserProvidedAzureMonitorExporter(otelBuilder, userProvidedAppInsightsConnectionString);
}
// Configure Microsoft-owned telemetry only in RELEASE builds to avoid polluting telemetry during development.
@@ -105,7 +98,7 @@ private static void EnableAzureMonitor(this IServiceCollection services)
if (shouldCollectMicrosoftTelemetry)
{
- ConfigureAzureMonitorExporter(otelBuilder, MicrosoftOwnedAppInsightsConnectionString, "Microsoft");
+ ConfigureMicrosoftAzureMonitorExporter(otelBuilder, MicrosoftOwnedAppInsightsConnectionString);
}
#endif
@@ -118,7 +111,39 @@ private static void EnableAzureMonitor(this IServiceCollection services)
}
}
- private static void ConfigureAzureMonitorExporter(OpenTelemetry.OpenTelemetryBuilder otelBuilder, string appInsightsConnectionString, string name)
+ ///
+ /// Configures OpenTelemetry to use Azure Monitor exporters with Microsoft's Application Insights instance.
+ ///
+ /// The OpenTelemetry builder to configure.
+ /// The Application Insights connection string for Microsoft's telemetry instance.
+ private static void ConfigureMicrosoftAzureMonitorExporter(OpenTelemetry.OpenTelemetryBuilder otelBuilder, string appInsightsConnectionString)
+ {
+ // We don't configure logging for Microsoft telemetry to avoid sending potentially sensitive log data to Microsoft.
+ otelBuilder.WithMetrics(metrics =>
+ {
+ metrics.AddAzureMonitorMetricExporter(options =>
+ {
+ options.ConnectionString = appInsightsConnectionString;
+ },
+ name: AppInsightsInstanceType.Microsoft);
+ });
+
+ otelBuilder.WithTracing(tracing =>
+ {
+ tracing.AddAzureMonitorTraceExporter(options =>
+ {
+ options.ConnectionString = appInsightsConnectionString;
+ },
+ name: AppInsightsInstanceType.Microsoft);
+ });
+ }
+
+ ///
+ /// Configures OpenTelemetry to use Azure Monitor exporters with a user-provided Application Insights connection string.
+ ///
+ /// The OpenTelemetry builder to configure.
+ /// The Application Insights connection string provided by the user.
+ private static void ConfigureUserProvidedAzureMonitorExporter(OpenTelemetry.OpenTelemetryBuilder otelBuilder, string appInsightsConnectionString)
{
otelBuilder.WithLogging(logging =>
{
@@ -126,7 +151,7 @@ private static void ConfigureAzureMonitorExporter(OpenTelemetry.OpenTelemetryBui
{
options.ConnectionString = appInsightsConnectionString;
},
- name: name);
+ name: AppInsightsInstanceType.UserProvided);
});
otelBuilder.WithMetrics(metrics =>
@@ -135,7 +160,7 @@ private static void ConfigureAzureMonitorExporter(OpenTelemetry.OpenTelemetryBui
{
options.ConnectionString = appInsightsConnectionString;
},
- name: name);
+ name: AppInsightsInstanceType.UserProvided);
});
otelBuilder.WithTracing(tracing =>
@@ -144,7 +169,7 @@ private static void ConfigureAzureMonitorExporter(OpenTelemetry.OpenTelemetryBui
{
options.ConnectionString = appInsightsConnectionString;
},
- name: name);
+ name: AppInsightsInstanceType.UserProvided);
});
}
}
diff --git a/core/Microsoft.Mcp.Core/src/Commands/TelemetryConstants.cs b/core/Microsoft.Mcp.Core/src/Commands/TelemetryConstants.cs
index 57947f962d..9e603b4a2b 100644
--- a/core/Microsoft.Mcp.Core/src/Commands/TelemetryConstants.cs
+++ b/core/Microsoft.Mcp.Core/src/Commands/TelemetryConstants.cs
@@ -40,3 +40,9 @@ public class ActivityName
public const string ToolExecuted = "ToolExecuted";
public const string ServerStarted = "ServerStarted";
}
+
+public class AppInsightsInstanceType
+{
+ public const string Microsoft = "Microsoft";
+ public const string UserProvided = "UserProvided";
+}
diff --git a/servers/Azure.Mcp.Server/changelog-entries/1770145613303.yaml b/servers/Azure.Mcp.Server/changelog-entries/1770145613303.yaml
new file mode 100644
index 0000000000..a763eb93fb
--- /dev/null
+++ b/servers/Azure.Mcp.Server/changelog-entries/1770145613303.yaml
@@ -0,0 +1,4 @@
+pr: 1638
+changes:
+ - section: "Features Added"
+ description: "Add log telemetry support for customer-owned AppInsights"
\ No newline at end of file
diff --git a/servers/Azure.Mcp.Server/src/Program.cs b/servers/Azure.Mcp.Server/src/Program.cs
index c50d0fc156..6f8a165133 100644
--- a/servers/Azure.Mcp.Server/src/Program.cs
+++ b/servers/Azure.Mcp.Server/src/Program.cs
@@ -44,7 +44,6 @@ private static async Task Main(string[] args)
services.AddLogging(builder =>
{
- builder.ConfigureOpenTelemetryLogger();
builder.AddConsole();
builder.SetMinimumLevel(LogLevel.Information);
});
diff --git a/servers/Fabric.Mcp.Server/src/Program.cs b/servers/Fabric.Mcp.Server/src/Program.cs
index c4ef999bcb..8331dad09b 100644
--- a/servers/Fabric.Mcp.Server/src/Program.cs
+++ b/servers/Fabric.Mcp.Server/src/Program.cs
@@ -37,7 +37,6 @@ private static async Task Main(string[] args)
services.AddLogging(builder =>
{
- builder.ConfigureOpenTelemetryLogger();
builder.AddConsole();
builder.SetMinimumLevel(LogLevel.Information);
});
diff --git a/servers/Template.Mcp.Server/src/Program.cs b/servers/Template.Mcp.Server/src/Program.cs
index 928fb730f3..4d6f0c1f1b 100644
--- a/servers/Template.Mcp.Server/src/Program.cs
+++ b/servers/Template.Mcp.Server/src/Program.cs
@@ -34,7 +34,6 @@ private static async Task Main(string[] args)
services.AddLogging(builder =>
{
- builder.ConfigureOpenTelemetryLogger();
builder.AddConsole();
builder.SetMinimumLevel(LogLevel.Information);
});