Zabbix: Tentando monitorar o tempo de execução de um script, como é feito?

Zabbix: Tentando monitorar o tempo de execução de um script, como é feito?

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.lockque 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: insira a descrição da imagem aqui insira a descrição da imagem aqui Enquanto o aggregator.lockarquivo existir, o Zabbix vfs.file.existsretorna: 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.timeverifique os retornos: 1400057821 (horário Unix).

Enquanto o aggregator.lockarquivo não existir, o Zabbix retorna: 0. E vfs.file.timeo 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.

informação relacionada