Docker Compose部署Prometheus未采集Dapr指标,Grafana无数据
Dapr指标无法在Grafana仪表盘加载的问题排查
问题概述
在Docker Compose环境中配置了Prometheus采集Dapr指标,但Grafana仪表盘始终显示“NO DATA”。推测核心问题是Prometheus未正确配置Dapr指标采集目标。
Docker Compose配置
prometheus: image: prom/prometheus:latest ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml grafana: image: grafana/grafana:8.3.3 container_name: grafana ports: - "3000:3000" volumes: - ./grafana/dashboards.yml:/etc/grafana/provisioning/dashboards/rabbitmq.yaml - ./grafana/datasources.yml:/etc/grafana/provisioning/datasources/prometheus.yaml - ./grafana/dashboards:/dashboards - ./grafana-plugins:/var/lib/grafana/plugins:rw
prometheus.yml配置
global: scrape_interval: 15s scrape_timeout: 10s alerting: alertmanagers: - static_configs: - targets: rule_files: scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'dapr' scrape_interval: 5s static_configs: - targets: ['localhost:9090'] - job_name: 'cadvisor' static_configs: - targets: ['cadvisor:8080'] labels: alias: 'cadvisor'
Grafana配置情况
已在Grafana中配置指向http://prometheus:9090的名为“dapr”的数据源,仪表盘面板指定使用该数据源,但仍显示无数据。仪表盘示例配置片段如下:
{ "annotations": { "list": [ { "builtIn": 1, "datasource": "-- Grafana --", "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "limit": 100, "name": "Annotations & Alerts", "showIn": 0, "type": "dashboard" } ] }, "editable": true, "gnetId": null, "graphTooltip": 0, "id": 3, "iteration": 1607134134143, "links": [], "panels": [ { "collapsed": false, "datasource": "dapr", "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 16, "panels": [], "title": "Health monitor", "type": "row" }, { "cacheTimeout": null, "datasource": "dapr", "description": "This shows the uptime" } ] }
核心问题分析与解决步骤
1. 修正Prometheus的Dapr采集目标配置
当前prometheus.yml中dapr job的targets配置为localhost:9090,这是错误的:
- 在Docker容器内部,
localhost指向容器自身,而非运行Dapr的容器/服务。 - Dapr sidecar默认指标端口为9090,需将目标地址改为Dapr所在服务的容器名/服务名(Docker Compose网络内可直接访问),例如:
替换- job_name: 'dapr' scrape_interval: 5s static_configs: - targets: ['your-dapr-service-name:9090']your-dapr-service-name为实际运行Dapr的服务在Docker Compose中的服务名称。
2. 确认Dapr已启用指标采集
启动Dapr时需确保开启指标功能:
- 使用命令行启动时添加参数:
dapr run --enable-metrics ... - 若使用配置文件,需在
config.yaml中添加:metrics: enabled: true
3. 验证Prometheus采集状态
- 访问Prometheus UI(
http://localhost:9090),进入Targets页面,检查daprjob的状态是否为UP:- 若为
DOWN,进入Prometheus容器内部测试连通性:
若无法获取指标数据,需检查Dapr服务的网络连通性及端口是否开放。docker exec -it <prometheus-container-id> curl <dapr-target>:9090/metrics
- 若为
- 进入Graph页面,输入
dapr_开头的指标(如dapr_http_server_requests_total),确认是否有数据返回。
4. 检查Grafana配置细节
- 确认数据源“dapr”的测试连接成功,且地址
http://prometheus:9090在Docker Compose网络内可访问。 - 检查仪表盘面板的时间范围是否合理(建议选择最近15分钟,匹配Prometheus的采集间隔)。
- 确认面板查询的指标名称与Dapr实际暴露的指标一致(可通过Prometheus的
/metrics端点查看完整指标列表)。
内容的提问来源于stack exchange,提问作者user17404740
相关产品推荐
相关产品推荐

