viernes, 19 de junio de 2009

Traps con Nagios - Icinga

Instalar el agente Net-SNMP en el Servidor.

Como usuario root


apt-get install snmpd
ó
yum install snmpd


Editar /etc/snmp/snmptrapd.conf

doNotLogTraps yes
traphandle default /usr/local/nagios/libexec/traps.sh


Iniciar el demonio receptor de traps

snmptrapd


Como usuario nagios

Editar /usr/local/nagios/libexec/traps.sh

#!/bin/sh
read host
read ip
vars=

while read oid val
do
oid=$(echo $oid | cut -d ':' -f 3)
if [ "$vars" = "" ]
then
vars="$oid = $val"
else
vars="$vars, $oid = $val"
fi
done

ip=$(echo $ip | cut -f 2 -d ' ' | cut -f 1 -d ':' | cut -f 1 -d ']' | cut -f 2 -d '[')
/usr/bin/printf "[%lu] PROCESS_SERVICE_CHECK_RESULT;$ip;TRAP;1;WARNING ($vars)\n" `date +%s` > /usr/local/nagios/var/rw/nagios.cmd


Otorgar privilegios de ejecución
chmod a+x traps.sh

Editar /usr/local/nagios/libexec/traps_ok.sh

#!/bin/bash
echo "Se han limpiados los traps. ("`date`")"
exit 0


Otorgar privilegios de ejecución
chmod a+x traps_ok.sh

Crear el comando en command.cfg

define command{
command_name traps_ok
command_line $USER1$/traps_ok.sh
}


Definir un Servicio llamado TRAP, de forma pasivo

define host{
use Host-Servidores
host_name PruebaTrap
address xxx.xxx.xxx.xxx
notes Servidor de Prueba
}

define service{
use Service-Servidores
service_description TRAP
host_name PruebaTrap
check_command traps_ok
notes Servicio de Trap
is_volatile 1
active_checks_enabled 0
passive_checks_enabled 1
}


Notas:

Se asume que la instalación de Nagios se realizo desde las fuentes en la carpeta /usr/local/nagios/

Se puede mejorar la forma como se muestran los trap utilizando snmtt .

Para limpiar la alarma de los trap se debe seleccionar la opción “Re-schedule the next check of this service” y marcar el check “Force Check” y presionar la opción “Commit”.

Para Icinga cambiar las rutas de nagios por icinga.

martes, 9 de junio de 2009

Trabajando con GDChart

En estos días estaba tratando de crear unas gráficas provenientes de un archivo .csv para obtener los datos y a la final crear un archivo .png.

Existe una excelente herramienta para php que realiza maravillosas gráficas: pChart, sin embargo necesitaba una solución para trabajar con C/C++ y para ello estoy utilizando GDChart, la cual es una librería que nos permite realizar gráficas sencillas.

A continuación un ejemplo de como realizar una gráfica sencilla con lenguaje C/C++ en debian/ubuntu.

apt-get install libgdchart-gd2-xpm-dev libgdchart-gd2-xpm


Crear un archivo ejemplo.c


#include <stdio.h>
#include <gdc.h>
#include <gdchart.h>
#include <gdcpie.h>

main()
{
float a[3][10] = {{10,12,50,30,10,78,12,50,30,10},{12,50,30,10,78,12,50,30,10,45},{50,30,10,78,12,50,30,10,45,6}};

char *t[10] = { "1", "", "", "", "", "", "","","","F"};
unsigned long sc[2] = { 0xFF8080, 0x8080FF };

GDC_BGColor = 0xFFFFFFL; /* backgound color (white) */
GDC_LineColor = 0x000000L; /* line color (black) */
GDC_SetColor = &(sc[0]); /* assign set colors */

GDC_image_type = GDC_PNG;
/* ----- call the lib ----- */
GDC_out_graph( 800, 220, /* short width, height */
stdout, /* FILE* open FILE pointer */
GDC_LINE, /* GDC_CHART_T chart type */
10, /* int number of points per data set */
t, /* char*[] array of X labels */
3, /* int number of data sets */
(float*)a, NULL ); /* float[] data set 1 */

return 0;
}

Luego compilar y aqui viene la parte importante:

gcc ejemplo.c -o ejemplo -lgdc -D HAVE_LIBFREETYPE

Por ultimo ejecutar el archivo y colocarlo en un archivo .png

./ejemplo > salida.png



Esta librería la pienso utilizar momentáneamente, pero trataré de portar pChart a C++.

Nota, estoy trabajando ahora en la parte para leer el archivo csv...