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 绑定有什么意义呢?一些讨论:https://www.zabbix.com/forum/showthread.php?p=65368

从 2.2 以后,Zabbix 开始支持 Templated web monitoring。 (http://blog.zabbix.com/zabbix-2-2-features-part-2-templated-web-monitoring/1971/)