Zabbix、Prometheus、Grafana、Nightingale,四个监控如何选型?
调研监控系统的时候通常会看到这四个产品Prometheus、Grafana、Zabbix、Nightingale对新手而言是个选型难题。本文尝试分别解释其适用场景和优缺点当然了每个人的认知都有局限仅供大家参考。ZabbixZabbix 是老牌监控产品主要用于资产设备监控比如监控网络设备、服务器Zabbix 要求用户在 UI 上主动添加设备填写连接地址、认证信息。是典型的资产式管理逻辑。Zabbix 也可以监控 MySQL、Redis、Postgres、Kubernetes 等各类开源组件但这不是它的长处采集的指标偏少、海量指标不方便检索。对于微服务指标监控Zabbix 就更加不擅长了这是 Prometheus 生态的天下。Zabbix 产品经过多年打磨产品完成度极高体现在沉淀了大量的模板可以开箱即用监控各类网络设备数据采集时的 ETL 处理很完备因为 SNMP 数据很不规整促使 Zabbix 沉淀了很多预处理器告警事件的发送链路也有不错的抽象多种媒介的适配、灵活的消息模板对各类老旧设备的兼容性很好比如 AIXZabbix 仍然服役于大量企业主要是解决设备监控的场景。PrometheusPrometheus 是模仿 Borgmon 诞生的可谓师出名门专门为时序数据研发了 TSDBTime series database简洁的查询语法、时序数据定义方式已然成为业内事实标准。Prometheus 社区有非常多的 Exporter就是监控采集器可以采集机器、数据库、中间件等各类监控数据不同的 Exporter 通常是不同的社区贡献者维护的所以实际使用时是要部署很多二进制。可视化方面Prometheus 仅提供实时 Ad-hoc 查询探索不提供仪表盘能力Prometheus 通常和 Grafana 配合使用由 Grafana 提供仪表盘能力。告警方面Prometheus 提供的是 Yaml 文件方式来配置告警规则没有提供 UI。Prometheus 是单点架构进程里内置告警引擎周期性查询自身的监控数据产生告警事件告警事件推给 Alertmanager 做后续的去重、静默、抑制、路由、发送。Prometheus 生态非常开放吸引了广大贡献者Prometheus 是当前世界上最流行的监控生态。实际在落地的时候如果你们担心单点架构不可靠或者你们数据量比较大更建议使用 VictoriaMetricsVictoriaMetrics 和 Prometheus 接口、协议兼容姑且可以看作是分布式的 Prometheus。Prometheus 社区也提供了 SNMP Exporter也可以监控网络设备不过相比 Zabbix 的开箱即用要折腾得多如果追求统一化平台可以用 Prometheus 这套体系监控所有数据如果想追求设备监控的开箱即用可以两个产品配合使用。GrafanaGrafana 的用户量是监控、可观测性领域最大的因为它是可视化领域的老大。虽然 AI 发展迅猛但是 AI 更擅长的是实时分析、推理Grafana 不会被 AI 替代Grafana 相当于是承接了 AI 生成的可视化数据。Grafana 可以对接多种数据源最丝滑的是 Prometheus、Mimir、VictoriaMetrics、Tempo、Loki即跟自己的产品对接最为丝滑。Grafana 除了可以对接 Prometheus 查看数据实际也可以对接 Zabbix 查看有些人不喜欢 Zabbix 上个时代的 UI 风格觉得 Grafana 更好看实际从功能体验来看我感觉 Zabbix 自身的数据就在 Zabbix 里看图就足够了。Grafana 实际也可以做告警引擎对不同的数据源配置告警规则优点是可以联动多种数据源缺点是对事件的 Pipeline 处理支持有限国内使用 Grafana Alerting 的公司比较少。Nightingale夜莺项目Nightingale类似 Grafana 可以对接多种数据源不过侧重在告警。如果你们有多套 Prometheus、多套 ElasticSearch还有 ClickHouse、Loki 的数据需要做告警还想使用 UI 管理告警规则那夜莺是合适的。如果你们只有少量 Prometheus也能接受使用 Yaml 管理告警规则那夜莺就有点重了。夜莺提供了事件 Pipeline 的能力要着力说一下这个能力可以对告警事件做一系列处理并且可以对接自己的系统比如告警产生之后想要调用自己的系统补充上一些关键字段Enrichment或者调用自己的 AI 做个 Summary或者把符合某类条件的告警 Drop 掉或者做一下 Relabel都可以使用 Pipeline 机制。夜莺社区提供了一个采集器叫 Categraf姑且可以理解为是把各类 Exporter 整合成了一个二进制如果你不想部署这么多 Exporter想用一个进程打天下Categraf 是可以考虑的。总结我看到社区里很多人是组合方案看图使用 Grafana告警使用 NightingaleTSDB 使用 VictoriaMetrics日志库使用 ElasticSearch 或者 VictoriaLogs让每个项目只工作在自己最擅长的领域或许就是企业落地的最佳实践。