Prometheus简介 #

一、什么是Prometheus #

1.1 Prometheus概述 #

Prometheus是一个开源的系统监控和告警工具包,最初由SoundCloud开发,于2016年加入云原生计算基金会(CNCF),成为继Kubernetes之后的第二个毕业项目。

text
Prometheus定位:

┌─────────────────────────────────────────────┐
│           监控告警系统                       │
├─────────────────────────────────────────────┤
│ • 时序数据库(TSDB)                         │
│ • 数据采集(Pull模式)                       │
│ • 查询语言(PromQL)                         │
│ • 告警管理(Alertmanager)                   │
│ • 可视化支持                                 │
└─────────────────────────────────────────────┘

1.2 发展历史 #

text
Prometheus发展历程:

2012年
├── SoundCloud开始开发
└── 解决微服务监控问题

2015年
├── 开源发布
└── 社区快速发展

2016年
├── 加入CNCF
└── 成为第二个项目

2018年
├── CNCF毕业项目
└── 生产级成熟度

至今
├── 广泛应用于企业
└── 云原生监控标准

二、核心特点 #

2.1 多维数据模型 #

text
数据模型结构:

指标名称(Metric Name)
├── http_requests_total
├── node_cpu_seconds_total
└── container_memory_usage_bytes

标签(Labels)
├── method="GET"
├── status="200"
├── instance="localhost:8080"
└── job="api-server"

完整示例:
http_requests_total{method="GET", status="200", instance="localhost:8080"}

2.2 灵活的查询语言 #

promql
# 即时查询:当前请求数
http_requests_total

# 范围查询:过去5分钟的请求数
http_requests_total[5m]

# 按标签过滤
http_requests_total{method="GET"}

# 计算速率:每秒请求数
rate(http_requests_total[5m])

# 聚合查询:按方法分组求和
sum by (method) (rate(http_requests_total[5m]))

2.3 Pull模式采集 #

text
Pull模式 vs Push模式:

Pull模式(Prometheus)
┌─────────────────────────────────────────────┐
│ Prometheus ──主动拉取──> Exporter           │
│                                             │
│ 优点:                                      │
│ • 服务端控制采集频率                         │
│ • 易于发现服务状态                           │
│ • 目标集中管理                               │
│ • 无需客户端配置推送地址                     │
└─────────────────────────────────────────────┘

Push模式(传统监控)
┌─────────────────────────────────────────────┐
│ Agent ──主动推送──> 监控服务器              │
│                                             │
│ 缺点:                                      │
│ • 客户端需要配置服务器地址                   │
│ • 难以判断Agent存活                          │
│ • 推送频率难以统一                           │
└─────────────────────────────────────────────┘

2.4 服务发现 #

yaml
# 静态配置
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

# Kubernetes服务发现
scrape_configs:
  - job_name: 'kubernetes-pods'
    kubernetes_sd_configs:
      - role: pod

# Consul服务发现
scrape_configs:
  - job_name: 'consul'
    consul_sd_configs:
      - server: 'localhost:8500'

2.5 内置时序数据库 #

text
Prometheus TSDB特点:

┌─────────────────────────────────────────────┐
│ 存储特性                                    │
├─────────────────────────────────────────────┤
│ • 高效压缩:每个样本约1-2字节               │
│ • 本地存储:无外部依赖                      │
│ • 高性能:支持百万级时间序列                │
│ • 数据保留:可配置保留时间                  │
└─────────────────────────────────────────────┘

存储结构:
data/
├── chunks/        # 数据块
├── index/         # 索引文件
├── tombstones/    # 删除标记
└── wal/           # 预写日志

三、架构组件 #

3.1 整体架构 #

text
Prometheus架构图:

┌─────────────────────────────────────────────────────────────┐
│                      Prometheus Server                       │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │ 检索模块    │  │ TSDB存储    │  │ HTTP Server │         │
│  │ Retrieval   │  │ Storage     │  │             │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
│         │                │                │                 │
│         ▼                ▼                ▼                 │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │ 服务发现    │  │ PromQL引擎  │  │ Web UI      │         │
│  │ Service     │  │ Query       │  │ API         │         │
│  │ Discovery   │  │ Engine      │  │             │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
└─────────────────────────────────────────────────────────────┘
        │                                        │
        │ Pull                                   │ Alert
        ▼                                        ▼
┌───────────────┐                      ┌─────────────────┐
│   Exporters   │                      │ Alertmanager    │
│ ┌───────────┐ │                      │                 │
│ │Node       │ │                      │ • 去重          │
│ │Exporter   │ │                      │ • 分组          │
│ ├───────────┤ │                      │ • 路由          │
│ │MySQL      │ │                      │ • 静默          │
│ │Exporter   │ │                      └─────────────────┘
│ ├───────────┤ │                              │
│ │Custom     │ │                              ▼
│ │Exporter   │ │                      ┌─────────────────┐
│ └───────────┘ │                      │ 通知渠道        │
└───────────────┘                      │ • Email         │
                                       │ • Slack         │
                                       │ • PagerDuty     │
                                       │ • Webhook       │
                                       └─────────────────┘

3.2 核心组件 #

text
核心组件说明:

1. Prometheus Server
   ├── 检索(Retrieval):数据采集
   ├── TSDB:时序数据存储
   ├── HTTP Server:提供API和UI
   └── PromQL引擎:查询处理

2. Exporters
   ├── Node Exporter:主机监控
   ├── MySQL Exporter:MySQL监控
   ├── Redis Exporter:Redis监控
   └── 自定义Exporter:应用监控

3. Alertmanager
   ├── 告警去重
   ├── 告警分组
   ├── 告警路由
   └── 告警静默

4. Pushgateway
   ├── 短期任务推送
   └── 批量任务监控

5. 客户端库
   ├── Go
   ├── Java
   ├── Python
   ├── Ruby
   └── 其他语言

四、应用场景 #

4.1 典型应用场景 #

text
Prometheus应用场景:

┌─────────────────────────────────────────────┐
│ 1. 基础设施监控                             │
│    • 服务器性能监控                         │
│    • 网络设备监控                           │
│    • 存储系统监控                           │
├─────────────────────────────────────────────┤
│ 2. 应用程序监控                             │
│    • 微服务监控                             │
│    • API性能监控                            │
│    • 业务指标监控                           │
├─────────────────────────────────────────────┤
│ 3. 容器和Kubernetes监控                     │
│    • 容器资源监控                           │
│    • Pod状态监控                            │
│    • 集群健康监控                           │
├─────────────────────────────────────────────┤
│ 4. 数据库监控                               │
│    • MySQL/PostgreSQL                       │
│    • MongoDB/Redis                          │
│    • Elasticsearch                          │
└─────────────────────────────────────────────┘

4.2 适用场景 #

text
✅ 适合使用Prometheus:

• 云原生环境(Kubernetes、Docker)
• 微服务架构
• 动态变化的基础设施
• 需要多维数据分析
• 需要灵活的告警规则

❌ 不适合使用Prometheus:

• 需要100%数据准确性(可能有数据丢失)
• 需要长期存储(默认本地存储)
• 事件日志监控(不是日志系统)
• 用户行为分析(不是分析系统)

五、生态系统 #

5.1 生态系统概览 #

text
Prometheus生态系统:

┌─────────────────────────────────────────────┐
│           数据采集层                        │
├─────────────────────────────────────────────┤
│ Exporters    │ 客户端库    │ Pushgateway   │
│ • Node       │ • Go        │ • 短期任务    │
│ • MySQL      │ • Java      │ • 批量任务    │
│ • Redis      │ • Python    │               │
│ • 自定义     │ • 其他      │               │
└─────────────────────────────────────────────┘
              │
              ▼
┌─────────────────────────────────────────────┐
│           存储层                            │
├─────────────────────────────────────────────┤
│ Prometheus TSDB │ 远程存储                  │
│ • 本地存储      │ • Thanos                  │
│ • 高效压缩      │ • Cortex                  │
│                 │ • VictoriaMetrics         │
└─────────────────────────────────────────────┘
              │
              ▼
┌─────────────────────────────────────────────┐
│           可视化层                          │
├─────────────────────────────────────────────┤
│ Prometheus UI │ Grafana │ 其他工具          │
│ • 内置界面    │ • 仪表盘 │ • Console        │
│ • 表达式查询  │ • 告警   │ • 第三方集成     │
└─────────────────────────────────────────────┘
              │
              ▼
┌─────────────────────────────────────────────┐
│           告警层                            │
├─────────────────────────────────────────────┤
│ Alertmanager                                │
│ • 去重分组  • 路由通知  • 静默管理          │
└─────────────────────────────────────────────┘

5.2 常用Exporters #

text
官方和社区Exporters:

基础设施:
├── Node Exporter     # 主机监控
├── SNMP Exporter     # 网络设备
├── IPMI Exporter     # 硬件监控
└── JMX Exporter      # Java应用

数据库:
├── MySQL Exporter    # MySQL
├── PostgreSQL Exporter
├── MongoDB Exporter
├── Redis Exporter
└── Elasticsearch Exporter

消息队列:
├── Kafka Exporter
├── RabbitMQ Exporter
└── NATS Exporter

Web服务:
├── Nginx Exporter
├── Apache Exporter
└── HAProxy Exporter

云平台:
├── AWS CloudWatch Exporter
├── Azure Monitor Exporter
└── GCP Stackdriver Exporter

六、与其他监控系统的对比 #

6.1 对比表格 #

text
监控系统对比:

┌──────────────┬─────────────┬─────────────┬─────────────┐
│ 特性         │ Prometheus  │ Zabbix      │ Nagios      │
├──────────────┼─────────────┼─────────────┼─────────────┤
│ 数据模型     │ 多维标签    │ 键值对      │ 状态检查    │
│ 采集方式     │ Pull        │ Push/Pull   │ Push        │
│ 查询语言     │ PromQL      │ 无          │ 无          │
│ 存储方式     │ 时序数据库  │ 关系数据库  │ 文件        │
│ 云原生支持   │ 优秀        │ 一般        │ 差          │
│ 扩展性       │ 良好        │ 一般        │ 一般        │
│ 学习曲线     │ 中等        │ 中等        │ 简单        │
└──────────────┴─────────────┴─────────────┴─────────────┘

┌──────────────┬─────────────┬─────────────┬─────────────┐
│ 特性         │ Prometheus  │ InfluxDB    │ Datadog     │
├──────────────┼─────────────┼─────────────┼─────────────┤
│ 开源         │ 是          │ 是          │ 否          │
│ 数据模型     │ 多维标签    │ 标签+字段   │ 多维标签    │
│ 查询语言     │ PromQL      │ InfluxQL    │ 查询API     │
│ 部署方式     │ 自托管      │ 自托管      │ SaaS        │
│ 成本         │ 免费        │ 免费/付费   │ 付费        │
│ 功能完整性   │ 中等        │ 高          │ 高          │
└──────────────┴─────────────┴─────────────┴─────────────┘

6.2 Prometheus的优势 #

text
Prometheus核心优势:

1. 云原生友好
   ├── Kubernetes原生支持
   ├── 服务发现机制
   └── 容器化部署

2. 强大的数据模型
   ├── 多维标签
   ├── 灵活查询
   └── 精确聚合

3. 完整的监控方案
   ├── 数据采集
   ├── 存储
   ├── 查询
   ├── 告警
   └── 可视化

4. 活跃的社区
   ├── 丰富的Exporters
   ├── 完善的文档
   └── 持续更新

5. 易于运维
   ├── 单二进制文件
   ├── 无外部依赖
   └── 配置简单

七、总结 #

7.1 Prometheus核心要点 #

特性 说明
数据模型 多维数据模型,支持标签
查询语言 PromQL,功能强大
采集方式 Pull模式,主动拉取
存储方式 内置TSDB,高效压缩
告警管理 Alertmanager,灵活配置
服务发现 支持多种服务发现机制

7.2 学习建议 #

  1. 理解核心概念:掌握数据模型和架构
  2. 动手实践:搭建Prometheus环境
  3. 学习PromQL:掌握查询语言
  4. 配置告警:设置合理的告警规则
  5. 集成Grafana:实现可视化展示

下一步,让我们学习Prometheus的安装与配置!

最后更新:2026-03-27