4、监控工具选型:Prometheus、Grafana、Zabbix、Nagios对比与选型

说到SCADA系统的监控,我这些年可没少折腾。从最早的Nagios,到后来大火的Zabbix,再到如今几乎成为云原生标配的Prometheus+Grafana组合,每个工具我都踩过坑,也尝过甜头。

今天咱们就聊聊这四个主流监控工具。我不会跟你念参数表,而是结合我实际项目中的血泪史,帮你理清到底该选哪个。

4.1 先说说我的选型原则

我个人习惯,选监控工具前先问自己三个问题:

  • 监控对象是什么?——是传统工控设备,还是云原生容器?
  • 数据量有多大?——每天几万条指标,还是几亿条?
  • 团队能力如何?——有没有人懂PromQL?还是只会点鼠标?

你想想看,如果现场全是PLC和RTU,你非要用Prometheus去拉数据,那不是给自己找麻烦吗?反过来,如果是个微服务架构的SCADA平台,你还抱着Nagios不放,那也够呛。

4.2 Nagios:老当益壮,但真的老了

Nagios是我最早接触的监控工具。说实话,在2000年代那会儿,它确实是王者。但放到今天,我只能说:情怀归情怀,干活归干活

优点:

  • 插件生态丰富,几乎什么都能监控
  • 配置灵活,适合定制化需求
  • 社区成熟,遇到问题容易找到答案

缺点:

  • 配置全靠文本文件,维护起来想哭
  • 性能瓶颈明显,单机撑不住大规模
  • 可视化太弱,基本要靠第三方

我曾经在一个老旧的SCADA项目里接手过Nagios。那配置,光主机定义就写了三千多行。每次加一台设备,得改四个文件,重启两次服务。嗯,那感觉,就像在石器时代写代码。

适用场景:小型环境、传统IT基础设施、团队有运维老手。

4.3 Zabbix:工控人的老朋友

Zabbix是我在SCADA项目里用得最多的工具。为什么?因为它对工控协议的支持太好了

我记得有个项目,现场全是Modbus TCP的设备。Zabbix原生就支持,直接配置个模板就能采集数据。换成Prometheus?你得自己写exporter,还得考虑怎么把Modbus数据转成HTTP接口。

我的经验:Zabbix的模板机制非常强大。我习惯把同类设备做成一个模板,比如“西门子S7-1200通用模板”,里面定义好CPU负载、内存、网络流量等指标。新设备上线,直接关联模板,十分钟搞定。

但Zabbix也有短板。它的时序数据库性能一般,当指标数量超过几万条时,查询就开始变慢。而且它的告警配置虽然灵活,但规则多了以后,管理起来很头疼。

特性 Zabbix Prometheus
数据采集方式 Agent主动/被动 Pull模式
工控协议支持 原生支持Modbus、SNMP等 需自定义exporter
告警能力 强,支持复杂逻辑 中等,依赖Alertmanager
扩展性 中等,Proxy模式可扩展 强,天然分布式

4.4 Prometheus + Grafana:云原生时代的标配

如果你问我现在新项目用什么,我大概率会推荐Prometheus+Grafana。这不是跟风,而是这套组合确实解决了传统监控的很多痛点

Prometheus的Pull模式很有意思。它不像Zabbix那样需要Agent主动上报,而是由Prometheus Server定期去拉数据。这样做的好处是:你不需要在每个设备上装Agent,只要设备暴露一个HTTP接口就行。

实战案例:我在一个基于Kubernetes的SCADA平台项目中,用Prometheus监控了200多个微服务实例。每个服务只需要暴露一个/metrics端点,Prometheus自动发现、自动采集。配合Grafana的仪表盘,实时看到每个服务的QPS、延迟、错误率。

但Prometheus也不是万能的。它不适合监控传统工控设备。你想想看,一个PLC怎么暴露HTTP接口?就算能,Modbus RTU那种串口协议,Prometheus根本没法直接采集。

避坑指南:我曾经在一个混合架构的项目里,既要用Prometheus监控云原生部分,又要用Zabbix监控现场设备。结果两个系统各自为政,数据没法打通。后来我用了Prometheus的Pushgateway,让Zabbix把工控数据推给Prometheus,才勉强统一了监控视图。但说实话,这方案不优雅,建议你一开始就规划好数据流。

4.5 Grafana:可视化之王

不管底层用哪个监控工具,我建议你上层统一用Grafana做可视化。为什么?因为它支持的数据源太多了——Prometheus、Zabbix、InfluxDB、Elasticsearch,甚至MySQL都能接。

我个人习惯,所有监控数据最终都汇聚到Grafana。一个仪表盘上,左边是Prometheus的微服务指标,右边是Zabbix的工控设备状态,中间是业务KPI。这样运维人员不用切来切去,一个界面全搞定。

小技巧:Grafana的告警功能其实被很多人忽略了。它支持基于查询结果的告警规则,还能对接钉钉、企业微信。我一般把Grafana告警作为第二道防线,第一道还是用Zabbix或Prometheus的原生告警。

4.6 选型决策矩阵

说了这么多,到底怎么选?我整理了一个决策矩阵,你照着这个思路来就行:

场景 推荐工具 理由
传统工控环境(PLC、RTU、Modbus) Zabbix 原生协议支持,模板丰富
云原生SCADA平台(K8s、微服务) Prometheus + Grafana 天然适合容器环境,扩展性强
混合架构(既有工控又有云原生) Zabbix + Prometheus + Grafana 各取所长,Grafana统一展示
小型环境(几十台设备) Nagios 或 Zabbix 轻量,部署简单
大型分布式环境(上万节点) Prometheus + Thanos 支持长期存储,全局视图

4.7 我的最终建议

如果你现在要搭建一个新的SCADA监控系统,我建议你不要纠结于选一个工具。现实中的监控架构,往往是多个工具的组合。

我个人最推荐的组合是:

  • 底层采集:Zabbix(工控设备)+ Prometheus(云原生组件)
  • 数据存储:Prometheus TSDB + 可选Thanos做长期存储
  • 可视化:Grafana(统一仪表盘)
  • 告警:Zabbix告警(工控部分)+ Alertmanager(云原生部分)

这套组合我用了三年,在多个大型SCADA项目中验证过。虽然初期搭建稍微复杂点,但后期维护起来非常省心。你想想看,一个监控系统能用三五年不用大改,这难道不是最好的选型吗?

最后说一句:工具只是手段,不是目的。别为了用某个工具而用,而是要看它能不能解决你的实际问题。我见过太多人,明明Zabbix就能搞定,非要上Prometheus,结果折腾一个月还没跑起来。何必呢?