Azure Durable Function分布式追踪:如何隐藏存储相关任务
隐藏Durable Task分布式追踪中的Microsoft表活动
你调整logLevel的方式不生效,是因为日志级别控制的是日志输出量,和分布式追踪生成的Span(链路节点)不是同一套机制。要隐藏Microsoft表活动的追踪节点,可通过以下几种方式实现:
方式1:配置Durable Task追踪过滤规则
在hosts.json的durableTask.tracing节点中,通过traceOptions指定仅追踪业务相关的活动类型,排除内部存储操作:
{ "version": "2.0", "telemetryMode": "OpenTelemetry", "logging": { "logLevel": { "default": "Warning", "DurableTask.AzureStorage": "Warning", "DurableTask.Core": "Warning", "Microsoft": "Warning", "Host.Triggers.DurableTask": "Information", "Function": "Information", "Function.http_trigger_2": "Warning", "Function.say_hello": "Warning" } }, "extensions": { "durableTask": { "tracing": { "distributedTracingEnabled": true, "version": "V2", "traceOptions": { "traceActivityTypes": "Orchestrator,Activity" // 仅追踪编排器和业务活动节点 } } } }, "extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[4.*, 5.0.0)" } }
该配置会让Durable Task只生成编排器和自定义活动的追踪节点,自动过滤掉内部的Microsoft表存储操作。
方式2:自定义OpenTelemetry Span处理器
如果需要更精细的过滤逻辑(比如针对特定表操作),可以在代码中添加自定义Span处理器,直接过滤掉不需要的追踪节点:
using OpenTelemetry; using OpenTelemetry.Trace; using System.Diagnostics; public class MicrosoftTableSpanFilter : BaseProcessor<Activity> { public override void OnStart(Activity activity) { // 过滤名称包含Microsoft表操作的Span if (activity.DisplayName.Contains("Microsoft.Table", StringComparison.OrdinalIgnoreCase)) { // 标记该Span不被记录 activity.IsAllDataRequested = false; } base.OnStart(activity); } } // 在Function启动类中注册处理器 [assembly: FunctionsStartup(typeof(YourApp.Startup))] namespace YourApp { public class Startup : FunctionsStartup { public override void Configure(IFunctionsHostBuilder builder) { builder.Services.AddOpenTelemetry() .WithTracing(builder => { builder .AddSource("DurableTask.Core") .AddAzureMonitorTraceExporter() // 替换为你的追踪导出器 .AddProcessor(new MicrosoftTableSpanFilter()); }); } } }
方式3:在Application Insights中过滤(如果使用Azure Monitor)
如果你的追踪数据发送到Application Insights,也可以在平台层面设置过滤:
- 打开Application Insights的「分布式追踪」页面,使用顶部的筛选器,排除操作名称包含
Microsoft.Table的节点 - 或者创建自定义日志查询,过滤掉无关Span后再查看完整链路:
traces | where not(operation_Name contains "Microsoft.Table") | order by timestamp desc
内容的提问来源于stack exchange,提问作者Ryu S.
相关产品推荐
相关产品推荐

