如何在.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
相关产品推荐
相关产品推荐

