Prometheus 和 Grafana

Prometheus + Grafana 在生产环境中的部署和监控模式,目前主流有以下几种:

Pull(拉模式)------ Prometheus 默认模式,也是最主流的

架构:

text 复制代码
业务服务
    │
    ├─ /metrics
    │
Prometheus
    │
    ▼
Grafana

例如:

text 复制代码
Java应用
  └── Micrometer
        └── /actuator/prometheus

Prometheus
  └── 每15秒拉取一次

Grafana
  └── 查询Prometheus

Prometheus主动去目标服务拉取数据:

yaml 复制代码
scrape_configs:
  - job_name: java-app
    static_configs:
      - targets:
        - 10.0.0.1:8080
        - 10.0.0.2:8080

优点

  • Prometheus掌控采集频率
  • 服务无需主动上报
  • 服务重启不影响
  • 易于发现异常实例

缺点

  • Prometheus必须能访问目标
  • 跨网络、跨机房比较麻烦

Push(推模式)

通过 PushGateway:

text 复制代码
Job
  │
  ▼
PushGateway
  │
  ▼
Prometheus
  │
  ▼
Grafana

例如:

java 复制代码
批处理任务
ETL任务
定时任务
数据同步任务

执行完成后:

java 复制代码
pushAdd(...)

把指标推给 PushGateway。

使用场景

短生命周期任务:

text 复制代码
CronJob
Spark Job
Flink Batch
数据清洗任务

因为这些任务可能几秒钟就结束了:

text 复制代码
Prometheus还没来得及抓
进程已经退出

所以需要主动推送。

因此:

text 复制代码
长期运行服务 → Pull
临时任务 → PushGateway

Service Discovery(服务发现)

这是现在 Kubernetes 环境最常见的模式。

text 复制代码
Pod
Pod
Pod

↓ 自动发现

Prometheus

↓ 查询

Grafana

Prometheus自动发现实例:

yaml 复制代码
kubernetes_sd_configs:

不需要手动维护:

yaml 复制代码
targets:
  - 10.0.0.1
  - 10.0.0.2
  - 10.0.0.3

实例扩容后自动加入监控。

现代云原生环境

基本都是:

text 复制代码
Pull + Service Discovery

组合。

实际生产中最常见的做法是:

text 复制代码
Actor系统
    ↓
Micrometer
    ↓
/actuator/prometheus
    ↓
Prometheus(Pull)
    ↓
Grafana

也就是 Pull + Service Discovery(如果有 K8S)。这是目前 Java 微服务领域最主流、最成熟的方案。