Prometheus 是什么?
想象你是一家医院的院长,需要实时监测所有病人的心跳、体温、血压等数据,并在异常时发出警报。Prometheus 就是这个「智能监测系统」,它能自动采集服务器的 CPU、内存、网络等指标,帮你掌控整个系统的健康状况。
核心概念(用生活场景解释)
1.时间序列数据(Time Series Data)
- 类比:每隔 5 分钟记录一次病人的体温,形成一条随时间变化的数据曲线。
- 技术解释:Prometheus 存储的所有数据都带有时间戳,比如 CPU使用率{主机="Web服务器"} 75% 2023-10-01 14:00:00。
2.指标(Metric)
- 类比:监测的指标类型,如体温、心率、血压。
- 技术解释:Prometheus 预定义了 CPU使用率、内存占用、网络流量 等指标,也可自定义业务指标(如「网站每秒访问量」)。
3.Exporter(数据采集器)
- 类比:贴在病人身上的传感器(如体温计、心率带)。
- 技术解释:Exporter 是被监控对象上的程序,负责将数据转换成 Prometheus 能理解的格式。比如:
- Node Exporter:采集服务器硬件指标。
- MySQL Exporter:采集数据库状态。
4.PromQL(查询语言)
- 类比:医生查看某个病人过去一小时的体温曲线。
- 技术解释:用 PromQL 编写查询语句,如 avg(cpu_usage{job="web"} [1h]) 表示「过去1小时Web服务器的平均CPU使用率」。
5.Alertmanager(警报管理器)
- 类比:当病人体温超过 39°C 时,护士站自动响铃报警。
- 技术解释:设定规则(如 CPU > 80%持续5分钟),触发后通过邮件、微信、钉钉等通知管理员。
Prometheus 工作原理
- 拉取数据:Prometheus 定期主动从 Exporter 拉取(Pull)数据(默认每15秒一次)。
- 存储数据:所有数据按时间序列存储在本地或远程数据库中。
- 规则计算:根据预设规则判断是否触发警报。
- 可视化展示:通过 Grafana 等工具生成漂亮的监控图表。
架构图
快速入门:10分钟搭建监控系统
步骤1:安装 Prometheus(Docker 版)
# 创建配置文件 prometheus.yml
cat < prometheus.yml
global:
scrape_interval: 15s # 每15秒采集一次数据
scrape_configs:
- job_name: 'prometheus' # 监控自己
static_configs:
- targets: ['localhost:9090'] # Prometheus默认端口
EOF
# 启动 Prometheus
docker run -d -p 9090:9090 -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
步骤2:访问监控面板
打开浏览器访问 http://你的服务器IP:9090,输入 PromQL 查询语句(如 up)即可看到当前监控状态。
步骤3:监控其他服务器
在目标服务器上安装 Node Exporter:
# 被监控服务器上运行
docker run -d -p 9100:9100 prom/node-exporter
修改 prometheus.yml,添加新监控目标:
scrape_configs:
- job_name: 'web-servers'
static_configs:
- targets: ['被监控服务器IP:9100']
进阶应用场景
- 业务监控:监控电商网站的「订单创建量」、「支付成功率」。
- 微服务追踪:结合 Istio 监控 Kubernetes 中的服务健康状况。
- 自动化扩容:当 CPU 负载超过阈值时,自动触发云服务器扩容。
常见问题解答
Q1:Prometheus 的数据存在哪里?
默认存储在本地磁盘(可配置保留时间),生产环境建议用 VictoriaMetrics 或 Thanos 长期存储。
Q2:和 Zabbix 有什么区别?
- Prometheus:适合云原生环境,灵活度高,需自行配置。
- Zabbix:开箱即用,适合传统服务器监控。
Q3:监控频率能调吗?
可以!在 prometheus.yml 中修改 scrape_interval,比如调成 5s(更频繁但消耗资源)。
注意事项
- 数据持久化:默认数据保存在容器内,重启会丢失,建议挂载外部目录。
- 资源消耗:监控大量目标时,需适当增加服务器内存。
- 警报静默:合理配置 Alertmanager 的静默规则,避免“警报疲劳”。
Tags:scrape_interval