Zabbix Agent自定义监控项配置详解
什么是Zabbix Agent自定义监控项
Zabbix Agent的自定义监控项(UserParameter)功能允许管理员扩展Zabbix的监控能力,通过自定义命令或脚本获取系统特定的监控数据。这种机制极大地增强了Zabbix的灵活性,使其能够监控几乎任何系统指标。
自定义监控项的基本语法
自定义监控项的基本语法格式为:
UserParameter=<key>,<command>
其中:
<key>
是监控项的键名,在Zabbix服务器上配置监控项时需要引用<command>
是实际执行的命令或脚本
常见自定义监控项示例解析
1. 模拟系统用户数监控
UserParameter=system.test,who | wc -l
这个示例模拟了内置的system.users.num
参数,使用who
命令列出当前登录用户,然后通过wc -l
统计行数。
应用场景:当需要自定义用户数统计逻辑时,可以修改此命令。
2. 目录大小监控
UserParameter=vfs.dir.size[*],dir="$1"; du -s -B 1 "${dir:-/tmp}" | cut -f1
这个监控项可以获取指定目录的大小:
- 支持参数传递,如
vfs.dir.size[/var/log]
- 默认监控
/tmp
目录 du -s -B 1
以字节为单位显示总大小cut -f1
提取第一列(大小值)
注意事项:确保Zabbix Agent有权限访问目标目录。
3. 进程CPU使用率监控
UserParameter=proc.cpu[*],proc="$1"; ps -o pcpu= -C "${proc:-zabbix_agentd}" | awk '{sum += $$1} END {print sum}'
这个监控项可以:
- 监控指定进程名的所有进程的CPU使用率总和
- 默认监控
zabbix_agentd
进程 - 使用
ps -o pcpu=
获取CPU百分比 - 通过awk累加所有同名进程的CPU使用率
典型应用:监控关键服务的CPU资源占用情况。
4. 邮件队列监控
UserParameter=unix_mail.queue,mailq | grep -v "Mail queue is empty" | grep -c '^[0-9A-Z]'
这个监控项:
- 使用
mailq
命令获取邮件队列 - 过滤掉空队列提示
- 统计实际待处理邮件数量
适用系统:主要适用于使用传统sendmail/postfix等邮件系统的服务器。
5. 分区发现(自动发现规则)
Linux版本:
UserParameter=vfs.partitions.discovery.linux,for partition in $(awk 'NR > 2 {print $4}' /proc/partitions); do partitionlist="$partitionlist,"'{"{#PARTITION}":"'$partition'"}'; done; echo '{"data":['${partitionlist#,}']}'
Solaris版本:
UserParameter=vfs.partitions.discovery.solaris,/somewhere/solaris_partitions.sh
这些是自动发现(Low-Level Discovery)规则的示例:
- Linux版本直接从
/proc/partitions
读取分区信息 - Solaris版本使用
iostat
命令获取分区信息 - 输出符合Zabbix自动发现要求的JSON格式
重要提示:自动发现规则需要配合Zabbix的发现功能使用,可以自动创建监控项、触发器等。
自定义监控项最佳实践
-
参数化设计:尽可能使用
[*]
语法使监控项可配置,如vfs.dir.size[*]
-
默认值处理:使用
${param:-default}
语法提供合理的默认值 -
性能考虑:复杂的监控脚本应考虑执行效率,避免影响系统性能
-
错误处理:脚本中应包含适当的错误处理逻辑
-
权限管理:确保Zabbix Agent有执行命令和访问数据的权限
-
日志记录:对于复杂脚本,建议添加适当的日志记录功能
调试自定义监控项
可以使用以下命令测试自定义监控项:
zabbix_agentd -t "userparameter.key"
对于带参数的监控项:
zabbix_agentd -t "userparameter.key[param]"
总结
Zabbix Agent的自定义监控项功能为系统监控提供了极大的灵活性。通过合理设计自定义监控项,可以监控几乎任何系统指标。本文介绍了几种典型的自定义监控项示例,涵盖了从简单的命令执行到复杂的自动发现等各种场景。在实际应用中,应根据具体需求和安全考虑,设计适当的监控项。