使用Prometheus监控.Net Core应用时No Token Found错误的解决
解决Prometheus拉取AppMetrics指标时的"No Token Found"错误
我之前也碰到过一模一样的问题——用AppMetrics给.NET Core应用做监控时,访问http://localhost:57057/metrics能返回JSON数据,但把这个地址设为Prometheus监控目标时,就触发了"No Token Found"的警告。这是因为默认的/metrics端点返回的是Protobuf格式,而Prometheus默认期望纯文本格式,再加上AppMetrics的Protobuf端点需要特定Token验证,这就是报错的核心原因。
下面是完整的配置修复方案:
1. Startup.cs 配置调整
需要明确指定输出格式为Prometheus纯文本和Protobuf,并配置对应的端点格式化器:
// ConfigureServices var metrics = new MetricsBuilder() .OutputMetrics.AsPrometheusPlainText() .OutputMetrics.AsPrometheusProtobuf() .Build(); services.AddMetrics(metrics); services.AddMetricsEndpoints(options => { options.MetricsTextEndpointOutputFormatter = new MetricsPrometheusTextOutputFormatter(); options.MetricsEndpointOutputFormatter = new MetricsPrometheusProtobufOutputFormatter(); }); services.AddMvc().AddMetrics(); // Configure app.UseMetricsAllMiddleware(); app.UseMetricsAllEndpoints();
2. Program.cs 配置补充
在WebHost构建阶段集成Metrics组件:
var Metrics = AppMetrics.CreateDefaultBuilder() .OutputMetrics.AsPrometheusPlainText() .OutputMetrics.AsPrometheusProtobuf() .Build(); return WebHost.CreateDefaultBuilder(args) .ConfigureMetrics(Metrics) .UseMetrics() .UseStartup<Startup>() .Build();
3. appsettings.json 配置确认
确保Metrics相关端点已正确启用:
"MetricsOptions": { "DefaultContextLabel": "MyMvcApplication", "Enabled": true }, "MetricsWebTrackingOptions": { "ApdexTrackingEnabled": true, "ApdexTSeconds": 0.1, "IgnoredHttpStatusCodes": [ 404 ], "IgnoredRoutesRegexPatterns": [], "OAuth2TrackingEnabled": true }, "MetricEndpointsOptions": { "MetricsEndpointEnabled": true, "MetricsTextEndpointEnabled": true, "EnvironmentInfoEndpointEnabled": true }
4. Prometheus 配置修改
关键一步:将Prometheus的指标拉取路径从/metrics改为/metrics-text——这个端点返回的是Prometheus兼容的纯文本格式,不需要Token验证:
- job_name: 'nameOfJob' metrics_path: '/metrics-text' static_configs: - targets: ['localhost:57057']
完成所有配置后,重启你的.NET Core应用和Prometheus服务即可。可以先手动访问http://localhost:57057/metrics-text,确认返回的是纯文本格式的指标数据。
内容的提问来源于stack exchange,提问作者Ertan Hasani
相关产品推荐
相关产品推荐

