Soy un novato total en Zabbix y esta es mi primera tarea... Necesito construir un monitor usando Zabbix y monitorear cuánto tiempo se ejecuta un script. El guión se ve así:
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
El script crea un archivo llamado aggregator.lock
que garantiza que el script se ejecute solo una vez; el script está configurado en Crontab para ejecutarse cada minuto. He creado los siguientes elementos:
mientras el aggregator.lock
archivo existe, Zabbix vfs.file.exists
devuelve: 1.
[root@zabbix ~]# zabbix_get -s 10.200.X.X -k vfs.file.exists[/home/build/aggregator/scripts/aggregator.lock]
1
[root@zabbix ~]#
Y vfs.file.time
verifique las devoluciones: 1400057821 (hora Unix).
Mientras el aggregator.lock
archivo no existe, Zabbix devuelve: 0. Y vfs.file.time
la verificación devuelve: ZBX_NOTSUPPORTED.
La verificación se ejecuta cada 30 segundos para minimizar el tráfico en la red, pero el script se ejecuta durante aproximadamente 10 a 20 segundos cada vez. Entonces necesito encontrar la mejor manera de monitorear el tiempo de ejecución del script, ¿cuál sería la mejor manera de lograr este objetivo?
Respuesta1
¿Necesita monitorear cuánto tiempo se ejecuta un proceso o necesita alertar si el proceso está tardando demasiado?
Si es lo primero, es posible que desees modificar el script para que envíe información sobre el tiempo de ejecución usando zabbix_sender
, como este:
#!/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
Aquí, "dormir 5" es su comando "java".
Si es lo último, es posible que desees modificar el script para que envíe un valor de "1" cuando comience el script y un valor de "0" cuando finalice, así:
#!/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
Luego, podría crear un activador similar al siguiente para alertar si el proceso está tardando demasiado:
{my host:started.last()}=1 & {my host:started.nodata(45)}=1
Si modificar el script no es una opción, es posible que desee utilizar el elemento proc.num[]:
proc.num[java,,,aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar]
Haga que verifique cada 15 segundos y la alerta es que los últimos tres valores (que abarcan 30 segundos) muestran que el proceso se está ejecutando:
{my host:proc.num[java,,,aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar].min(#3)}=1
Esta también podría ser la solución más sencilla.