Mar 17, 2010

Scripts externos en Zabbix

Zabbix trae de serie numerosas plantillas, también conocidas como templates, que permiten monitorizar diversas aplicaciones y sistemas.

Puede ocurrir que con esas plantillas no tengamos los suficientes recursos para monitorizar un determinado servicio. Ante esta situación podríamos crear un script personalizado que cumpla los requisitos solicitados, utilizar algún tipo de script que ya haya sido implementado por otra persona o utilizar por ejemplo plugins de Nagios, los cuales pueden ser llamados desde Zabbix encapsulándolos a través de un wrapper.

Un wrapper no es más que un envoltorio de un determinado plugin de Nagios, el cual se encarga de ejecutar dicho script y parsear sus resultados al formato de Zabbix.

Para poder utilizar scripts externos en Zabbix, lo primero que hay que hacer es definir en el fichero de configuración del servidor el directorio donde residirán los scripts.

[root@centos ~]# cat /etc/zabbix/zabbix_server.conf
...
ExternalScripts=/etc/zabbix/externalscripts

[root@centos ~]# chown zabbix:zabbix /etc/zabbix/externalscripts

A la hora de crear un item que utilice un script externo, tendremos que seleccionar como tipo (Type), External check.

Vamos a ver todo esto con un sencillo ejemplo: se va a crear un script externo en bash que monitorice el número de procesos Apache que hay levantados. El script se va a llamar check_status.sh y va a recibir como único argumento el nombre del proceso del cual debe obtenerse el número total de procesos existentes.

Como versión de Zabbix se va a emplear una 1.8.1 en un CentOS 5.4 de 64 bits.

Para ejecutar el script desde Zabbix utilizaremos la siguiente llamada como key: check_process.sh[httpd]. El tipo de dato que devolverá la función será un número entero decimal sin signo.


Para devolver un valor a Zabbix desde un script externo en bash, utilizaremos el comando echo. Por lo tanto, el script quedará de la siguiente forma:

[root@centos ~]# cat /etc/zabbix/externalscripts/check_process.sh
#!/bin/bash
echo $(pgrep $2 | wc -l)

[root@centos ~]# chmod +x /etc/zabbix/externalscripts/check_process.sh

Como argumento recibido a través de la línea de órdenes se tiene que empezar a utilizar a partir de $2, ya que $1 se corresponde siempre con la dirección IP de la máquina que ejecuta el script.

Si se necesitan pasar más parámetros, éstos deben estar separados por espacios en blanco (por ejemplo check_process.sh[httpd "memory limit"]).

4 comments:

  1. hola ..
    he mirado tu blog y muchas gracias , por las aclaraciones :D
    ahora el tema de poner los scrip de nagios en zabbix no me queda muy claro como se puede hacer,como haces que interactuen de forma que no se pierdan daton en el parseo ?

    Saludos

    ReplyDelete
  2. Hola,

    para eso debes de analizar previamente el plugin de Nagios.

    Al fin y al cabo un plugin de Nagios viene a ser un script (Perl, bash, etc.) que se ejecuta desde el servidor con destino el cliente.

    Hay plugins que requieren que el cliente de Nagios esté instalado en el huésped y otros no.

    La idea es construirse un script externo (formato de Zabbix) que a su vez ejecute el plugin de Nagios, y este script de Zabbix parsee los resultados devueltos por el plugin.

    Un saludo,

    ReplyDelete
  3. hola, he seguido tus pasos y me da este error, alguna idea??

    servidor_Zabbix:check_process.sh[httpd] error : not supported by agent Old status [0]

    Los permisos de carpetas y script creo que están bien.

    Un saludo

    ReplyDelete
  4. nada, olvidalo, ya me funciona, buen blog!

    ReplyDelete