Zabbix自定义监控项编写实战指南
前言
Zabbix作为主流开源监控平台,默认模板可覆盖常见指标,但在IDC运维场景中常需采集业务自定义数据(如应用层响应时间、特定进程状态或磁盘I/O排队数)。通过编写自定义监控项,运维团队可精准获取所需指标,避免依赖第三方工具。本文以监控主机上某个特定进程的存活状态为例,演示完整流程。
第一步:编写监控脚本
自定义监控项基于Zabbix Agent执行外部命令或脚本。推荐使用Shell或Python编写,确保返回结果符合Zabbix格式(仅输出数值或字符串)。
示例脚本:check_process.sh,用于检测Nginx进程是否存在,存在返回1,否则返回0。
#!/bin/bash
COUNT=$(ps -C nginx --no-headers | wc -l)
if [ $COUNT -ge 1 ]; then
echo "1"
else
echo "0"
fi将该脚本放置于Agent可执行目录(如/etc/zabbix/scripts/),并赋予执行权限:chmod +x /etc/zabbix/scripts/check_process.sh。
第二步:配置UserParameter
编辑Zabbix Agent配置文件(通常位于/etc/zabbix/zabbix_agentd.conf或include目录),新增条目:
UserParameter=process.nginx.status,/etc/zabbix/scripts/check_process.sh参数process.nginx.status为监控项key,后续在Zabbix Server页面添加监控项时使用。重启Agent服务:systemctl restart zabbix-agent。
第三步:在Zabbix Server上测试
使用zabbix_get命令验证Agent能否返回正确值(需在Zabbix Server或Proxy主机执行):
zabbix_get -s 192.168.1.100 -k process.nginx.status如返回1则表示配置成功。若返回ZBX_NOTSUPPORTED,请检查脚本路径、权限或Zabbix Agent日志。
第四步:创建监控项并关联模板
登录Zabbix Web前端,进入“配置”→“主机”,选择目标主机,点击“监控项”→“创建监控项”:
- 名称:Nginx进程存活状态
- 类型:Zabbix Agent(主动式或被动式取决于环境)
- 键值:
process.nginx.status - 信息类型:数字(无符号整数)
- 更新间隔:30s
保存后,等待第一个数据采集。建议将自定义监控项加入自定义模板,便于批量应用相同配置。
第五步:配置触发器与告警
创建触发器,当Nginx进程不存活(即值为0)时触发告警:
- 名称:Nginx进程宕机
- 严重性:严重
- 表达式:
{模板名称:process.nginx.status.last()}=0
保存后,可在“监测”→“问题”中看到告警。结合动作发送邮件、钉钉或短信通知,实现自动化响应。
进阶扩展:带参数自定义监控项
若需监控多个进程,可将进程名作为参数传入。修改UserParameter:
UserParameter=process.check[*],/etc/zabbix/scripts/check_process.sh $1脚本内通过$1接收参数。监控项键值可写为process.check[nginx]、process.check[mysql],一个规则即可覆盖多种进程。
总结
通过以上步骤,Zabbix自定义监控项可快速适配IDC运维中的特殊需求。关键在于保证脚本输出符合预期且Agent配置正确。实际生产环境中,建议对自定义脚本添加入参校验与错误处理(如返回非零值),避免监控中断。灵活运用UserParameter与宏变量,可大幅降低重复配置成本。