概述

在监控系统领域,Zabbix 和 Prometheus 是两座大山。Zabbix 从传统运维时代走来,在物理机/虚拟机环境中叱咤风云近二十五年;Prometheus 则在云原生时代崛起,成为 Kubernetes 生态的事实标准。很多团队在做监控选型时都会面临一个问题:到底该选 Zabbix 还是 Prometheus?

答案不是非此即彼。很多成熟团队在实际生产中同时运行两套系统——Zabbix 负责基础设施层(网络、硬件、操作系统),Prometheus 负责应用层和云原生层。从架构、数据模型、告警、生态、适用场景等维度全面对比两者,帮你做出合理的选型决策。

参考来源:Zabbix 官方文档Prometheus 官方文档

一、架构对比

1.1 Zabbix 架构

Zabbix 采用经典的 C/S 架构,核心组件包括 Server、Database、Web Frontend 和 Agent。

┌──────────────────────────────────────────────────────────┐
│                     Zabbix 架构                           │
│                                                          │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐               │
│  │  Agent   │  │  SNMP    │  │  JMX     │  ← 被监控端    │
│  │ (主动/被动)│  │  设备    │  │  Java    │               │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘               │
│       │              │              │                      │
│       └──────────────┼──────────────┘                    │
│                      ▼                                    │
│               ┌─────────────┐                             │
│               │ Zabbix Server│  ← 采集引擎 + 告警引擎     │
│               │ (C 语言)     │                             │
│               └──────┬──────┘                             │
│                      │                                     │
│                      ▼                                     │
│               ┌─────────────┐                              │
│               │  Database   │  ← MySQL/PostgreSQL         │
│               │  (关系型)    │                             │
│               └──────┬──────┘                              │
│                      │                                     │
│                      ▼                                     │
│               ┌─────────────┐                              │
│               │ Web Frontend│  ← PHP 前端                   │
│               │ (Dashboard)  │                             │
│               └─────────────┘                              │
│                                                          │
│  ┌──────────────┐                                       │
│  │ Zabbix Proxy │  ← 分布式采集代理(可选)                │
│  │ (区域汇聚)    │                                       │
│  └──────────────┘                                       │
└──────────────────────────────────────────────────────────┘

Zabbix 架构特点

  • 中心化 Server:所有采集、存储、告警逻辑集中在 Server 进程
  • 关系型数据库:使用 MySQL/PostgreSQL 存储历史数据和配置
  • Agent 采集:在被监控主机上安装 Zabbix Agent,支持主动和被动模式
  • Proxy 分级:Zabbix Proxy 作为区域采集代理,解决大规模分布式监控
  • Web UI 一体化:自带 PHP Web 前端,配置和查看都在 UI 中完成

1.2 Prometheus 架构

Prometheus 采用拉模式(Pull-based),核心组件包括 Server、Exporters、Pushgateway 和 Alertmanager。

┌──────────────────────────────────────────────────────────┐
│                   Prometheus 架构                         │
│                                                          │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐               │
│  │ Exporter │  │ Exporter │  │Pushgatew │  ← 被监控端    │
│  │ (node)   │  │ (mysql)  │  │ (短任务)  │               │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘               │
│       │              │              │                      │
│       │ ←── Pull ───┤──────────────┤                     │
│       │              │              │                      │
│       ▼              ▼              ▼                      │
│               ┌──────────────┐                          │
│               │ Prometheus   │  ← 采集引擎               │
│               │  Server      │     (TSDB)               │
│               │  (Go)        │                          │
│               └──────┬───────┘                          │
│                      │                                   │
│           ┌──────────┼──────────┐                       │
│           ▼          ▼          ▼                       │
│     ┌──────────┐ ┌────────┐ ┌──────────┐              │
│     │ Grafana  │ │Rules   │ │Alertmanager│              │
│     │ (可视化)  │ │(告警规则)│ │(告警分发)  │              │
│     └──────────┘ └────────┘ └──────────┘              │
└──────────────────────────────────────────────────────────┘

Prometheus 架构特点

  • 去中心化设计:Server 独立采集,不依赖外部数据库
  • 时序数据库(TSDB):内置 TSDB,列式存储,不依赖外部数据库
  • 拉模式采集:Server 主动拉取 Exporter 数据,不支持 Agent 推送(Pushgateway 例外)
  • 组件解耦:采集、存储、可视化、告警各组件独立
  • 无 Web UI:自带 UI 功能简单,主要依赖 Grafana

1.3 架构核心差异

维度ZabbixPrometheus
采集模式推模式(Agent → Server)拉模式(Server → Exporter)
存储外部关系型数据库(MySQL/PG)内置 TSDB
语言C(Server)/ Go(Agent 2.0)Go
Web UI自带完整 PHP Web 前端简易 UI,主要依赖 Grafana
配置方式Web UI + 数据库YAML 配置文件 + CI/CD
扩展方式Zabbix Proxy 区域代理联邦 / 远程存储
告警组件内置告警引擎独立 Alertmanager
Agent 类型Zabbix Agent / Agent 2Node Exporter 等专用 Exporter

二、数据模型对比

2.1 Zabbix 数据模型

Zabbix 使用关系型数据模型,核心概念:

  • Host(主机):被监控的设备或虚拟主机
  • Item(监控项):主机上的单个指标,如 CPU 使用率、磁盘空间
  • Trigger(触发器):基于 Item 的表达式,满足条件时触发告警
  • Template(模板):一组 Item + Trigger + Graph 的集合,可批量应用到 Host
  • Application(应用集):对 Item 的逻辑分组
Zabbix 数据模型:

Template (模板)
  ├── Application: CPU
  │   ├── Item: CPU idle time
  │   ├── Item: CPU user time
  │   └── Item: CPU system time
  ├── Trigger: CPU usage > 80% for 5m
  └── Graph: CPU Overview

Host (主机)
  ← 继承 Template
  ├── Item 实例化
  └── Trigger 实例化

Zabbix 数据模型优势

  • 直观的层级关系,适合传统基础设施
  • Template 支持批量管理,运维友好
  • 数据库存储,便于复杂查询和报表

Zabbix 数据模型劣势

  • 关系型数据库在高并发写入下性能瓶颈明显
  • 大规模部署时数据库 I/O 成为瓶颈
  • 每条 Item 都是独立配置,自动化能力有限

2.2 Prometheus 数据模型

Prometheus 使用多维标签数据模型,核心概念:

  • Metric(指标):由名称 + 标签集合唯一标识的时间序列
  • Label(标签):指标的维度,如 instancejobenv
  • Time Series(时间序列):一组 (timestamp, value) 序列
  • Job(作业):一组同类采集目标
Prometheus 数据模型:

指标名: node_cpu_seconds_total
标签:
  instance = "web-01:9100"
  job = "node"
  cpu = "0"
  mode = "idle"

时间序列: [(t1, v1), (t2, v2), (t3, v3), ...]

查询: avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m]))
→ 返回每个实例的 CPU 空闲率

Prometheus 数据模型优势

  • 多维标签天然适合微服务和容器环境
  • PromQL 强大的聚合和计算能力
  • TSDB 列式存储,写入和查询效率高
  • 声明式配置,适合 GitOps 和自动化

Prometheus 数据模型劣势

  • 不适合存储文本/日志类数据
  • 本地存储有保留时间限制(默认 15 天)
  • 学习曲线较陡,PromQL 需要时间掌握

2.3 数据模型适用场景对比

场景ZabbixPrometheus
服务器 CPU/内存/磁盘✓ 原生支持✓ node-exporter
网络设备(SNMP)✓ 原生支持✓ snmp-exporter
硬件监控(IPMI)✓ 原生支持✓ ipmi-exporter
数据库监控✓ Zabbix Agent✓ mysqld-exporter
Kubernetes 监控△ 通过外部脚本✓ 原生支持
微服务指标△ 自定义脚本✓ 标准格式
日志分析✓ 支持(不擅长)✗ 不支持(用 Loki)
文本/事件监控✓ 支持✗ 不支持
网络拓扑图✓ 原生支持✗ 不支持

三、告警机制对比

3.1 Zabbix 告警机制

Zabbix 的告警核心是 Trigger(触发器)——基于 Item 值的布尔表达式:

Trigger 表达式语法:
{server:system.cpu.load[all,avg1].last(0)} > 5
└─┬─┘ └──────────┬──────────┘ └─┬─┘ └┬┘
  主机       Item Key          函数  阈值
# Zabbix Trigger 示例(Web UI 中配置)
# CPU 使用率 > 80% 持续 5 分钟
{host:system.cpu.util[,idle].max(5m)} < 20

# 磁盘剩余空间 < 10%
{host:vfs.fs.size[/,pfree].last(0)} < 10

# 端口不可达
{host:net.tcp.service[ssh,,22].last(0)} = 0

Zabbix 告警特点

  • Trigger 级别:Not classified / Information / Warning / Average / High / Disaster
  • Action 机制:Trigger 触发后执行 Action(发送通知、执行脚本)
  • Escalation:告警升级机制,按时间阶梯升级通知
  • 媒介类型:Email / SMS / Webhook / 自定义脚本
  • 告警确认:支持人工确认告警,标记为已知问题

3.2 Prometheus 告警机制

Prometheus 的告警分两层:Prometheus 负责规则评估,Alertmanager 负责告警路由和分发。

# Prometheus Alerting Rule
- alert: HighCPU
  expr: 100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
  for: 5m
  labels:
    severity: warning
  annotations:
    summary: "CPU 使用率过高: {{ $labels.instance }}"

Prometheus 告警特点

  • PromQL 驱动:告警规则是 PromQL 表达式,支持复杂聚合
  • for 持续时间:避免瞬时尖峰
  • Alertmanager 独立:分组、路由、抑制、去重
  • 标签驱动路由:基于标签匹配决定通知渠道
  • 无升级机制:原生不支持 Zabbix 式的多级升级,需通过路由配置模拟

3.3 告警机制对比

维度ZabbixPrometheus
告警定义Trigger 表达式PromQL Alerting Rule
告警级别6 级自定义标签(通常 3-4 级)
升级机制原生支持阶梯升级需通过 Alertmanager 路由模拟
告警确认支持(标记已知)不支持(需集成工单系统)
分组聚合不支持支持(group_by)
告警抑制不支持支持(inhibit_rules)
告警去重支持(单 Server)支持(Alertmanager HA Gossip)
通知渠道Email/SMS/Webhook/脚本Email/Webhook(需对接钉钉/企微等)
维护模式支持(Maintenance Period)需通过 silences 实现
告警恢复通知支持支持(send_resolved)

Zabbix 在告警管理方面更成熟:原生支持升级、确认、维护模式。Prometheus + Alertmanager 的优势在于标签驱动路由和抑制规则,但在告警生命周期管理上不如 Zabbix 完善。

四、生态对比

4.1 Zabbix 生态

Zabbix 的生态相对封闭,主要围绕官方组件:

组件说明
Zabbix Server核心采集和告警引擎
Zabbix Agent / Agent 2被监控端代理
Zabbix Proxy分布式采集代理
Zabbix Web FrontendPHP Web 界面
Zabbix APIRESTful API(JSON-RPC)
Template Library官方和社区模板库

Zabbix 生态特点

  • 官方维护,文档完善,上手简单
  • Template 市场提供大量预置监控模板
  • Zabbix Agent 2.0 支持 Go 插件,扩展性提升
  • 但与云原生生态(Kubernetes、Service Mesh)集成有限

4.2 Prometheus 生态

Prometheus 是 CNCF 毕业项目,拥有庞大的开源生态:

类别项目
可视化Grafana、Perses
告警Alertmanager、Karma
长期存储Thanos、Mimir、VictoriaMetrics、Cortex
日志Loki
链路追踪Jaeger、Tempo
ExporterNode / MySQL / Redis / Kafka / Blackbox / SNMP 等 100+
K8s 集成kube-state-metrics、kubelet、Prometheus Operator
自动发现file_sd / kubernetes_sd / consul_sd / dns_sd 等
远程存储InfluxDB、TimescaleDB、Elasticsearch

Prometheus 生态特点

  • 开放生态,组件可替换
  • 与 Kubernetes 深度集成
  • Grafana 原生支持 PromQL
  • 社区活跃,新 Exporter 和工具不断涌现
  • 但组件分散,需要自行组装完整方案

4.3 生态成熟度对比

维度ZabbixPrometheus
官方文档完善,中文支持好完善,英文为主
模板市场官方 + 社区模板社区 Exporter + Grafana Dashboard
Kubernetes 集成弱(需外部脚本)极强(原生支持)
微服务监控
传统网络监控强(SNMP 原生)中(snmp-exporter)
硬件监控强(IPMI 原生)中(ipmi-exporter)
商业支持Zabbix 公司Grafana Labs / Timescale 等
社区活跃度极高

五、性能与扩展性对比

5.1 性能基准

维度ZabbixPrometheus
单机指标容量~10 万 Items/Server~200 万时间序列/实例
写入性能受数据库限制(MySQL ~5 万/s)~100 万采样/s
查询性能数据库查询,大范围查询慢TSDB 列式存储,中等
内存消耗低(C 语言)中-高(Go + TSDB 内存索引)
存储压缩一般(数据库行存储)好(TSDB 列式压缩 + Gorilla)
水平扩展Zabbix Proxy(有限)联邦 / 远程存储(原生)

5.2 扩展方式对比

Zabbix 扩展

                ┌──────────────────┐
                │  Zabbix Server   │
                └────────┬─────────┘
           ┌─────────────┼─────────────┐
           ▼             ▼             ▼
    ┌──────────┐  ┌──────────┐  ┌──────────┐
    │ Proxy-1  │  │ Proxy-2  │  │ Proxy-3  │
    │ (区域 A) │  │ (区域 B) │  │ (区域 C) │
    └────┬─────┘  └────┬─────┘  └────┬─────┘
         │              │              │
    ┌────┴────┐   ┌────┴────┐   ┌────┴────┐
    │ Agents  │   │ Agents  │   │ Agents  │
    └─────────┘   └─────────┘   └─────────┘

Zabbix Proxy 是唯一扩展方式,它只做区域汇聚采集,数据最终都汇入 Server 的数据库。Server 和数据库仍然是单点。

Prometheus 扩展

方案 A: 联邦集群
  各区域 Prometheus → 全局 Prometheus → Grafana

方案 B: 远程存储(Thanos/Mimir/VM)
  各 Prometheus → remote_write → 远程存储集群 → 全局查询

方案 C: 分片采集
  Prometheus-1 (shard 0) ──→ 各自存储 + 上传
  Prometheus-2 (shard 1) ──→ Thanos → 全局查询

Prometheus 的扩展方式更多样,可以真正水平扩展采集和存储。

六、适用场景对比

6.1 Zabbix 更适合的场景

场景原因
传统数据中心(物理机/虚拟机)Host/Template 模型天然适配
网络设备监控(SNMP)原生 SNMP 支持,自动发现网络拓扑
硬件监控(IPMI/智能 PDU)原生 IPMI 支持
混合 IT 环境支持多种采集方式(Agent/SNMP/JMX/HTTP)
非 K8s 微服务环境Agent 采集简单直接
需要 Web UI 管理自带完整 Web 前端
运维团队不熟悉 K8sZabbix 上手门槛低

6.2 Prometheus 更适合的场景

场景原因
Kubernetes / 容器环境原生 K8s 服务发现和采集
微服务架构多维标签模型适配微服务
云原生应用应用直接暴露 /metrics
动态弹性环境服务发现自动感知实例变化
DevOps / GitOpsYAML 配置 + CI/CD
需要强大查询能力PromQL 远超 Zabbix Trigger 表达式
需要可扩展的长期存储Thanos/Mimir/VM 生态丰富

6.3 混合监控:两全其美

很多成熟团队的选择是同时使用两套系统,各司其职:

┌─────────────────────────────────────────────────────┐
│                   混合监控架构                        │
│                                                     │
│  ┌─── 基础设施层 ───────────────────────┐           │
│  │  Zabbix                               │           │
│  │  ├── 网络设备 (SNMP)                  │           │
│  │  ├── 物理服务器 (IPMI + Agent)        │           │
│  │  ├── 存储阵列 / SAN                   │           │
│  │  └── 机房环境 (温度/湿度/UPS)         │           │
│  └──────────────────────────────────────┘           │
│                                                     │
│  ┌─── 应用 & 云原生层 ──────────────────┐           │
│  │  Prometheus                           │           │
│  │  ├── Kubernetes 集群                  │           │
│  │  ├── 微服务应用指标                    │           │
│  │  ├── 中间件 (MySQL/Redis/Kafka)       │           │
│  │  └── API 网关 / Ingress              │           │
│  └──────────────────────────────────────┘           │
│                                                     │
│  ┌─── 统一可视化 ────────────────────────┐           │
│  │  Grafana                              │           │
│  │  ├── Zabbix 数据源                    │           │
│  │  └── Prometheus 数据源                │           │
│  └──────────────────────────────────────┘           │
└─────────────────────────────────────────────────────┘

Grafana 统一可视化:Grafana 同时支持 Zabbix 和 Prometheus 数据源,可以在一个仪表盘中混合展示两套系统的数据。

七、迁移方案

7.1 从 Zabbix 迁移到 Prometheus

迁移不是简单的"替换",需要重新设计监控架构:

步骤一:梳理监控项

# 导出 Zabbix 所有监控项
mysql -u zabbix -p zabbix -e "
  SELECT h.name, i.key_, i.description, t.expression
  FROM items i
  JOIN hosts h ON i.hostid = h.hostid
  LEFT JOIN triggers t ON t.itemid = i.itemid
  WHERE i.status = 0
  ORDER BY h.name, i.key_
" > zabbix_items.csv

步骤二:映射到 Prometheus Exporter

Zabbix Item KeyPrometheus ExporterMetric Name
system.cpu.loadnode-exporternode_load1
system.cpu.utilnode-exporterrate(node_cpu_seconds_total)
vfs.fs.sizenode-exporternode_filesystem_size_bytes
vm.memory.sizenode-exporternode_memory_MemAvailable_bytes
net.if.innode-exporterrate(node_network_receive_bytes_total)
mysql.statusmysqld-exportermysql_global_status_*

步骤三:重写告警规则

# Zabbix Trigger: {host:system.cpu.load[all,avg1].last(0)} > 5
# Prometheus 等价规则:
- alert: HighLoadAverage
  expr: node_load1 > 5
  for: 5m
  labels:
    severity: warning
  annotations:
    summary: "系统负载过高: {{ $labels.instance }}"
    description: "1 分钟负载 {{ $value }} 超过 5"

步骤四:双运行过渡期

迁移期间双运行两套系统,对比数据一致性,逐步将告警切换到 Prometheus。

7.2 从 Prometheus 迁移到 Zabbix

这种迁移较少见,但在传统企业 IT 环境中也有需求:

  1. 使用 Zabbix Agent 2 替代 node-exporter
  2. 使用 Zabbix HTTP Agent 类型 Item 替代 Prometheus Exporter
  3. 将 PromQL 告警规则转换为 Zabbix Trigger
  4. 利用 Zabbix Template 批量管理监控项

八、功能覆盖矩阵

功能ZabbixPrometheus说明
主机自动发现Zabbix: network discovery / Prometheus: SD
网络拓扑图Zabbix 原生支持网络拓扑
仪表盘✗(用 Grafana)Zabbix 自带 Dashboard
告警分组Prometheus Alertmanager 优势
告警抑制Alertmanager inhibit_rules
告警升级Zabbix 原生支持
告警确认Zabbix 原生支持
维护模式Zabbix 原生 / Prometheus 用 silences
SLA 报表✗(需第三方)Zabbix 原生 SLA 报告
自动修复Zabbix Action 可执行远程脚本
短任务监控△(Pushgateway)Zabbix Agent 支持
日志监控Zabbix 支持(不专业)/ Prometheus 用 Loki
分布式追踪两者都不支持(用 Jaeger)
合成监控△(Web 场景)✓(Blackbox)功能有限
多租户两者都不原生支持
API两者都有 RESTful API

九、TCO 对比

9.1 总拥有成本

成本项ZabbixPrometheus
软件许可免费(开源)/ 企业版付费免费(开源)
服务器成本中(Server + DB + Web)中-高(Prom + Grafana + AM + 远程存储)
数据库成本MySQL/PG 需要独立高性能实例无(内置 TSDB)
存储成本中(数据库存储)低-中(TSDB 压缩好 / 对象存储低成本)
运维人力低-中(Web UI 管理)中-高(需掌握 YAML/PromQL/Grafana)
培训成本低(UI 友好)中-高(PromQL 学习曲线)
扩展成本高(数据库扩展困难)低(Thanos/VM 水平扩展)

9.2 规模与成本趋势

监控规模增长时的成本趋势:

小规模(< 100 台主机)
  Zabbix 成本: 低 ✓
  Prometheus 成本: 中

中规模(100-1000 台主机)
  Zabbix 成本: 中
  Prometheus 成本: 中

大规模(> 1000 台主机 / 云原生)
  Zabbix 成本: 高(数据库瓶颈)
  Prometheus 成本: 中 ✓(水平扩展)

十、选型决策框架

你的基础设施是什么类型?
├── 传统 IT(物理机/虚拟机为主)
│   └── 有 Kubernetes / 容器环境吗?
│       ├── 有 → 混合方案(Zabbix 基础设施 + Prometheus 容器)
│       └── 没有 → Zabbix(上手快,功能全面)
├── 云原生(Kubernetes 为主)
│   └── 有传统网络/硬件监控需求吗?
│       ├── 有 → 混合方案(Prometheus 应用 + Zabbix 网络/硬件)
│       └── 没有 → Prometheus(云原生标配)
└── 混合环境
    └── 团队技术栈偏向?
        ├── 运维背景为主 → Zabbix 为主 + Prometheus 补充
        └── 研发/DevOps 背景为主 → Prometheus 为主 + Zabbix 补充

选型决策表

决策因素Zabbix 优势Prometheus 优势
团队技能运维工程师SRE / DevOps 工程师
基础设施物理机/虚拟机容器/K8s
告警管理需要升级/确认/SLA需要分组/抑制
扩展需求规模稳定需要水平扩展
配置管理偏好 Web UI偏好 YAML + GitOps
查询能力简单查询即可需要复杂 PromQL
生态集成传统 IT 生态云原生生态
长期存储不需要需要长期历史数据

总结

Zabbix 和 Prometheus 不是对立关系,而是互补关系:

  • Zabbix 的核心优势在于传统基础设施监控的完整性和易用性——Web UI 管理、模板体系、告警升级、网络设备 SNMP、硬件 IPMI、SLA 报表,这些在传统 IT 环境中非常实用
  • Prometheus 的核心优势在于云原生场景的适配能力——Kubernetes 服务发现、多维标签模型、PromQL 查询、水平扩展、丰富的 Exporter 生态,这些在容器化微服务环境中不可替代
  • 混合方案是成熟选择:Zabbix 负责"看不见的基础设施"(网络/硬件/机房),Prometheus 负责"看得见的应用"(微服务/API/K8s),通过 Grafana 统一可视化,各取所长

选型时不要被"哪个更好"的二元思维束缚,而是回到你的实际环境:你的基础设施类型、团队技术栈、告警需求、扩展需求——这些因素共同决定了推荐方案。很多团队在深度使用后发现,混合方案才是真正的好的实践。

参考资料与致谢

本文在撰写过程中参考了以下资料,感谢原作者的贡献:

  1. Zabbix 官方文档 — Zabbix 团队,参考了Zabbix 官方文档相关内容
  2. Prometheus 官方文档 — Prometheus 官方,参考了Prometheus 官方文档相关内容