我在尝试从 .NET Core 微服务中抓取指标时遇到 Prometheus 问题。我的服务在 Docker 中运行,我可以通过浏览器
/health_metrics
很好地访问 http://192.168.161.74:2011/health_metrics
端点。它显示指标没有任何问题。
503 Service Unavailable
错误。这是我的 prometheus.yml
配置片段:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'health-metrics'
metrics_path: /health_metrics
static_configs:
- targets: ['192.168.161.74:2011']
附加信息:
/health_metrics
端点可通过浏览器访问,并显示 GC 收集计数、进程启动时间、内存使用情况等指标。这是
/health_metrics
公开的指标示例:
# HELP dotnet_collection_count_total GC collection count
# TYPE dotnet_collection_count_total counter
dotnet_collection_count_total{generation="1"} 0
dotnet_collection_count_total{generation="0"} 1
dotnet_collection_count_total{generation="2"} 0
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
# TYPE process_start_time_seconds gauge
process_start_time_seconds 1721278066.591546
...
到目前为止我尝试过的故障排除步骤:
/health_metrics
端点相关的错误。社区问题:
503 Service Unavailable
错误?我在 Windows 上针对我的 .NET Core 微服务测试了此问题,并且也出现了此错误。我使用 Golang 创建了一个代码,从 Prometheus 的 /health_metrics 获取此内容,并在另一个端口中显示 /metric,它起作用了,这让我认为延迟可能是问题所在。
任何见解或建议将不胜感激!
由于跨源资源共享 (CORS) 策略配置错误,可能会在抓取您的
.NET Core
/health_metrics
端点时返回“HTTP 503 服务不可用”。将 /health_metrics
端点添加到 CORS 配置中解决了该问题。
以下是如何在您的
.NET Core
应用程序中修复此问题:
services.AddCors(options =>
{
options.AddPolicy("AllowPrometheus", builder =>
{
builder.WithOrigins("http://localhost:9090")
.AllowAnyMethod()
.AllowAnyHeader();
});
});
app.UseCors("AllowPrometheus");
使用更新的 CORS 配置重新启动服务后,Prometheus 成功抓取了指标。
AI 建议的其他故障排除技巧:
/health_metrics
端点具有 Content-Type: text/plain; charset=utf-8
。这个简洁的答案重点关注 CORS 修复,并强调了类似问题的其他潜在原因。