Zabbix
Custom scripts
Items > Item types > External checks
External checks 由 zabbix server 运行,远端被监控机器不需要安装 zabbix agent。当一个 External Check 类型的 item 被应用到一个 host 时,该 host 的信息可以用 {HOST.CONN}
作为参数传递给检查脚本,其标准输出作为 item value。
会使用 Zabbix 的运行用户来执行脚本,脚本的位置在服务器端配置文件里用 ExternalScripts
参数指定。
Usage & Example:
script[<parameter1>,<parameter2>,...]
check_oracle.sh["-h","{HOST.CONN}"]
Actions > Operations > Remote commands
在某些状况发生时,除了可以定义发送邮件的 action,还可以定义一组远程命令在被监控机器上由 Zabbix agent 执行,比如重启 Apache。
需要确保在 zabbix_agentd.conf
里将 EnableRemoteCommands
选项设置为 1。
另外要记得在 agent 机器上配置执行命令用的 sudo 权限。
Items > User parameters
当 Zabbix 预定义的 keys(items) 不能满足需求时,可以用 UserParameter 指令自定义 key,用于在 agent 上执行检查脚本并返回 item value。
指令写在 zabbix_agentd.conf 里,其格式为:
UserParameter=<keyname>,<shell commands>
一个最简单的示例,当用该 key 添加 item 以后,item 的值总是 1:
UserParameter=custom.ping,echo 1
需要_注意_的是,在用 Zabbix 前端定义 item 的时候,像这种自定义的 key 不会出现在选择 key 的弹出菜单里。只需要严格按照 keyname 手动输入就好了。
下面是一个稍微复杂些的示例。Zabbix 预设的 vfs.file.cksum[/etc/passwd]
可以用来检查文件是否有更改,但无法提供更详细的信息,比如更改了哪些内容。我们可以通过 UserParameter 的方式自定义一个检查:
UserParameter=custom.passwdfilediff, if [ ! -e /tmp/passwd.bak ]; then cp /etc/passwd /tmp/passwd.bak; else diff /tmp/passwd.bak /etc/passwd || cp /etc/passwd /tmp/passwd.bak; fi
这样我们用 custom.passwdfilediff
这个 key 定义一个 item,当 /etc/passwd 文件有更改时,我们会收到 diff 信息的报警。
再高级一点,UserParameter 还可以向 shell commands 里传递参数。格式如下:
UserParameter=<keyname[*]>, <command1 $1, command2 $2>
其中 $1
为第一个参数,$2
为第二个参数。参数在定义 item 时提供。
Web Monitoring
Web 检查是由 zabbix-server 发出的,不需要 agent。
Web scenarios 跟 item 一样,需要绑定在 host 之上,但这绝不是说这些检查(steps)是要在这些 hosts 上执行。
那这样与 host 绑定有什么意义呢?一些讨论1。
从 2.2 以后,Zabbix 开始支持 Templated web monitoring2。