使用OpenTelemetry如何配置系统指标名称前缀及全局标签
OpenTelemetry Metrics 配置:添加统一前缀与全局标签
一、全局添加env、app、version标签
你之前尝试添加自定义标签未生效,是因为需要在ConfigureResource中通过AddAttributes方法直接注入全局属性,这些属性会自动附加到所有采集的指标标签中。
修改ConfigureResource段代码如下:
x.ConfigureResource(t => t .AddService( serviceName: "test", serviceVersion: "v1", serviceInstanceId: Environment.MachineName) // 追加全局自定义标签 .AddAttributes(new Dictionary<string, object> { ["env"] = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "production", ["app"] = "test", ["version"] = "v1" }));
二、为指标添加application前缀
要给所有采集的指标(包括System.Net.Http这类系统指标)统一添加application前缀,需配置Prometheus Exporter的指标名称格式化器,通过自定义规则批量修改输出的指标名:
修改AddPrometheusExporter段代码如下:
x.AddPrometheusExporter(options => { // 为所有指标名称添加application前缀 options.MetricNameFormatter = metricInfo => $"application_{metricInfo.MetricName}"; });
完整修改后的代码
var builder = WebApplication.CreateBuilder(args); builder.Services.AddConnections(); builder.Services.AddEndpointsApiExplorer(); builder.Services .AddOpenTelemetry() .WithMetrics(x => { x.ConfigureResource(t => t .AddService( serviceName: "test", serviceVersion: "v1", serviceInstanceId: Environment.MachineName) .AddAttributes(new Dictionary<string, object> { ["env"] = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "production", ["app"] = "test", ["version"] = "v1" })); x.AddHealthChecksInstrumentation(a => a.IncludeHealthCheckMetadata = true); x.AddPrometheusExporter(options => { options.MetricNameFormatter = metricInfo => $"application_{metricInfo.MetricName}"; }); x.AddHttpClientInstrumentation(); x.AddBuiltInMeters(); }); var app = builder.Build(); app.UseOpenTelemetryPrometheusScrapingEndpoint(); app.MapPrometheusScrapingEndpoint(); app.Run();
关键说明
- 全局标签:Resource中配置的属性会作为所有指标的通用标签,Prometheus Exporter会自动将这些属性转换为标签输出。
- 指标前缀:通过
MetricNameFormatter可以统一修改所有导出到Prometheus的指标名称,覆盖系统内置和自定义采集的所有指标。
内容的提问来源于stack exchange,提问作者Kseniya Yudina
相关产品推荐
相关产品推荐

