SNMP Traps y Zabbix

Buenas,

Hoy voy a explicar cómo configurar la recepción de traps en zabbix (que por defecto no es capaz de recepcionar y traducirse en datos para los items) de una manera fácil.

Primero tenemos que asegurarnos de tener el demonio de snmptrad arrancado:

#/etc/init.d/snmptrapd status
snmptrapd (pid 49389) is running…

Este demonio tiene un fichero de configuración en /etc/snmp/snmptrapd.conf:

cat /etc/snmp/snmptrapd.conf
# Example configuration file for snmptrapd
# No traps are handled by default, you must edit this file!
#Quitamos la autorización, que cualquiera nos pueda mandar traps
disableAuthorization yes
outputOption na

#Configuramos el script que se va a ejecutar cuando recibamos un trap
traphandle default /etc/snmp/lanza_trap2.sh

El script que ejecutamos para “traducir” los traps que nos lleguen a idioma entendible por Zabbix puede ser algo parecido a esto:

cat /etc/snmp/lanza_trap2.sh
#!/bin/bash
ZABBIX_SERVER=”127.0.0.1″;
ZABBIX_PORT=”10051″;
ZABBIX_SENDER=”/zabbix/zabbix-server/sbin/zabbix_sender”;
KEY=”trapsnmp”;
# define several variables, the name is not so important
read host
read ip
read uptime
read oid
read value
# Si queremos logear los resultados en algún momento para buscar errores activamos lo siguiente
#echo “############################################INICIO TRAP #################################################” >> /tmp/trap_messages.log
#echo “El host es: $host” >> /tmp/trap_messages.log
#echo “Su ip es: $ip” >> /tmp/trap_messages.log
#echo “El uptime: $uptime” >> /tmp/trap_messages.log
#echo “Su oid es: $oid” >> /tmp/trap_messages.log
#echo “El valor del mensaje es: $value <—————–” >> /tmp/trap_messages.log

# Source and destination IP address returned by the trap
sourceIp=`echo $host|cut -f2 -d ‘[‘ | cut -f1 -d ‘]’`
destinationIp=`echo $host|cut -f3 -d ‘[‘ | cut -f1 -d ‘]’`

# Trap OID, Item OID and Trap OID identifier
trapOid=`echo $oid|cut -f2 -d’ ‘`
itemOid=`echo $value|cut -f1 -d’ ‘`
specOid=`echo $trapOid|cut -f2- -d’.’`
value=`echo $value|cut -f2- -d’ ‘`
#echo “###########################################################” >> /tmp/trap_messages.log
#echo “–>> Ahora el valor es : $value <————————” >> /tmp/trap_messages.log
# Time
uptime=`echo $uptime|cut -f2 -d ‘ ‘`
days=`echo $uptime|cut -f1 -d ‘:’`
hours=`echo $uptime|cut -f2 -d ‘:’`
minutes=`echo $uptime|cut -f3 -d ‘:’`
seconds=`echo $uptime|cut -f4 -d ‘:’`
str=”Source IP: $sourceIp, TRAP Description: ${oid2desc[$specOid]}, TRAP OID: $trapOid, ITEM OID: $itemOid, Uptime: $days days $hours h $minutes m $seconds s, Returned value: $value”

$ZABBIX_SENDER -z $ZABBIX_SERVER -p $ZABBIX_PORT -s “$host” -k “$KEY” -o “$str”

Con esto hemos conseguido dos cosas, la primera traducir los traps, la segunda mandar los valores al host que corresponda directamente.

Para que un host pueda recibir valores de este tipo a sus items lo suyo es crear una template con un solo item llamado “trapsnmp” según el script de ejemplo y aplicarla a los hosts susceptibles de recibir traps.

Como apunte, el script de ejemplo es muy sencillo, y puede ser ampliado enormemente. Si ponemos la imaginación a volar podemos pensar en consultas a la BBDD dentro del script para sacar el hostname, creación del item de forma automática por medio de la API… etc. 😉

Espero que ayude!

Anuncios

2 thoughts on “SNMP Traps y Zabbix

  1. Podrias por favor indicarme la configuración del template y los items en la GUI de este script, lo otro es no encuentro la ruta de Zabbix_Sender, y que pasa si no tengo este log: /tmp/trap_messages.log

    Uso Zabbix Server 2.2.10

    Gracias,

    Le gusta a 1 persona

  2. Hola,
    No hay template para esto, lo que tienes que configurar en realidad es un item que se llame “trapsnmp” en los hosts que quieras que llegue la información de traps.
    Para buscar el zabbix_sender, lo mejor es hacer:
    host~# updatedb
    host~# locate zabbix_sender
    De todas formas el zabbix_sender siempre está en el mismo directorio de los binarios de zabbix, con el zabbix_agent y el zabbix_agentd.
    El log del trapper no lo encuentras seguramente porque no se ha generado todavía, como puedes ver en el script si quieres loguear los errores tienes que descomentar las líneas donde se genera, por ejemplo aquí;

    # Si queremos logear los resultados en algún momento para buscar errores activamos lo siguiente
    #echo “############################################INICIO TRAP #################################################” >> /tmp/trap_messages.log

    Espero haberte ayudado! si tienes cualquiér otra duda me comentas.
    SAludos.

    Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s