You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义指标未在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配置文件?


问题分析
  1. Prometheus未加载自定义配置:原docker-compose.yml没有将本地的prometheus.yml挂载到Prometheus容器内,导致容器使用默认配置,根本没配置抓取my-service的规则。
  2. 服务名称解析错误:docker-compose中业务服务的名称是my-service,但Prometheus配置里的target写成了my_service:8080,同时Prometheus容器的hostname被错误设置为my_service,导致DNS解析混乱。
  3. 未验证指标端点可用性:没有确认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,确认myapp job的状态为UP。

内容的提问来源于stack exchange,提问作者jinxankit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:27:21