我是一个Zabbix的总noob,这是我的第一个任务…我需要使用Zabbixbuild立一个监视器,并监视一个脚本运行多久。 脚本看起来像这样:
device0="/home/build/aggregator/scripts/aggregator.lock" if [ -e "$device0" ] then echo process is already running else touch $device0 java -Xms6g -Xmx6g -jar /home/build/aggregator/aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar rm $device0 fi
该脚本创build一个名为aggregator.lock的文件,确保脚本只运行一次,脚本在Crontab中configuration为每分钟运行一次。 我创build了下一个项目: 
当aggregator.lock文件存在时,Zabbix vfs.file.exists返回:1。
[root@zabbix ~]# zabbix_get -s 10.200.XX -k vfs.file.exists[/home/build/aggregator/scripts/aggregator.lock] 1 [root@zabbix ~]#
并且vfs.file.time检查返回:1400057821(Unix时间)。
虽然aggregator.lock文件不存在,但Zabbix返回:0.而vfs.file.time检查返回:ZBX_NOTSUPPORTED。
检查每30秒运行一次,以尽量减lessnetworking中的stream量,但脚本每次运行约10-20秒。 所以我需要find监控剧本运行时间的最佳方法,达到这个目的的最佳方法是什么?
你需要监视一个进程运行多久,或者如果进程花费太长时间,你需要提醒吗?
如果是前者,则可能希望修改脚本,以便使用zabbix_sender发送有关运行时间的信息,如下所示:
#!/bin/bash date1=$(date '+%s') sleep 5 date2=$(date '+%s') duration=$(($date2-$date1)) zabbix_sender -z 127.0.0.1 -s 'my host' -k duration -o $duration
在这里,“睡眠5”是你的“java”命令。
如果是后者,则可能希望修改脚本,以便在脚本启动时发送值“1”,结束时发送值“0”,如下所示:
#!/bin/bash zabbix_sender -z 127.0.0.1 -s 'my host' -k started -o 1 sleep 5 zabbix_sender -z 127.0.0.1 -s 'my host' -k started -o 0
然后,您可以创build类似于以下内容的触发器,以提醒进程是否耗时过长:
{my host:started.last()}=1 & {my host:started.nodata(45)}=1
如果修改脚本不是一个选项,那么你可能希望使用proc.num []项目:
proc.num[java,,,aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar]
每隔15秒进行一次检查,警报是最后三个值(跨越30秒)显示进程正在运行:
{my host:proc.num[java,,,aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar].min(#3)}=1
这也可能是最简单的解决scheme。