通过 Azure Monitor 中的 OpenTelemetry 过滤 http 请求活动

问题描述 投票:0回答:1

库名称和版本

Azure.Monitor.OpenTelemetry.AspNetCore 1.2.0

查询/问题

嗨,

序言 我们使用内置的 .NET Core 身份验证/授权以及针对不同 OpenID 提供商的多种方案。每次我请求 API 时,第一个调用都会向所有 OpenID 提供商的“.wellknown”端点发出请求。到目前为止还可以。但它会为 Application Insights 中的每个操作创建请求和依赖项跟踪。这些痕迹与我们完全无关,我们想过滤它们。我遵循了你的指南并做了这样的事情:

builder.Services.AddOpenTelemetry().UseAzureMonitor();
builder.Services.Configure<HttpClientTraceInstrumentationOptions>(options =>
{
    options.FilterHttpRequestMessage = req =>
        !req.RequestUri.ToString().Contains(".well-known");
});

问题

  1. 当我这样做时,即使上述条件是正确的,它仍然会创建“请求”遥测类型。 (下图)
  2. UseAzureMonitor 有它自己配置的 Http 检测,当我这样做时它被覆盖。

问题

  1. 如何才能完全过滤掉它们?请给我一些建议。
  2. 在我看来,覆盖 Http 检测似乎是与 UseAzureMonitor 相反的违规行为,因为它有自己的目的。我认为那些过滤是附加的,而不是替代的。我是做错了什么还是知道这是唯一的方法?
  3. 我通过设置
    IsAllDataRequested = false
    创建了 ActivityFilteringProcessor,但它并没有完全过滤掉痕迹。

enter image description here

BR

环境

  • Windows 10

  • Visual Studio 2022 17.10.1

  • .NET SDK: 版本:8.0.300 提交:326f6e68b2 工作负载版本:8.0.300-manifests.4e5ea2d8 MSBuild版本:17.10.4+10fbfbf2e

  • 运行环境: 操作系统名称:Windows 操作系统版本:10.0.19045 操作系统平台:Windows RID:win-x64 基本路径:C:\Program Files\dotnet\sdk\8.0.300\

.net azure monitor open-telemetry
1个回答
0
投票

好吧,没花太长时间,但我终于成功了。

internal class OpenIdFilteringProcessor : BaseProcessor<Activity>
{
    public override void OnEnd(Activity data)
    {
        if (data.Kind == ActivityKind.Client && data.GetTagItem("url.full") is string url && url.Contains(".well-known"))
        {
            data.ActivityTraceFlags &= ~ActivityTraceFlags.Recorded;
        }
    }
}

(...)

builder.Services.ConfigureOpenTelemetryTracerProvider(builder => builder.AddProcessor<OpenIdFilteringProcessor>());
builder.Services.AddOpenTelemetry().UseAzureMonitor();
© www.soinside.com 2019 - 2024. All rights reserved.