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

如何在.NET 8中使用OpenTelemetry按标签值过滤指标?

解决方案:按标签值过滤OTLP导出器的指标

可以通过MetricStreamConfiguration的Filter属性实现按标签值过滤,直接排除掉目标端口(4317)的测量数据。

修改你现有的AddView配置,为http.client.request.duration添加过滤逻辑:

services.AddOpenTelemetry()
    .WithMetrics(builder =>
    {
        builder
            .AddMeter("System.Net.Http")
            .AddView(instrumentName: "http.client.open_connections", MetricStreamConfiguration.Drop)
            .AddView(instrumentName: "http.client.connection.duration", MetricStreamConfiguration.Drop)
            .AddView(instrumentName: "http.client.request.time_in_queue", MetricStreamConfiguration.Drop)
            .AddView(instrumentName: "http.client.active_requests", MetricStreamConfiguration.Drop)
            .AddView(instrumentName: "http.client.request.duration", new MetricStreamConfiguration
                {
                    TagKeys = new string[] { "http.response.status_code", "server.port" },
                    // 添加过滤逻辑:排除server.port为4317的测量数据
                    Filter = (in Measurement measurement) =>
                    {
                        // 标签值以字符串形式存储,需与字符串"4317"比较
                        return measurement.GetTagValue("server.port") != "4317";
                    }
                })
            .AddOtlpExporter((exporterOptions, metricReaderOptions) =>
            {
                exporterOptions.Endpoint = new Uri("http://localhost:4317");
            });
    });

关键点说明:

  • Filter委托接收当前的Measurement实例,通过GetTagValue获取server.port标签的值。
  • OpenTelemetry标签值统一以字符串形式存储,因此要和字符串"4317"做比较,而非数字类型。
  • 该过滤逻辑只会保留server.port不等于4317的测量数据,自动排除OTLP导出器自身的gRPC请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:28:10