我对 Zabbix 完全是菜鸟,这是我的第一个任务...我需要使用 Zabbix 构建一个监视器并监视一个脚本的运行时间。脚本如下所示:
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
该脚本创建了一个名为的文件aggregator.lock
,以确保该脚本仅运行一次,该脚本在 Crontab 中配置为每分钟运行一次。我创建了以下项目:
当aggregator.lock
文件存在时,Zabbixvfs.file.exists
返回:1。
[root@zabbix ~]# zabbix_get -s 10.200.X.X -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 秒运行一次,以尽量减少网络流量,但脚本每次运行大约 10-20 秒。所以我需要找到监控脚本运行时间的最佳方法,实现这一目标的最佳方法是什么?
答案1
您是否需要监控某个过程的运行时间或者是否需要在该过程耗时过长时发出警报?
如果是前者,您可能希望修改脚本,以便它使用发送有关运行时的信息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
这里,“sleep 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
然后,您可以创建类似于以下的触发器,以在该过程耗时过长时发出警报:
{my host:started.last()}=1 & {my host:started.nodata(45)}=1
如果修改脚本不是一个选项,那么您可能希望使用 proc.num[] item:
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
这或许也是最简单的解决方案。