Prometheus架构解析
一、整体架构模式
Prometheus主体是Pull(拉取)模型:Prometheus Server主动去各个target拉取指标;
只有短生命周期任务使用Push(推送),推送到Pushgateway
二、各个组件拆解
1.被监控端(监控目标targets)
①exporter(Jobs/exporters)
-- 持续运行的客户端采集程序,采集CPU、内存、磁盘、网络等metrics指标
-- 对外暴露/metrics接口,Prometheus server pull 拉取指标数据
例子:node_exporter、cAdvisor、mysqld_exporter
②短作业程序Short-lived jobs
程序执行完就退出,不会持续运行,不能等待Prometheus来拉取
解决办法:程序结束时,push推送指标给Pushgateway
2.Pushgateway(中间人,临时存放数据)
作用:专门接收短生命周期任务推送过来的监控指标,做临时存储
-- 注意:不是给普通exporter使用,只给一次性短作业使用
3.Service discovery 服务发现
自动发现监控target目标,不用手动写大量targets
①kubernetes:对接k8s,自动发现pod、service
②file_sd:读取配置文件,动态加载监控目标
4.Prometheus Server 服务核心(三大模块)
①Retrieval 抓取模块
按照scrape_interval抓取间隔(图中标15s),主动pull拉取各个target的metrics指标
②TSDB时序数据库
把采集到的指标,以时间序列格式持久化保存到磁盘(HDD/SSD)
时间序列:指标名+标签+时间戳+数值
③HTTP server API
对外提供API接口,支持PromQL查询,提供Web UI访问
5.告警链路
①Prometheus内部根据告警规则计算,产生警告,push推送给Alertmanager
②Alertmanager告警管理器:接受告警,做去重、分组、降噪
③通知渠道:Email邮件、pagerduty、微信、短信、电话等通知运维工程师
6.查询与可视化
①PromQL:Prometheus专属查询语句,用来查询时序指标数据
②Prometheus web UI:自带简易web页面,可以写PromQL查询,自带图表
③Grafana:专业可视化组件,调用Prometheus API,做丰富仪表盘、图形展示
④API clients:其他程序调用 Prometheus API 获取监控数据
7.完整两条数据流
①长期运行服务(exporter)
被监控主机exporter采集指标 → Prometheus Server(Retrieval 拉取 → TSDB 磁盘存储) → Grafana/webUI 展示;触发告警交给 Alertmanager 发送通知
②短生命周期一次性任务
短作业程序 push推送指标 → Pushgateway 临时保存 → Prometheus Server pull 拉取数据 → 存储、查询、告警展示
8.五大核心组件
①Prometheus server:核心,抓取、存储、计算告警规则
②exporter:被监控端采集指标
③grafana:可视化绘图
④alertmanager:告警管理、发送通知
⑤pushgateway:短作业推送指标的中间件
