什么是Prometheus
Promtheus是一款go语言开发的开源的新型监控系统,具有监控、告警功能。由多组件结合起来使用。
Prometheus跟传统监控有什么区别
为了便于理解与比较,这里选择跟Zabbix做对比
[开发语言方面]
Zabbix:服务端使用C开发,Web页面使用PHP开发。
Prometheus:服务端用go开发,有自带WebUI,也可对接Grafana实现更专业的展示。
[架构方面]
Zabbix:使用传统的C/S架构,被监控点安装agent,agent内置很多针对被监控点的采集指令,也可以自己写监控脚本进行扩展。支持主、被动的方式获取数据。支持部署proxy节点
Prometheus:微服务模式,服务端由多个组件构成,如Prometheus只负责数据收集与存储,告警则由alertmanager组件负责。客户端称为exporter,针对不同的服务由不同的exporter收集数据并通过特定的http端口暴露metric给Prometheus获取。也支持将数据推送到PushGateway,再由Prometheus 从PushGateway获取。可以自行开发exporter,也支持自定义脚本扩展监控。
[数据存储]
Zabbix:所有的数据使用MySQL、DB2、PostgreSQL等传统关系型数据库;
Prometheus:监控数据存储在时序数据库(如timescaledb、influxdb)上,也可以放在云对象存储以降低成本。被监控的服务器列表信息可以放到文件上,也可以放到consul上实现更丰富的自动发现特性。
[功能方面]
Zabbix:产品成熟,功能丰富,WebUI支持自定义模板。支持自动发现。
Prometheus:相对来说功能不如Zabbix齐全,但Promtheus有更灵活的操作方式,支持PromQL
语法查询。如可以配合Consul实现非常丰富的标签管理,充分发挥自动发现的优点。Prometheus内置的WebUI比较简陋,可以对接Grafana进行更专业的展示。
[使用方面]
Zabbix:在配置好C/S后,大部分的操作都在WebUI上完成。可以使用自带的页面展示,但一般会接到Grafana进行展示。
Promtheus: 较多操作在命令行完成,需要手写告警规则(正是灵活度的体现)。需要学习PromQL语法但很简单。需要手写较多的配置,比如定义label等等。
Prometheus架构
为了便于理解,画了个最简单的Prometheus运行架构图。去掉了较少使用的PushGateway组件。

Prometheus本身只做监控项管理、数据收集、告警规则设置,告警由Alertmanager负责,exporter可能是多个监控不同服务的客户端,监控数据由Grafana展示。
尊重原创,如需转载请联系作者,微信号:opgaozhan 或识别以下二维码





