自定义指标未在Prometheus及Grafana中显示,求配置修正
问题描述
我需要使用Prometheus记录自定义指标,但自定义指标未在Prometheus Web UI及Grafana中显示。尝试过相关排查方案但没有效果。
当前配置文件如下:
原docker-compose.yml
version: "3" volumes: prometheus_data: {} grafana_data: {} services: prometheus: image: prom/prometheus:latest container_name: prometheus hostname: my_service ports: - 9090:9090 depends_on: - my_service my-service: build: . ports: - 8080:8080 grafana: image: grafana/grafana:latest container_name: grafana hostname: grafana ports: - 3000:3000 depends_on: - prometheus
原prometheus.yml
global: scrape_interval: 5s scrape_timeout: 10s external_labels: monitor: 'my-project' rule_files: scrape_configs: - job_name: myapp scrape_interval: 10s static_configs: - targets: - my_service:8080
我也尝试过使用外部IP,但仍无法在Prometheus UI中看到我的指标,且目标页面仅显示localhost:9090处于正常状态。请问问题可能出在哪里?能否修正我的docker-compose和prometheus配置文件?
问题分析
- Prometheus未加载自定义配置:原docker-compose.yml没有将本地的
prometheus.yml挂载到Prometheus容器内,导致容器使用默认配置,根本没配置抓取my-service的规则。 - 服务名称解析错误:docker-compose中业务服务的名称是
my-service,但Prometheus配置里的target写成了my_service:8080,同时Prometheus容器的hostname被错误设置为my_service,导致DNS解析混乱。 - 未验证指标端点可用性:没有确认my-service是否正确在
/metrics路径下暴露自定义指标。
修正后的配置文件
修正后的docker-compose.yml
version: "3" volumes: prometheus_data: {} grafana_data: {} services: prometheus: image: prom/prometheus:latest container_name: prometheus ports: - 9090:9090 # 挂载本地配置文件到容器内默认路径 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' depends_on: - my-service my-service: build: . container_name: my-service ports: - 8080:8080 grafana: image: grafana/grafana:latest container_name: grafana ports: - 3000:3000 volumes: - grafana_data:/var/lib/grafana depends_on: - prometheus
修正后的prometheus.yml
global: scrape_interval: 5s scrape_timeout: 10s external_labels: monitor: 'my-project' # 空rule_files需显式声明为空数组,避免语法警告 rule_files: [] scrape_configs: - job_name: myapp scrape_interval: 10s static_configs: - targets: # 使用docker-compose中正确的服务名称 - my-service:8080
额外验证步骤
- 先在宿主机访问
http://localhost:8080/metrics,确认能看到自定义指标的输出,确保业务服务正确暴露了指标端点。 - 启动容器后,进入Prometheus容器执行
curl my-service:8080/metrics,验证容器间网络连通性。 - 打开Prometheus Target页面
http://localhost:9090/targets,确认myappjob的状态为UP。
内容的提问来源于stack exchange,提问作者jinxankit
相关产品推荐
相关产品推荐

