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

如何停止向App Insights记录过多的ServiceBusReceiver.Receive依赖日志

ServiceBusReceiver.Receive依赖日志量过大排查与解决

问题背景

我有一个部署在Kubernetes上的Azure Functions(.NET6,v4版本)应用,目前ServiceBusReceiver.Receive的依赖调用日志量异常,每个实例每小时生成2000条日志。自定义代码中仅在TelemetryClient中使用了TrackEvent和TrackException方法,这些依赖日志并非自定义生成,无法定位来源,也无法直接禁用。尝试过调整相关包版本(与其他消息应用版本对齐、更新至最新版)均未解决,日志中也缺乏足够追踪信息。

SERVICEBUS ServiceBusReceiver.Receive 依赖属性

  • Type: servicebus
  • Call status: true
  • Duration: 1.0 mins
  • Name: ServiceBusReceiver.Receive
  • Telemetry type: dependency
  • Application version: 4.19.0.0
  • SDK version dotnetc:2.21.0-429
  • Sample rate: 1
  • Performance: 1min-2min
  • Base name: ServiceBusReceiver.Receive

已安装包及版本信息

  • Sdk="Microsoft.NET.Sdk"
  • net6.0
  • AzureFunctionsVersion v4
  • "AutoMapper.Extensions.Microsoft.DependencyInjection" Version="4.0.1"
  • "Azure.Messaging.ServiceBus" Version="7.10.0"
  • "Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="5.4.0"
  • "Microsoft.Azure.WebJobs.Logging.ApplicationInsights" Version="3.0.33"
  • "Microsoft.NET.Sdk.Functions" Version="4.0.1"
  • "Microsoft.Azure.Functions.Extensions" Version="1.1.0"
  • "Microsoft.Extensions.Azure" Version="1.2.0"
  • "Microsoft.Extensions.Configuration.AzureAppConfiguration" Version="5.1.0"
  • "Microsoft.Extensions.Caching.Memory" Version="6.0.1"
  • "Polly" Version="7.1.0"
  • "Scrutor" Version="4.1.0"

排查与解决方法

1. 定位日志来源

这些依赖日志大概率来自Microsoft.Azure.WebJobs.Extensions.ServiceBus的自动遥测采集功能,Azure Functions的ServiceBus扩展会默认追踪ServiceBus操作的依赖信息,无需手动调用TrackDependency。

可以通过添加遥测处理器过滤日志的同时,打印额外信息确认来源:

public class ServiceBusDependencyFilter : ITelemetryProcessor
{
    private readonly ITelemetryProcessor _next;

    public ServiceBusDependencyFilter(ITelemetryProcessor next)
    {
        _next = next;
    }

    public void Process(ITelemetry item)
    {
        if (item is DependencyTelemetry dependency && dependency.Name == "ServiceBusReceiver.Receive")
        {
            // 打印额外信息用于定位来源,生产环境可替换为日志组件输出
            Console.WriteLine($"Dependency Operation: {dependency.Context.Operation.Name}, Properties: {System.Text.Json.JsonSerializer.Serialize(dependency.Properties)}");
            
            // 若需直接过滤该日志,取消注释下方return语句
            // return;
        }
        _next.Process(item);
    }
}

在Startup类中注册处理器:

public class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddApplicationInsightsTelemetryProcessor<ServiceBusDependencyFilter>();
    }
}

2. 禁用或调整ServiceBus自动遥测

方法一:直接禁用ServiceBus扩展的遥测

修改host.json,添加ServiceBus扩展的遥测禁用配置:

{
    "extensions": {
        "serviceBus": {
            "telemetry": {
                "enabled": false
            }
        }
    }
}

方法二:针对特定依赖调整采样率

若不想全局禁用依赖遥测,可在host.json中配置采样规则,降低ServiceBusReceiver.Receive的日志采样率:

{
    "logging": {
        "applicationInsights": {
            "samplingSettings": {
                "isEnabled": true,
                "percentage": 10, // 仅采集10%的该类依赖日志,可按需调整
                "dependencySampling": {
                    "includedNames": [ "ServiceBusReceiver.Receive" ]
                }
            }
        }
    }
}

3. 检查包版本兼容性

当前使用的Microsoft.Azure.WebJobs.Extensions.ServiceBus 5.4.0与Azure.Messaging.ServiceBus 7.10.0虽兼容,但版本较旧。建议升级至最新稳定版:

  • 将Microsoft.Azure.WebJobs.Extensions.ServiceBus升级至5.11.0+
  • 将Azure.Messaging.ServiceBus升级至7.17.0+
  • 同步升级Microsoft.Azure.WebJobs.Logging.ApplicationInsights至对应兼容版本(如3.0.48)

4. 优化ServiceBus接收配置

若使用长轮询模式,过高的轮询频率会导致日志量增加。检查ServiceBus触发器的配置参数:

  • 调整MaxAutoLockRenewalDuration,避免不必要的锁续期操作
  • 合理设置PrefetchCount,减少单次接收的调用频率
  • 确认触发器的MessageHandlerOptions配置,是否存在频繁的重试或轮询逻辑

内容的提问来源于stack exchange,提问作者6dev6il6

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:35:16