Zabbix 监控部署实战:服务器告警与模板配置

Zabbix 监控部署架构图

这篇指南教你完成 Zabbix 监控的整套部署:从服务端安装、被监控主机接入,到监控模板(template,由监控项、触发器、图形等元素组成并批量作用于主机的配置集合)、触发器(trigger,对监控项取值做阈值判断并决定是否告警的规则)与告警动作(action,触发器命中后执行通知或远程命令的操作)的配置。对运行在 [VPS](https://cn.hostease.com/vps/)(Virtual Private Server,[虚拟专用服务器](https://cn.hostease.com/vps/))或[独立服务器](https://cn.hostease.com/dedicated-server/)上的业务来说,只靠人工登录排查异常已经很难跟上故障节奏,一套能自动采集指标、按时告警的监控体系是稳定运维的基础。

Zabbix 是开源的分布式监控系统,服务端(server)负责汇总数据、执行判断,被监控主机上安装代理(agent)上报指标。它同时支持 SNMP(Simple Network Management Protocol,简单网络管理协议)、JMX(Java Management Extensions,Java 管理扩展)等采集方式,适合需要统一纳管多台服务器的场景。本文以单台服务器部署为例,聚焦最常见的一条主链路:安装服务端、接入代理、套用模板、配置告警。如果你更关心业务进程本身的可用性而非整机指标,可以对照 MySQL 慢查询分析里对数据库关键指标的拆解思路来设计采集项。

一、Zabbix 服务端与数据库的安装

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 可能成为瓶颈,此时可以结合 Redis 持久化与恢复里对写入缓存与落盘策略的取舍思路,先评估磁盘吞吐再决定采集频率。

二、被监控主机接入:代理安装与配置

被监控主机的接入方式分三种:安装官方代理(agent)采集、走 SNMP 采集网络设备、无代理方式用 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、内存、磁盘、网络等基础指标。

Zabbix 监控模板结构

如果内置模板不含你关心的业务指标,可以新建自定义模板。添加监控项时要同时给出键值(key)、采集间隔与保留时间。例如下面这个自定义监控项采集某个 PHP-FPM 进程数:

proc.num[php-fpm]

键值的写法需要与代理内置项匹配。proc.num 统计匹配进程名的进程数量,中括号里是进程名。采集间隔默认 1m(1 分钟),对大多数指标足够。保留时间建议历史数据与趋势数据分开设置:历史保留 7 天用于近期排障,趋势保留 365 天用于容量规划,这样能在存储成本与可用性之间取得平衡,这属于典型区间建议,可按磁盘容量调整。

模板设计遵循”一个模板负责一类指标”的原则。把数据库指标、Web 指标、系统基础指标拆成独立模板,通过模板组管理,既方便复用也便于权限控制。对流量波动明显的入口层,可结合 Nginx 限流配置里对请求速率与突发量的量化思路,为相应指标设计合理的采集口径。

四、触发器与告警动作配置

触发器负责把监控项取值翻译成状态。一个触发器通常由一个表达式构成,命中条件时状态从 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、钉钉或企业微信)与接收人。建议配置两级升级:第一级告警发到值班邮箱,持续一段时间仍未恢复,第二级升级到管理组。避免把所有告警都堆到一个通道,否则关键故障会被淹没在噪音里。

Zabbix 告警通知与升级流程

通知文案里最好带上主机名、触发时间与当前取值,方便值班人员不登录系统就能判断。媒介的发送频率要加限制,例如同一触发器在 30 分钟内最多重复通知 3 次,防止抖动期间告警刷屏。

五、阈值校准与误报排查

监控体系上线后最常遇到两类问题:误报(阈值过低)与漏报(阈值过高)。解决办法不是拍脑袋改阈值,而是先看趋势数据确定基线。进入前端”监测-最新数据”页,选择对应监控项,观察一周内的正常波动范围,把阈值设在正常值之上留出缓冲。比如正常 CPU 平均 40%,峰值 70%,阈值可以设到 80% 以上,这类数值应标注为典型区间。

排查误报时,先确认是数据本身异常还是判断逻辑异常。数据异常查代理是否被重启导致缺采,判断异常则检查触发器表达式与模板前缀是否写错。一个常见陷阱是表达式里写的监控项路径与主机实际关联的模板不匹配,导致触发器永远处于不支持(NOT SUPPORTED)状态,既不告警也不恢复。定位这类问题可以借助 Certbot SSL(Secure Sockets Layer,安全套接层)证书排查里”先验证证书链再续期”的分步思路:先确认监控项有数据,再确认触发器能解析,最后才配置动作。

监控数据本身也需要可视化辅助判断。把关键指标接入 Grafana 面板做长期趋势图,比看原始数值更能发现缓慢劣化,具体部署方法可参考 Grafana 服务器部署实战。多台机器之间需要安全组网时,可参考 WireGuard 多跳中继配置打通管理通道,再让代理跨网段上报。

总结

Zabbix 监控部署的完整链路是:装好服务端与数据库,接入代理采集指标,用模板批量套用配置,通过触发器判断异常,再靠动作把人叫醒。这套体系的价值在于把”人工巡检”变成”自动感知”:故障发生时第一时间通知,平时从趋势数据里提前发现风险。对 Hostease 环境上的业务,建议先用内置模板覆盖基础指标,再逐步加入业务自定义项,每次改动后都回看最新数据确认采集与告警都正常,再放开到生产环境长期运行。

发表评论