Prometheus简介
Prometheus作为新一代的云原生监控系统,是继Kubernetes之后成为第二个正式加入CNCF基金会的项目。
官方架构图
- Prometheus Server:服务核心组件,通过pull metrics从 Exporter 拉取和存储监控数据,并提供一套灵活的查询语言(PromQL)。
- pushgateway:类似一个中转站,Prometheus的server端只会使用pull方式拉取数据,但是某些节点因为某些原因只能使用push方式推送数据,那么它就是用来接收push而来的数据并暴露给Prometheus的server拉取的中转站
- Exporters/Jobs:负责收集目标对象(host, container…)的性能数据,并通过 HTTP 接口供Prometheus Server 获取。
- Service Discovery:服务发现,Prometheus支持多种服务发现机制:文件,DNS,Consul,Kubernetes,OpenStack,EC2等等。基于服务发现的过程并不复杂,通过第三方提供的接口,Prometheus查询到需要监控的Target列表,然后轮训这些Target获取监控数据。
- Alertmanager:从 Prometheus server 端接收到 alerts
后,会进行去除重复数据,分组,并路由到对方的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty 等。
工作流程:Prometheus Server定期从配置好的Exporters/Jobs中拉metrics,或者来着pushgateway发过来的metrics,或者其它的metrics,收集完后运行定义好的alert.rules(这个文件后面会讲到),记录时间序列或者向Alertmanager推送警报
与zabbix监控系统比较
Prometheus | Zabbix |
---|---|
后端用golang开发,K8S也是go开发 | 后端用C开发,界面用PHP开发 |
更适合云环境的监控,尤其是对K8S有着更好的支持 | 更适合监控物理机,虚拟机环境 |
监控数据存储在基于时间序列的数据库内,便于对已有数据进行新的聚合 | 监控数据存储在关系型数据库内,如MySQL,很难从现有数据中扩展维度 |
自身界面相对较弱,很多配置需要修改配置文件,但可以借由Grafana出图 | 图形化界面相对比较成熟 |
支持更大的集群规模,速度也更快 | 集群规模上线为10000个节点 |
2015年后开始快速发展,社区活跃,使用场景越来越多 | 发展实际更长,对于很多监控场景,都有现成的解决方案 |
Prometheus的优势
-
多维数据模型:由度量名称和键值对标识的时间序列数据
-
内置时间序列数据库:TSDB
-
promQL:一种灵活的查询语言,可以利用多维数据完成复杂查询
-
基于HTTP的pull(拉取)方式采集时间序列数据
-
同时支持PushGateway组件收集数据
-
通过服务发现或静态配置发现目标
-
支持作为数据源接入Grafana