SyntaxHighlighter

jueves, 20 de marzo de 2014

Netstat y Zabbix

Ya he hablado otras veces de la herramienta de monitorización de servidores Zabbix y de lo fácil que resulta extenderla.

Hoy hemos recibido una petición por parte de compañeros para que añadiéramos varios monitores más a los datos que se recogen de los servidores, en particular, datos derivados de la ejecución de la orden netstat que devuelve datos sobre las conexiones de red establecidas con el servidor. Por ejemplo, para ver el número de conexiones establecidas a un determinado puerto, ya sean de salida o de entrada. La orden en cuestión es: netstat -an | grep STABLISHED  | grep [port]

Para poder parametrizar la orden he creado un fichero de configuración de zabbix similar al que hay en varios foros para valores de mysql, que nos permite utilizar argumentos. Fichero userparameter_netstat.conf (crear en /etc/zabbix/ e incluir desde el dichero /etc/zabbix/zabbix_agentd.conf):

# Flexible parameter to grab global variables. On the frontend side, use keys like netstat.port[Port_number].
# Key syntax is netstat.port[Port_number].
UserParameter=netstat.port[*],netstat -na | grep $1 | grep ESTABLISH | wc -l
O mejor aún (actualizado):
UserParameter=netstat.port[*],netstat -na | grep ESTABLISH | egrep ':$1[[:blank:]]+' | wc -l

Para considerar sólo cadenas que del tipo: "dos puntos + puerto especificado + espacios" y así, evitar que se incluyan en el conteo líneas que en realidad no son conexiones a ese puerto.
Con esto conseguimos que zabbix_agent responda a peticiones de un nuevo parámetro: netstat.port[puerto] con la orden

netstat-na | grep puerto | grep STABLISH | wc -l

que devuelve el número de conexiones al puerto que se le pase.

Activamos los cambios reiniciando el servicio zabbix-agent. Y probamos que la instrucción funciona correctamente llamando al parámetro por línea de órdenes:
[root@host zabbix]# zabbix_agentd --test netstat.port[80]
netstat.port[80]                            [t|4]

En caso de no estar bien configurado la respuesta sería
[root@host zabbix]# zabbix_agentd --test netstat.port[80]
netstat.port[80]                            [t|NOT_SUPPORTED]

Ya tenemos la "parte cliente" hecha. Ahora toca crear una plantilla que podamos asociar a nuestros hosts para que se llame a ese parámetro de usuario.

Vamos a la sección de plantillas dentro de la administración de Zabbix y creamos una nueva plantilla. Añadimos tantos items como puertos queramos monitorizar. Por ejemplo para el puerto HTTP usaríamos la siguiente definición de item:

netstat.port[80]

Añadimos los items que queramos y por último podemos incluso añadir un gráfico a la plantilla añadiendo todos los monitores de netstat.

Una vez creada la plantilla hay que enlazarla al host que queremos monitorizar y que debe tener en su fichero de configuración la definición del userparameter. Activamos los items para que comience su monitorización y listo.

Archivo XML de la plantilla:

    2.0
    2014-03-20T12:10:04Z
    
        
            Templates
        
    
    
        
    
    
        
            Connections (netstat)
            500
            200
            0.0000
            100.0000
            1
            1
            0
            1
            0
            0.0000
            0.0000
            0
            0
            0
            0
            
                
                    0
                    0
                    00DD00
                    0
                    2
                    0
                    
                        Template_Netstat
                        netstat.port[80]
                    
                
                
                    1
                    0
                    BBBB00
                    0
                    2
                    0
                    
                        Template_Netstat
                        netstat.port[43]
                    
                
                
                    2
                    0
                    CC00CC
                    0
                    2
                    0
                    
                        Template_Netstat
                        netstat.port[3306]
                    
                
                
                    3
                    0
                    0000CC
                    0
                    2
                    0
                    
                        Template_Netstat
                        netstat.port[1251]
                    
                
            
        
    

No hay comentarios: