Prometheus 和 Grafana 之间的数据传输方式

发布于:2025-04-02 ⋅ 阅读:(22) ⋅ 点赞:(0)

Prometheus 和 Grafana 之间的数据传输方式主要有以下几种:

1. Grafana 通过 PromQL 从 Prometheus 拉取数据(默认方式 ✅)

适用场景:大部分监控场景,Grafana 从 Prometheus 直接查询数据并可视化

原理

  • Prometheus 定期抓取(scrape) 监控目标的数据,并存储在**时间序列数据库(TSDB)**中。
  • Grafana 通过 Prometheus 数据源 使用 PromQL 查询数据,并展示在可视化面板上。

配置方式

  1. 在 Prometheus 配置监控目标 (prometheus.yml):
    scrape_configs:
      - job_name: 'my_application'
        static_configs:
          - targets: ['localhost:9090']
    
  2. 在 Grafana 配置 Prometheus 数据源
    • 进入 Grafana → Configuration → Data Sources
    • 选择 Prometheus
    • 设置 URLhttp://<prometheus-server>:9090
    • 点击 Save & Test
  3. 在 Grafana 创建仪表盘,使用 PromQL 查询数据
    rate(http_requests_total[5m])
    

优点

简单高效,Grafana 直接查询 Prometheus,无需额外组件
支持 PromQL,查询灵活
适用于大多数监控场景

缺点

Grafana 只能查询,不会主动存储数据
Prometheus 存储有限,数据只能保存一段时间(默认 15 天)

2. Prometheus 远程写入 (Remote Write) + Grafana Mimir / Thanos / Cortex

适用场景:大规模数据存储,历史数据分析,Prometheus 存储扩展

原理

  • Prometheus 提供 Remote Write 机制,可以将数据写入远程存储(如 Grafana Mimir、Thanos、Cortex)。
  • Grafana 直接连接 远程存储 进行数据查询,而不是查询 Prometheus。

配置方式

  1. 在 Prometheus (prometheus.yml) 配置远程写入
    remote_write:
      - url: "http://mimir-gateway:9009/api/v1/push"
    
  2. 在 Grafana 配置远程存储作为数据源
    • 进入 Grafana → Data Sources
    • 选择 Prometheus
    • URL 填写 http://mimir-gateway:9009
    • 启用 Prometheus Remote Write
  3. Grafana 通过远程存储查询数据

优点

支持长期存储,避免 Prometheus 15 天数据过期问题
适用于大规模集群监控,数据可持久化
支持高可用,避免 Prometheus 单点故障

缺点

需要额外部署 Mimir/Thanos/Cortex,运维复杂
数据存储成本较高

3. Prometheus Pushgateway + Grafana

适用场景:短时任务(如定时任务、批处理)

原理

  • Pushgateway 接收应用程序主动推送的监控数据,然后 Prometheus 定期拉取数据。
  • Grafana 通过 Prometheus 查询 Pushgateway 存储的数据。

配置方式

  1. 启动 Pushgateway
    ./pushgateway --web.listen-address=":9091"
    
  2. 应用程序主动推送数据
    echo "job_execution_time 5.3" | curl --data-binary @- http://localhost:9091/metrics/job/my_job
    
  3. 在 Prometheus (prometheus.yml) 配置 Pushgateway
    scrape_configs:
      - job_name: 'pushgateway'
        static_configs:
          - targets: ['localhost:9091']
    
  4. Grafana 通过 Prometheus 查询数据

优点

适用于短时任务、批处理、定时任务
兼容 Prometheus 拉取模式
适用于无固定运行时间的应用(如 CI/CD 任务)

缺点

Pushgateway 只能存储最新数据,不适合时间序列数据
数据不会自动过期,需要手动清理

4. Prometheus + Webhook / API 方式推送到 Grafana Loki / InfluxDB

适用场景:日志监控、外部系统数据推送

原理

  • Prometheus 使用 Webhook 方式,主动推送数据到 Grafana Loki(日志监控)InfluxDB(时序数据库)
  • Grafana 直接从 Loki/InfluxDB 查询数据,而不是查询 Prometheus。

配置方式

4.1 Loki(日志监控)

  1. 应用程序主动推送日志数据到 Loki
    echo '{"streams": [{ "stream": { "app": "my_service" }, "values": [["'$(date +%s%N)'", "error: something went wrong"]] }]}' |
    curl -XPOST http://localhost:3100/loki/api/v1/push -H "Content-Type: application/json" --data-binary @-
    
  2. 在 Grafana 配置 Loki 作为数据源
    • 进入 Grafana → Data Sources
    • 选择 Loki
    • URL 填写 http://localhost:3100
    • 保存并测试

4.2 InfluxDB(时序数据库)

  1. 应用程序主动推送数据
    curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server01 value=0.64'
    
  2. 在 Grafana 配置 InfluxDB
    • 进入 Grafana → Data Sources
    • 选择 InfluxDB
    • 配置 URLhttp://localhost:8086
    • 保存并测试

优点

适用于日志监控、IoT 数据监控
可以直接推送数据,无需 Prometheus
适用于应用程序不适合被 Prometheus 直接拉取的场景

缺点

需要额外的存储(Loki、InfluxDB)
Grafana 不能直接存储数据,只能展示

总结:哪种方式适合你?

方式 适用场景 主要特点 依赖组件
Prometheus 拉取模式 绝大多数监控 Grafana 直接查询 Prometheus Prometheus
Remote Write(Mimir/Thanos) 大规模存储 长期存储数据,解决 Prometheus 15 天限制 Mimir/Thanos
Pushgateway 短时任务(CI/CD、批处理) 应用主动推送数据,Prometheus 拉取 Pushgateway
Webhook / API(Loki/InfluxDB) 日志监控 / IoT 直接推送数据到 Loki/InfluxDB Loki/InfluxDB

推荐选择:

  • 标准监控Prometheus 拉取模式
  • 高并发数据存储远程存储(Mimir/Thanos)
  • 定时任务监控Pushgateway
  • 日志监控Loki
  • IoT 设备数据监控InfluxDB