TL;DR:这套监控体系到底要验证什么
这篇指南教你完成 Zabbix 监控的整套部署:从服务端安装、被监控主机接入,到监控模板(template,由监控项、触发器、图形等元素组成并批量作用于主机的配置集合)、触发器(trigger,对监控项取值做阈值判断并决定是否告警的规则)与告警动作(action,触发器命中后执行通知或远程命令的操作)的配置。对运行在 VPS(Virtual Private Server,虚拟专用服务器) 或独立服务器(独服(独享整台物理资源的服务器))上的业务来说,只靠人工登录排查异常已经很难跟上故障节奏,一套能自动采集指标、按时告警的监控体系是稳定运维的基础。
很多新手把 Zabbix 装完、看到前端能出图就以为大功告成,结果真正出故障时才发现告警根本没发出来。本文会重点讲清楚一个容易被忽略的问题:部署完成后,到底要验证哪些指标才能确认告警链路真的通了。我会用一台 Ubuntu 22.04 服务器做实测,把每一步的命令和验证方法都写出来。
一、服务端与数据库安装:先让数据有地方存
Zabbix 服务端依赖一个关系型数据库存放历史数据与配置,主流选择是 PostgreSQL 或 MySQL。安装前先确认系统版本与软件源,这里以 Ubuntu 22.04 搭配 PostgreSQL 为例。先安装仓库与依赖,再初始化数据库:
wget https://repo.zabbix.com/zabbix/6.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.4-1+ubuntu22.04_all.deb dpkg -i zabbix-release_6.4-1+ubuntu22.04_all.deb apt update apt install -y zabbix-server-pgsql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
数据库部分需要先创建专用用户与库,再把官方提供的建表 SQL(结构化查询语句脚本)导入。导入脚本体积较大,耗时约一到两分钟属正常现象:
sudo -u postgres createuser --pwprompt zabbix sudo -u postgres createdb -O zabbix zabbix zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix
完成后编辑服务端主配置 /etc/zabbix/zabbix_server.conf,填写数据库连接信息与监听端口,然后启动 zabbix-server 与 nginx 前端。首次访问 Web 界面完成安装向导后,建议立刻修改默认管理员口令,并把服务端自身也纳入监控,避免监控系统自己先于业务宕机却无人知晓。
数据库写入速度直接决定监控密度。如果历史数据量大、采集间隔短,表空间与磁盘 I/O 可能成为瓶颈,此时可以结合 独立服务器选型 里对磁盘吞吐的评估思路,先确认存储能力再决定采集频率。
二、被监控主机接入:代理装好不等于链路通
被监控主机的接入方式分三种:安装官方代理(agent)采集、走 SNMP(Simple Network Management Protocol,简单网络管理协议)采集网络设备、无代理方式用 SSH(Secure Shell,安全外壳协议)或 IPMI 探测。对绝大多数 Linux 服务器,推荐直接安装代理,它开销低、采集项全。
代理配置的关键是 server 指向服务端地址,以及允许谁来连本机。下面是典型配置片段:
# /etc/zabbix/zabbix_agentd.conf # 服务端地址,多个用逗号分隔 Server=10.0.0.10 # 允许哪些主机向本机发起主动查询 ServerActive=10.0.0.10 Hostname=web-01
配置中的 Hostname 必须与前端添加主机时填写的名称完全一致,否则数据采集会被拒。改完用 systemctl restart zabbix-agent 重启,再在服务端执行 zabbix_get -s 10.0.0.11 -k system.cpu.load 验证连通。返回数字即代表链路已通。若返回空白,先检查防火墙是否放行了代理默认端口 10050,再核对两端的 Hostname。
代理采集本身占用极小,典型值在几兆内存以内。真正影响负载的是采集频率与保留策略,建议对新接入的主机先用默认模板跑一两天,观察数据量再调优,而不是一上来就调高采集密度。

三、监控模板:让配置批量生效
模板是 Zabbix 复用配置的核心。一个模板里可以包含监控项(item,定义采集什么指标、多久采一次)、触发器、图形与告警动作,把它关联到主机,这些配置就一次性生效。官方内置了大量模板,比如 Linux by Zabbix agent、MySQL by Zabbix agent,开箱即可覆盖 CPU、内存、磁盘、网络等基础指标。
如果内置模板不含你关心的业务指标,可以新建自定义模板。添加监控项时要同时给出键值(key)、采集间隔与保留时间。例如下面这个自定义监控项采集某个 PHP-FPM 进程数:
proc.num[php-fpm]
键值的写法需要与代理内置项匹配。proc.num 统计匹配进程名的进程数量,中括号里是进程名。采集间隔默认 1m(1 分钟),对大多数指标足够。保留时间建议历史数据与趋势数据分开设置:历史保留 7 天用于近期排障,趋势保留 365 天用于容量规划,这样能在存储成本与可用性之间取得平衡,这属于典型区间建议,可按磁盘容量调整。
模板设计遵循”一个模板负责一类指标”的原则。把数据库指标、Web 指标、系统基础指标拆成独立模板,通过模板组管理,既方便复用也便于权限控制。对流量波动明显的入口层,可结合 VPS 与独立服务器选型 里对资源配额的量化思路,为相应指标设计合理的采集口径。
四、触发器与告警动作:验证告警真的能发出来
触发器负责把监控项取值翻译成状态。一个触发器通常由一个表达式构成,命中条件时状态从 OK 变为 PROBLEM(问题),满足恢复条件后回到 OK。下面是一条针对磁盘使用率的触发器表达式示例:
last(/Linux by Zabbix agent/vfs.fs.size[/,pused])>85
这条表达式的含义是:当根分区使用率超过 85% 时触发告警。85 这个阈值属于示例值,实际应按业务与磁盘大小设定,建议先用一段时间的基线数据校准,避免阈值过低导致频繁误报。表达式里的 /Linux by Zabbix agent/ 是模板前缀,vfs.fs.size[/,pused] 是监控项键值。
触发器命中后是否通知人、怎么通知,由告警动作决定。动作包含触发条件和操作,操作里要指定通知媒介(media,告警发送的通道,如邮件、Webhook、钉钉或企业微信)与接收人。建议配置两级升级:第一级告警发到值班邮箱,持续一段时间仍未恢复,第二级升级到管理组。避免把所有告警都堆到一个通道,否则关键故障会被淹没在噪音里。
通知文案里最好带上主机名、触发时间与当前取值,方便值班人员不登录系统就能判断。媒介的发送频率要加限制,例如同一触发器在 30 分钟内最多重复通知 3 次,防止抖动期间告警刷屏。

五、阈值校准与误报排查:上线后最该盯的三件事
监控体系上线后最常遇到两类问题:误报(阈值过低)与漏报(阈值过高)。解决办法不是拍脑袋改阈值,而是先看趋势数据确定基线。进入前端”监测-最新数据”页,选择对应监控项,观察一周内的正常波动范围,把阈值设在正常值之上留出缓冲。比如正常 CPU 平均 40%,峰值 70%,阈值可以设到 80% 以上,这类数值应标注为典型区间。
排查误报时,先确认是数据本身异常还是判断逻辑异常。数据异常查代理是否被重启导致缺采,判断异常则检查触发器表达式与模板前缀是否写错。一个常见陷阱是表达式里写的监控项路径与主机实际关联的模板不匹配,导致触发器一直处于不支持(NOT SUPPORTED)状态,既不告警也不恢复。
最后,验证告警链路是否真的通,最直接的办法是临时把某个阈值调到当前值以下,人为制造一次触发,确认通知真的到达后再改回正常阈值。这套”制造故障→确认告警→恢复”的演练,建议每季度做一次,避免监控系统形同虚设。
总结:从部署到可用的关键动作
总结一下,Zabbix 部署不是装完就结束,而是要以”告警真的能发出来”为验收标准。建议按这个顺序自查:先确认服务端与数据库正常、代理链路用 zabbix_get 验证连通;再套用模板并核对监控项是否进入正常采集状态;接着配置触发器与告警动作,用人为制造阈值触发的方式确认通知到达;最后用一周趋势数据校准阈值,把误报和漏报都压到可接受范围。
如果你需要一台适合跑监控服务端的机器,可以考虑 Hostease VPS 或独立服务器方案,重点看磁盘 I/O 与内存是否满足采集密度需求。监控体系稳定了,业务出问题时你才能第一时间知道,而不是等用户来投诉。

微信扫一扫打赏
支付宝扫一扫打赏