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 学习建议 #
- 理解核心概念:掌握数据模型和架构
- 动手实践:搭建Prometheus环境
- 学习PromQL:掌握查询语言
- 配置告警:设置合理的告警规则
- 集成Grafana:实现可视化展示
下一步,让我们学习Prometheus的安装与配置!
最后更新:2026-03-27