Application Insights禁用ServiceBusProcessor.ProcessMessage跟踪方法
过滤Application Insights中
ServiceBusProcessor.ProcessMessage跟踪的实现方案 你可以根据自己项目的SDK接入方式,选择以下任意一种方案实现过滤,所有方案都不会影响其他Service Bus相关的错误日志、发送/接收操作日志的正常上报。
方案1:自定义遥测处理器(全版本.NET SDK兼容)
这是最通用的方案,在Application Insights的遥测处理管道中直接拦截丢弃目标日志,不需要依赖SDK版本特性:
- 实现
ITelemetryProcessor接口编写过滤逻辑:
using Microsoft.ApplicationInsights.Channel; using Microsoft.ApplicationInsights.DataContracts; using Microsoft.ApplicationInsights.Extensibility; public class ServiceBusTelemetryFilter : ITelemetryProcessor { private readonly ITelemetryProcessor _nextProcessor; public ServiceBusTelemetryFilter(ITelemetryProcessor next) { _nextProcessor = next; } public void Process(ITelemetry telemetryItem) { // 匹配名称为ServiceBusProcessor.ProcessMessage的依赖遥测 if (telemetryItem is DependencyTelemetry dependency && dependency.Name.Equals("ServiceBusProcessor.ProcessMessage", StringComparison.Ordinal)) { // 不传递到下一个管道,直接丢弃,不会上传到AI return; } // 其余遥测正常上报 _nextProcessor.Process(telemetryItem); } }
- 在服务注册阶段将自定义处理器加入AI管道,以ASP.NET Core项目为例:
var builder = WebApplication.CreateBuilder(args); // 注册Application Insights服务 builder.Services.AddApplicationInsightsTelemetry(); // 注册自定义过滤处理器 builder.Services.AddApplicationInsightsTelemetryProcessor<ServiceBusTelemetryFilter>();
方案2:源头过滤Activity(适用于新版Azure.Messaging.ServiceBus SDK + AI SDK 2.20+)
ServiceBusProcessor.ProcessMessage是新版Service Bus SDK通过System.Diagnostics.ActivitySource输出的跟踪项,你可以直接配置采样规则从源头阻止这类Activity生成,比后置过滤的性能开销更低:
在应用启动最开头(注册Application Insights服务之前)添加以下配置:
using System.Diagnostics; ActivitySource.AddActivityListener(new ActivityListener { ShouldListenTo = activitySource => activitySource.Name == "Azure.Messaging.ServiceBus", Sample = (ref ActivityCreationOptions<ActivityContext> options) => { // 目标Activity直接返回None,不创建也不上报 return options.Name == "ServiceBusProcessor.ProcessMessage" ? ActivitySamplingResult.None : ActivitySamplingResult.AllDataAndRecorded; } });
如果你是用OpenTelemetry对接Application Insights,可以直接在跟踪管道加过滤规则,不需要单独写ActivityListener:
builder.Services.AddOpenTelemetry() .WithTracing(tracingBuilder => { tracingBuilder .AddSource("Azure.Messaging.ServiceBus") // 直接过滤指定名称的跟踪项 .AddFilter("Azure.Messaging.ServiceBus", activityName => activityName != "ServiceBusProcessor.ProcessMessage") .AddAzureMonitorTraceExporter(config => config.ConnectionString = builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"]); });
无代码接入场景的配置方式
如果你的应用是通过Azure门户的Application Insights自动仪表板(无代码注入,项目中没有手动安装AI NuGet包)接入的,不需要修改代码,直接在AI实例的门户配置页操作:
- 进入Application Insights实例,找到「配置」-「数据采样和遥测筛选」
- 添加新的筛选规则,规则条件设置为:依赖项名称 等于 ServiceBusProcessor.ProcessMessage
- 选择规则动作为「排除遥测」,保存后等待几分钟生效即可。
配置完成后可以本地调试,通过Visual Studio的Application Insights本地搜索工具确认对应日志不再生成,避免无效日志占用AI的数据配额。
内容的提问来源于stack exchange,提问作者Yustas
相关产品推荐
相关产品推荐

