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

.NET应用Azure Log Analytics中AppDependencies表数据量过大求助

解决.NET应用向Azure Log Analytics发送过量Service Bus依赖日志问题

问题根源

这类ServiceBusReceiver.Receive的依赖日志来自Azure Service Bus SDK的诊断追踪,不受ASP.NET Core全局日志级别直接控制。即使将全局日志级别设为Error,SDK默认仍会收集这类操作的依赖追踪数据,导致AppDependencies表数据量激增。

可行解决方案

1. 针对性限制Azure SDK日志级别

在appsettings.json中为Azure Service Bus及核心SDK命名空间单独设置日志级别:

{
  "Logging": {
    "LogLevel": {
      "Default": "Error",
      "Microsoft": "Error",
      "Azure.Messaging.ServiceBus": "Error",
      "Azure.Core": "Error"
    }
  }
}

2. 通过遥测处理器过滤特定依赖日志

如果不需要收集Service Bus接收操作的依赖数据,可添加自定义遥测处理器过滤这类条目:

using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.DataContracts;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddApplicationInsightsTelemetry();

// 注册自定义遥测处理器
builder.Services.AddSingleton<ITelemetryProcessor>(sp => 
    new FilterServiceBusReceiveTelemetry(sp.GetRequiredService<ITelemetryProcessor>()));

var app = builder.Build();

// 处理器实现
public class FilterServiceBusReceiveTelemetry : ITelemetryProcessor
{
    private readonly ITelemetryProcessor _nextProcessor;

    public FilterServiceBusReceiveTelemetry(ITelemetryProcessor nextProcessor)
    {
        _nextProcessor = nextProcessor;
    }

    public void Process(ITelemetry item)
    {
        if (item is DependencyTelemetry dep && 
            dep.Type == "Azure Service Bus" && 
            dep.Name == "ServiceBusReceiver.Receive")
        {
            return; // 跳过该日志,不发送到Log Analytics
        }
        _nextProcessor.Process(item);
    }
}

3. 禁用Azure SDK的特定诊断活动

通过DiagnosticListener过滤非错误级别的Service Bus接收活动:

using System.Diagnostics;
using Azure.Core;

// 启用Azure SDK活动源(需Azure.Core 1.18+)
AppContext.SetSwitch("Azure.Experimental.EnableActivitySource", true);

var serviceBusListener = new DiagnosticListener("Azure.Messaging.ServiceBus");
serviceBusListener.Subscribe(new DiagnosticObserver());

public class DiagnosticObserver : IObserver<KeyValuePair<string, object>>
{
    public void OnCompleted() { }
    public void OnError(Exception error) { }

    public void OnNext(KeyValuePair<string, object> value)
    {
        // 仅保留错误状态的接收活动
        if (value.Key == "Azure.Messaging.ServiceBus.Receive" && 
            value.Value is Activity activity && 
            activity.Status != ActivityStatusCode.Error)
        {
            activity.SetTag("SuppressTelemetry", true);
        }
    }
}

关键提示

Azure SDK的日志系统独立于ASP.NET Core全局配置,部分依赖追踪属于诊断活动范畴,常规日志级别设置无法控制这类数据。需针对Azure SDK命名空间单独配置,或通过遥测处理器/诊断观察者过滤不需要的条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:07:19