Nginx端点可访问返回200但Prometheus的up指标显示为0
异常原因
你遇到的问题核心是Prometheus对刮取端点的返回内容有格式要求,并非HTTP状态码200就会判定刮取成功:
- Prometheus默认要求被刮取接口返回符合OpenMetrics规范的纯文本指标数据,格式为每行对应一条
指标名{标签集合} 指标值的记录。 - 你当前配置的Nginx接口返回的是
healthy\n字符串,无法被Prometheus的指标解析器识别,因此哪怕返回了200状态码,Prometheus仍会判定刮取失败,将对应up指标置为0。你可以直接在Prometheus的Targets页面查看该目标的报错详情,会明确显示文本解析失败的提示。
修复方案
可以根据你的需求选择以下任意一种方案:
- 调整Prometheus刮取配置为标准Nginx指标路径:给Nginx启用
stub_status模块,或额外部署nginx-prometheus-exporter输出标准Nginx运行指标,将prometheus.io/path注解改为对应指标路径即可。 - 修改当前Nginx返回内容为合法Prometheus指标:将返回值改为符合格式的指标记录,示例配置如下:
location / { return 200 'nginx_service_up 1\n'; }
内容的提问来源于stack exchange,提问作者user3908406
相关产品推荐
相关产品推荐

