如何阻止Application Insights记录“AspNetCoreEnvironment: Production”?
禁用Application Insights自动添加AspNetCoreEnvironment自定义维度的方法
在ASP.NET Core环境中,Application Insights SDK默认通过AspNetCoreEnvironmentTelemetryInitializer自动向请求、依赖项、跟踪等数据中插入AspNetCoreEnvironment自定义维度。可以通过以下两种方式禁用该功能:
方法一:移除默认的TelemetryInitializer
直接移除负责添加该维度的初始化器,从根源阻止维度被插入:
var builder = WebApplication.CreateBuilder(args); // 注册Application Insights服务 builder.Services.AddApplicationInsightsTelemetry(); // 移除AspNetCoreEnvironmentTelemetryInitializer builder.Services.RemoveAll<ITelemetryInitializer>(initializer => initializer.GetType().Name == "AspNetCoreEnvironmentTelemetryInitializer"); var app = builder.Build(); // 后续中间件配置... app.Run();
方法二:通过TelemetryProcessor移除已添加的维度
如果无法直接移除初始化器,可以添加自定义Telemetry处理器,在数据发送前移除该维度:
首先定义处理器类:
public class RemoveEnvironmentDimensionProcessor : ITelemetryProcessor { private readonly ITelemetryProcessor _nextProcessor; public RemoveEnvironmentDimensionProcessor(ITelemetryProcessor nextProcessor) { _nextProcessor = nextProcessor; } public void Process(ITelemetry telemetryItem) { // 检查并移除AspNetCoreEnvironment维度 if (telemetryItem is ISupportProperties propertyItem && propertyItem.Properties.ContainsKey("AspNetCoreEnvironment")) { propertyItem.Properties.Remove("AspNetCoreEnvironment"); } // 传递给下一个处理器 _nextProcessor.Process(telemetryItem); } }
然后在Program.cs中注册该处理器:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddApplicationInsightsTelemetry(); // 注册自定义Telemetry处理器 builder.Services.AddSingleton<ITelemetryProcessor, RemoveEnvironmentDimensionProcessor>(); var app = builder.Build(); // 后续中间件配置... app.Run();
两种方法的区别:方法一从根源阻止维度被添加,性能更优;方法二在数据生命周期后期移除维度,适用于无法修改初始化器集合的场景。
内容的提问来源于stack exchange,提问作者Leonardo
相关产品推荐
相关产品推荐

