Zabbix 与 Prometheus 从入门到精通:2026 年运维工程师的监控选型与落地全攻略
你有多久没有在凌晨三点被告警电话吵醒了?监控系统做得好不好,直接决定运维工程师是“主动救火”还是“被动挨打”。几乎每个做运维的人都会遇到同一个问题:公司要上监控,网上搜一圈,发现大家都在说 Zabbix 和 Prometheus,但到底选哪个?它们有什么区别?能不能都学?
先说结论:这两套系统不是替代关系,而是互补关系。Zabbix 擅长传统 IT 基础设施监控,开箱即用,模板丰富;Prometheus 则是云原生时代的监控标准,围绕指标采集、服务发现和 PromQL 查询构建了完整生态。一个成熟的运维工程师,不应该只会装其中一个,而是要知道在什么场景下用哪个、如何组合落地。
这篇文章不玩虚的,从零开始讲清楚两套系统的安装部署、核心配置、告警接入和常见排错,目标是让你看完之后能根据自己的业务场景,从零搭建一套能真正用起来的监控体系。
1. 监控系统选型:Zabbix 与 Prometheus 到底怎么选
很多人纠结 Zabbix 和 Prometheus,是因为没有先搞清楚自己的监控对象是什么。实际上,这两套系统的设计理念从一开始就走在了不同的方向上。
Zabbix 诞生于 2001 年,那个年代的主流架构是物理服务器、虚拟机、网络设备和传统数据库。它的核心设计思路是采集数据到中心 Server,再由 Server 统一存储、计算、触发告警。所以 Zabbix 对网络设备、服务器硬件、操作系统层面的监控支持非常成熟,比如通过 SNMP 监控交换机,通过 Agent 监控 CPU、内存、磁盘、进程等基础指标,这些都是它的强项。
Prometheus 则诞生于 2012 年,正是微服务和容器化开始兴起的时候。它的核心设计思路是主动拉取(Pull)每个监控目标暴露的 HTTP 指标接口,配合服务发现机制动态发现监控对象。这种设计天然适合 Kubernetes 这类频繁创建销毁实例的动态环境。同时,Prometheus 提供了强大的 PromQL 查询语言,能对时序数据做多维度聚合计算,这是 Zabbix 很难做到的。
所以选型思路应该这样:
如果你的监控对象主要是物理机、虚拟机、网络设备、传统数据库,团队没有太多研发资源,希望部署简单、开箱即用,那就选 Zabbix。
如果你的业务已经容器化,跑在 Kubernetes 上,或者需要监控应用层自定义业务指标,那就选 Prometheus。
现实情况是,一个稍有规模的企业往往同时具备这两种场景。我的建议是:不要试图用一套系统覆盖所有场景。Zabbix 管传统基础设施,Prometheus 管云原生和业务指标,中间用 Grafana 做统一可视化,用 Alertmanager 或第三方平台做统一告警收敛,这才是企业级监控的正确姿势。
2. Zabbix 核心概念与原理解读
在动手安装 Zabbix 之前,先把它的几个核心概念搞清楚,否则你会在配置告警时被各种术语搞晕。
2.1 Zabbix 的组件架构
Zabbix 是典型的 Client-Server 架构,整个系统由以下组件构成:
- Zabbix Server:核心服务端,负责数据接收、存储、计算、触发告警和发送通知。
- Zabbix Database:存储所有监控数据,支持 MySQL、PostgreSQL、Oracle。
- Zabbix Web:基于 PHP 的 Web 管理界面,用于配置主机、监控项、触发器和查看图表。
- Zabbix Agent:部署在被监控主机上的采集程序,主动将指标推送给 Server 或等 Server 来取。
- Zabbix Proxy:可选组件,用于分布式监控场景,由 Proxy 采集数据后上报给 Server,适合跨机房、大规模环境。
2.2 关键数据模型
Zabbix 的数据模型是一条清晰的链路:
主机(Host)是监控对象,可以是一台服务器、一个网络设备,也可以是一个业务进程。
监控项(Item)是具体要采集的指标,比如 CPU 使用率、磁盘剩余空间。每个监控项都有类型,常见的有 Zabbix Agent、SNMP、JMX、IPMI 等。
触发器(Trigger)是告警规则,它的本质是一个表达式,对监控项采集到的数据做逻辑判断。比如CPU 使用率超过 90% 持续 5 分钟。
动作(Action)是触发器被触发后的响应行为,包括发送邮件、调用脚本、对接钉钉/企业微信 webhook 等。
模板(Template)是预定义的一组监控项和触发器集合。这是 Zabbix 最实用的功能,一台新主机加入监控时,只需关联对应模板,CPU、内存、磁盘等基础监控会自动生效。
理解这个链路之后,你在 Zabbix 里做任何配置都会很清晰:先加主机,再给主机关联模板或手动添加监控项,然后写触发器表达式定义告警条件,最后配置动作把告警发出去。
3. Zabbix 安装部署与基础配置实战
接下来进入实操阶段。我用 CentOS Stream 9 作为演示环境,这套流程在 RHEL 系、Rocky Linux、AlmaLinux 上基本一致。Zabbix 版本以当前官网 LTS 版本为准,本文演示 7.0 LTS 的部署思路。
3.1 安装 Zabbix Server 与数据库
Zabbix Server 需要数据库做存储,我们选择 MySQL 8.0。整个安装过程可以分为三步:安装数据库、安装 Zabbix Server、配置 Web 界面。
第一步,安装 MySQL 8.0 并初始化:
# 安装 MySQL 8.0 dnf install -y mysql-server systemctl enable --now mysqld # 初始化 Zabbix 数据库 mysql -uroot -p进入 MySQL 后执行:
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'YourStrongPassword'; GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost'; SET GLOBAL log_bin_trust_function_creators = 1; QUIT;注意,第二步导入 Zabbix 官方初始 schema 和数据的命令要在服务器上执行,不要跳过:
# 导入 Zabbix 7.0 初始数据(路径以实际安装版本为准) zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -pYourStrongPassword zabbix # 导入完成后关闭 log_bin_trust_function_creators mysql -uroot -p -e "SET GLOBAL log_bin_trust_function_creators = 0;"第二步,安装 Zabbix Server、Web 前端和 Agent:
# 添加 Zabbix 官方软件源(版本号请以官网当前 LTS 为准) rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rhel/9/x86_64/zabbix-release-latest-7.0.el9.noarch.rpm dnf clean all # 安装 Server、Web、Agent dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent2第三步,修改 Zabbix Server 和 Web 的配置文件。先配置 Server 连接数据库:
# 文件路径:/etc/zabbix/zabbix_server.conf DBPassword=YourStrongPassword再配置 Nginx 和 PHP-FPM(Zabbix Web 依赖这两个组件):
# 文件路径:/etc/nginx/conf.d/zabbix.conf # 修改 listen 端口和 server_name listen 8080; server_name zabbix.example.com;启动服务并设置开机自启:
systemctl restart zabbix-server zabbix-agent2 nginx php-fpm systemctl enable zabbix-server zabbix-agent2 nginx php-fpm到这里,Zabbix Server 已经跑起来了。访问http://<服务器IP>:8080,你会看到 Zabbix Web 安装向导,按提示检查 PHP 组件即可完成安装。默认登录账号是 Admin,默认密码是 zabbix。进入系统后的第一件事,是修改默认密码,并且把 Web 界面语言调整为中文。
3.2 在 Zabbix 中添加第一台主机并配置告警
服务端部署完成后,我们在一台 Linux 服务器上安装 Zabbix Agent2,并把它接入监控。
# 在被监控主机上安装 zabbix-agent2 rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rhel/9/x86_64/zabbix-release-latest-7.0.el9.noarch.rpm dnf install -y zabbix-agent2 # 文件路径:/etc/zabbix/zabbix_agent2.conf Server=ZabbixServerIP ServerActive=ZabbixServerIP Hostname=web-server-01 systemctl enable --now zabbix-agent2等待 Agent 启动后,回到 Zabbix Web 界面:
- 点击左侧菜单“数据采集” -> “主机”。
- 点击右上角“创建主机”。
- 主机名称填
web-server-01,模板选择Linux by Zabbix agent active。 - 接口填写被监控主机的 IP 地址。
- 点击“添加”保存。
过几分钟后,回到主机列表,可以看到这台主机的可用性状态变成了绿色“已启用”,说明 Agent 和 Server 通信正常,基础监控项已经开始采集数据了。
集群场景下,告警通知最好对接钉钉机器人。我们可以利用 Zabbix 的媒介类型功能,通过 Webhook 把告警推向钉钉群。在“管理” -> “媒介类型”中创建一个自定义脚本型媒介,脚本内容调用 curl 向钉钉 webhook 发送 JSON 数据即可。告警动作则是在“配置” -> “动作”里创建,触发条件选择“触发器严重性 >= 警告”,操作内容选择刚才创建的媒介,并指定接收用户和自定义告警消息。
4. Prometheus 核心概念与架构解析
说完 Zabbix,再来看 Prometheus。如果你已经掌握 Zabbix,再学 Prometheus 时最需要做的一件事就是“清空大脑”,因为两者的数据模型和设计理念差异非常大。
4.1 指标采集架构
Prometheus 的核心是 Pull 模型。每个被监控的服务(或 exporter)暴露一个 HTTP 接口,Prometheus Server 定期从这个接口拉取监控数据。相比 Push 模型,Pull 模型的好处是:监控谁、什么时候拉,全部由服务端决定,新增监控目标不需要被监控方做任何配置改动。
这套架构的组件包括:
- Prometheus Server:负责抓取、存储时序数据,并对外提供 PromQL 查询接口。
- Exporter:负责将各类指标转为 Prometheus 格式的 HTTP 接口,比如 node_exporter 采集服务器指标,mysqld_exporter 采集 MySQL 指标。
- Alertmanager:负责处理告警,包括去重、分组、静默和通过多种渠道发送。
- Pushgateway:用于支持短生命周期任务的指标推送,一般用得不多,但在批处理场景中很有用。
- Service Discovery:自动发现需要监控的目标,支持 Kubernetes、Consul、DNS、文件等多种方式。
4.2 Prometheus 数据模型和 PromQL
Prometheus 的数据模型本质是带标签的时序数据。每个指标由指标名和一组键值对标签唯一标识,例如:
http_requests_total{method="GET", endpoint="/api/v1/users", status="200"}在这一行指标中,http_requests_total是指标名,花括号里的三个键值对是标签。标签是 Prometheus 能够做多维聚合的基础。
PromQL 是 Prometheus 的查询语言,初学者容易觉得它复杂,其实只要掌握几个核心函数就可以解决大部分问题:
rate():计算一段时间内计数器指标的变化率,是 QPS 类指标的标配。sum()/avg()/min()/max():聚合运算。by/without:指定或排除分组维度。
比如查询 CPU 使用率,配合 node_exporter 的指标:
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)查询某台机器 5 分钟内的平均负载:
node_load1{instance="192.168.1.10:9100"}这些查询语句后面会直接用到 Grafana 面板的指标配置里。
5. Prometheus 环境部署与配置详解
Prometheus 本身是一个 Go 语言编译的二进制文件,部署非常简单,不存在 Zabbix 那种复杂的 Web 依赖和数据库环境。这里我演示一套在生产环境中可以长期使用的部署方式。
5.1 安装 Prometheus Server
# 下载并解压 Prometheus(版本号以官网最新稳定版为准) wget https://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gz tar xvf prometheus-2.53.0.linux-amd64.tar.gz mv prometheus-2.53.0.linux-amd64 /usr/local/prometheus # 创建数据目录和系统用户 mkdir -p /data/prometheus useradd --no-create-home --shell /usr/sbin/nologin prometheus chown -R prometheus:prometheus /data/prometheus /usr/local/prometheus修改 Prometheus 主配置文件:
# 文件路径:/usr/local/prometheus/prometheus.yml global: scrape_interval: 15s evaluation_interval: 15s alerting: alertmanagers: - static_configs: - targets: ['localhost:9093'] rule_files: - "/usr/local/prometheus/rules/*.yml" scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'node_exporter' static_configs: - targets: - '192.168.1.10:9100' - '192.168.1.11:9100'将 Prometheus 注册为 systemd 服务:
# 文件路径:/etc/systemd/system/prometheus.service [Unit] Description=Prometheus Server After=network.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus Restart=always [Install] WantedBy=multi-user.target启动并验证:
systemctl daemon-reload systemctl enable --now prometheus systemctl status prometheus # 验证 Web UI curl http://localhost:9090/-/healthy5.2 安装 node_exporter 采集主机指标
每台需要监控的 Linux 服务器上安装一个 node_exporter:
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz tar xvf node_exporter-1.8.2.linux-amd64.tar.gz mv node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/ # systemd 管理 cat > /etc/systemd/system/node_exporter.service <<EOF [Unit] Description=Node Exporter After=network.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/usr/local/bin/node_exporter --web.listen-address=:9100 --collector.systemd Restart=always [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable --now node_exporter验证 exporter 是否正常:
curl http://localhost:9100/metrics如果返回大量以node_开头的指标,说明采集成功。此时回到 Prometheus Web UI 的 Status -> Targets 页面,可以看到node_exporter这个 job 下的两个采集目标都是 UP 状态。
5.3 配置 Prometheus 告警规则与 Alertmanager
在 Zabbix 中,告警规则和通知是绑定在一起的。Prometheus 则把这两件事拆开了:规则文件负责判断是否触发告警,Alertmanager 负责将触发的告警发送出去。
先创建一条磁盘使用率的告警规则:
# 文件路径:/usr/local/prometheus/rules/disk_alert.yml groups: - name: disk_alert rules: - alert: DiskUsageHigh expr: (1 - (node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"})) * 100 > 85 for: 5m labels: severity: warning annotations: summary: "{{ $labels.instance }} 磁盘使用率过高" description: "{{ $labels.instance }} 挂载点 {{ $labels.mountpoint }} 当前使用率超过 85%"这条规则的含义是:排除临时文件系统后,磁盘使用率超过 85% 持续 5 分钟,就触发 DiskUsageHigh 告警。
再安装 Alertmanager:
wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz tar xvf alertmanager-0.27.0.linux-amd64.tar.gz mv alertmanager-0.27.0.linux-amd64 /usr/local/alertmanagerAlertmanager 默认配置已经可以启动,但我们需要配置一个可以真实收到消息的接收器,比如对接钉钉 Webhook:
# 文件路径:/usr/local/alertmanager/alertmanager.yml global: resolve_timeout: 5m route: group_by: ['alertname'] group_wait: 10s group_interval: 2m repeat_interval: 4h receiver: 'dingtalk' receivers: - name: 'dingtalk' webhook_configs: - url: 'https://oapi.dingtalk.com/robot/send?access_token=你的钉钉机器人Token' send_resolved: true重启 Alertmanager 和 Prometheus 后,你可以手动把磁盘写入大量文件触发告警,观察整个告警链路是否打通。
5.4 Kubernetes 场景:Prometheus 监控集群的核心思路
Kubernetes 是 Prometheus 的主场。如果你运行着 K8s 集群,Prometheus 可以通过 Kubernetes 服务发现自动找到所有 Node、Pod、Service 并采集指标,完全不需要在集群内逐个部署 exporter。
在 K8s 中部署 Prometheus,主流方案是使用 Prometheus Operator(或 kube-prometheus-stack)。这个方案把 Prometheus、Alertmanager、Grafana 和一系列 exporter(node_exporter、kube-state-metrics 等)打包成一个 Helm Chart,还提供了自定义 CRD 来声明告警规则和采集配置。
核心采集目标是:
- kubelet 内置的 cAdvisor 端口 10250,用于采集 Pod 的 CPU、内存、网络指标。
- kube-state-metrics,用于获取 Deployment、StatefulSet、Pod 等资源对象的状态。
- node_exporter,用于采集节点层指标。
在 Prometheus 配置中,通过 Kubernetes 服务发现代替静态 targets:
scrape_configs: - job_name: 'kubernetes-nodes' kubernetes_sd_configs: - role: node relabel_configs: - source_labels: [__address__] regex: '(.*):10250' target_label: '__address__' replacement: '${1}:10250'这套配置的含义是让 Prometheus 自动发现集群内的所有 Node,并从 10250 端口抓取 kubelet 指标。具体落地时,使用 kube-prometheus-stack 会简单得多,不需要手写这些 relabel 规则。
6. Grafana 统一可视化:让两套监控数据同屏展示
Zabbix 自带 Web 界面和图表,但颜值和灵活性都不如 Grafana。Prometheus 虽然自带简单的图表页面,但功能薄弱。生产环境中的普遍做法是:用 Grafana 统一展示两套监控系统的数据。
Grafana 安装很简单,一条命令的事:
dnf install -y https://dl.grafana.com/oss/release/grafana-11.2.0-1.x86_64.rpm systemctl enable --now grafana-server访问http://<服务器IP>:3000,默认账号 admin/admin。进入系统后:
- 添加 Prometheus 数据源,URL 填
http://<PrometheusIP>:9090,类型选 Prometheus。 - 添加 Zabbix 数据源,需要先安装 Grafana 的 Zabbix 插件(在 grafana.com 下载 alexanderzobnin-zabbix-app,放到插件目录后重启 Grafana),然后在数据源里配置 Zabbix API 地址和账号。
- 导入现成的 Dashboard。Prometheus 官方提供 Node Exporter Full 模板(ID 1860),Zabbix 社区也有大量模板可供使用。
在 Grafana 写一个 CPU 使用率面板的查询,验证 Prometheus 数据源连接:
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)如果数据源连接正常,面板上会立即出现 CPU 使用率曲线。
7. 常见问题与排查思路
运维排查是硬功夫。我整理了 Zabbix 和 Prometheus 最常见的几类问题,按现象、原因、排查方式和解决方案给出,建议收藏。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| Zabbix Server 启动失败 | 数据库连接失败或初始化数据未导入 | 查看/var/log/zabbix/zabbix_server.log,确认 DB 密码和 schema 是否导入 | 修正 DBPassword,重新执行 server.sql.gz 导入 |
| 主机显示红色“不可用” | 防火墙拦截 10050 端口或 Agent 配置错误 | telnet <AgentIP> 10050测试连通性,ps 查看 Agent 进程 | 放行端口,核对Zabbix_agent2.conf中 Server 地址 |
| Zabbix Web 页面报 502 | PHP-FPM 或 Nginx 配置错误 | 检查 Nginx error log 和 php-fpm 状态 | 确认 zabbix.conf 中 fastcgi_pass 地址和端口匹配 |
| 出现 “history syncer processes over 75% busy” | 监控项过多,数据库写入性能不足 | 查看zabbix_server.conf中 StartDBSyncer 和数据库慢查询 | 调大 StartDBSyncer,优化数据库索引或引入 Proxy 分流 |
| Prometheus Targets 显示 DOWN | 服务发现失败或 exporter 未启动 | States -> Targets 查看错误信息,curl exporter metrics 接口 | 检查 exporter 状态,核对 scrape_configs 中 IP 端口 |
| Prometheus 数据有断点或查询慢 | 本地存储时间过长,占用过多磁盘 IO | 查看 TSDB block 目录和查询耗时 | 调整保留时间,必要时接入 Thanos 或 VictoriaMetrics 做长期存储 |
| 告警通知频繁重复 | Alertmanager 路由分组策略配置不当 | 查看 Alertmanager Web UI 的 Status 页面看分组 | 调整 group_wait、group_interval、repeat_interval 参数,使用 group_by 收敛 |
| Grafana 显示 Zabbix 数据源插件未启用 | 插件未安装或未启用 | 查看 grafana.log 和插件目录权限 | 确保插件解压在/var/lib/grafana/plugins,重启 grafana-server 并在插件页启用 |
8. 大规模生产环境的最佳实践与工程建议
从零搭建一套能用、好用的监控系统只是一个起点,真正拉开差距的是工程化的能力和全局设计能力。这里给出几条我在实际运维中踩过坑之后总结的建议。
8.1 Zabbix 生产环境建议
Zabbix 在生产环境最需要注意的是性能规划。如果被监控节点超过几百台,建议引入 Zabbix Proxy 做分层采集,避免所有 Agent 直连中心 Server。每个 Proxy 负责一个区域或机房的采集任务,再把数据异步上报给 Server,这样既减轻 Server 压力,也能避免跨机房网络抖动影响监控数据完整性。
数据库层面,Zabbix 的监控数据会随着监控项数量线性增长,建议定期清理历史数据,配置 Partition 或 TimescaleDB 插件。同时关注history syncer processes over 75%这类日志,出现这个提示说明数据库写入已经跟不上了,只调大 StartDBSyncer 不解决根本问题,核心方案还是降低监控项密度、升级数据库或引入 Proxy。
Zabbix 的模板管理也要建立规范。不要每次加监控都手动创建监控项和触发器,应该封装成模板并放入版本管理。模板命名推荐“平台-应用-场景”的格式,例如Linux-OS-Base、MySQL-8-Master,便于团队理解和复用。
8.2 Prometheus 生产环境建议
Prometheus 单机版在数据量超过一定规模后,会面临存储和查询瓶颈。生产环境的常见方案是使用 Thanos 或 VictoriaMetrics 做远程存储,将 Prometheus 变成纯粹的采集和告警组件,历史数据由远端存储负责。这不是一个可选项,而是企业规模的必经之路。
配置管理方面,prometheus.yml 和 rules 文件都应该纳入 Git 管理,通过 CI/CD 自动检查配置语法并热加载。热加载命令是curl -X POST http://localhost:9090/-/reload,前提是启动 Prometheus 时开启了--web.enable-lifecycle参数。
告警质量是另一个经常被忽视的点。很多团队配置了告警规则后,因为阈值不合理产生大量“睡眠阻断型”告警,导致真正重要的告警被淹没。建议每一条告警规则都明确回答三个问题:是否需要立即处理、需要谁处理、处理时限是多少。不需要立即处理的告警,应该降级为信息级别或只在日报中汇总。
8.3 全链路视角:指标、日志、链路追踪三件套
最后要提醒的是,Zabbix 和 Prometheus 解决的都只是指标监控。一个健康的可观测性体系,应该是指标、日志、链路追踪三件套配合使用。指标告诉我们系统哪里异常,日志帮助我们定位异常原因,链路追踪帮我们分析请求在微服务之间的调用关系。
如果你已经搭建好了指标监控,下一步建议引入 Loki(日志聚合)和 Tempo(链路追踪),它们与 Grafana、Prometheus 同属 Grafana 生态,可以在同一套界面里统一查询,这才是 2026 年运维工程师应该具备的全链路视角。
9. 总结:学习路径与实际落地建议
回到开头的问题:Zabbix 和 Prometheus 怎么选?现在应该能够形成自己的判断了。
如果你是一个刚入行的运维工程师,建议先学 Zabbix,因为它的图形化界面和完整的前后端封装能让你快速理解监控的核心链路:采集、存储、触发、通知。Zabbix 的知识是“接地气”的,在传统企业里非常实用。
当你把 Zabbix 跑熟之后,再学 Prometheus。学习 Prometheus 的难点不在部署,而在理解它的数据模型、标签设计、PromQL 和云原生采集方式。学 Prometheus 的最好方式不是看文档,而是直接搭一套 kube-prometheus-stack,观察它是靠什么机制自动发现并采集 K8s 集群指标的。
两套系统都掌握之后,你会对“监控”这件事形成一种整体认知:监控不是装一个软件,而是建立一套从基础设施到业务指标的可观测体系。具体的公司环境可能需要 Zabbix,也可能是 Prometheus,或者两者共存。无论哪种,只要你对采集、存储、告警、可视化这条链路有透彻理解,工具版本怎么变,换汤不换药。
最后给一个实际建议:别急着在生产环境搭建大而全的监控体系。先用一台虚拟机分别装 Zabbix 和 Prometheus,各自监控三五台机器,把告警通道打通,把面板建起来,跑通一个完整的“故障发现 -> 告警通知 -> 定位恢复”流程。这个过程比你刷十篇教程都管用。