Sou totalmente novato no Zabbix e esta é minha primeira tarefa... Preciso construir um monitor usando o Zabbix e monitorar quanto tempo um script é executado. O script fica assim:
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
O script cria um arquivo chamado aggregator.lock
que garante que o script seja executado apenas uma vez, o script é configurado no Crontab para ser executado a cada minuto. Criei os próximos Itens:
Enquanto o aggregator.lock
arquivo existir, o Zabbix vfs.file.exists
retorna: 1.
[root@zabbix ~]# zabbix_get -s 10.200.X.X -k vfs.file.exists[/home/build/aggregator/scripts/aggregator.lock]
1
[root@zabbix ~]#
E vfs.file.time
verifique os retornos: 1400057821 (horário Unix).
Enquanto o aggregator.lock
arquivo não existir, o Zabbix retorna: 0. E vfs.file.time
o check retorna: ZBX_NOTSUPPORTED .
A verificação é executada a cada 30 segundos para minimizar o tráfego na rede, mas o script é executado por cerca de 10 a 20 segundos a cada vez. Então preciso encontrar a melhor forma de monitorar o tempo de execução do script, qual seria a melhor forma de atingir esse objetivo?
Responder1
Você precisa monitorar quanto tempo um processo é executado ou precisa alertar se o processo estiver demorando muito?
Se for o primeiro, você pode querer modificar o script para que ele envie informações sobre o tempo de execução usando zabbix_sender
, assim:
#!/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
Aqui, “sleep 5” é o seu comando “java”.
Se for o último, você pode modificar o script para que ele envie um valor "1" quando o script for iniciado e um valor "0" quando terminar, assim:
#!/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
Então, você poderia criar um gatilho semelhante ao seguinte para alertar se o processo estiver demorando muito:
{my host:started.last()}=1 & {my host:started.nodata(45)}=1
Se modificar o script não for uma opção, você pode usar o item proc.num[]:
proc.num[java,,,aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar]
Faça a verificação a cada 15 segundos e o alerta é que os últimos três valores (abrangendo 30 segundos) mostram que o processo está em execução:
{my host:proc.num[java,,,aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar].min(#3)}=1
Esta também pode ser a solução mais simples.