You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 04:45:37