如何启用Prometheus内部指标实现Prometheus服务自监控
Prometheus 自身指标暴露配置指引
Prometheus 2.x 及以上版本默认自动开启自身运行指标暴露能力,不需要额外编译或加载插件,默认暴露规则:
- 复用Web UI服务端口,默认9090
- 指标访问路径固定为
/metrics - 验证方式:服务启动后直接访问
http://localhost:9090/metrics,能看到prometheus_*、go_*开头的时序指标文本,就说明暴露功能正常。
如果你访问上述地址拿不到指标,按以下场景排查调整:
场景1:启动配置错误导致端点未监听
官方prom/prometheus镜像的默认启动命令已经包含了正确的监听配置,如果你手动覆盖了command配置,需要确保包含以下核心参数,不要加任何禁用指标端点的参数:
# 在docker-compose.yml的prometheus服务下添加如下配置(如果之前没配command可以直接加) services: prometheus: image: prom/prometheus # 新增下面的command段 command: - "--config.file=/etc/prometheus/prometheus.yml" - "--storage.tsdb.path=/prometheus" - "--web.listen-address=:9090" # 监听所有网卡的9090端口,和UI共用 # 原有ports、volumes、networks配置保持不变
配置后执行docker-compose up -d重启容器,再访问/metrics路径验证即可。
场景2:自定义路由/鉴权导致指标路径不可达
如果你给Prometheus配置了自定义参数:
- 若加了
--web.route-prefix=/自定义前缀,指标路径会变为/自定义前缀/metrics,后续采集时需要对应修改metrics_path配置 - 若通过
web.config.yml配置了Basic Auth、TLS认证,需要确保/metrics路径放通,或者在采集配置中补上对应的鉴权参数 - 若加了反向代理,需要把
/metrics路径的请求转发到Prometheus的9090端口,不要拦截该路径的请求
自监控采集配置校验参考
你提到已经掌握采集配置方法,这里给出最简可用配置供校验,写入你挂载的prometheus.yml即可:
scrape_configs: - job_name: "prometheus-self" scrape_interval: 15s metrics_path: "/metrics" # 自定义了路由前缀的话这里要对应修改 static_configs: - targets: ["localhost:9090"]
注意:这里targets写
localhost:9090即可,因为是Prometheus容器内部访问自身服务,不需要写docker服务名或者宿主机IP。
配置完成后重启容器,在Web UI的Targets页面看到该job状态为UP,查询up{job="prometheus-self"}返回值为1,就说明自监控正常工作。
内容的提问来源于stack exchange,提问作者gstackoverflow
相关产品推荐
相关产品推荐

