El add-on NDOUtils permite almacenar la configuración, tests y resultados de Nagios en una base de datos MySQL.
De momento MySQL no es el backend de Nagios, siendo archivos planos. Pero este proyecto permite mantener una estructura de datos sobre la que se pueden alimentar otros proyectos como NagVis. Se estima que en el futuro la plataforma estará sobre MySQL/Postgres con lo que todos estos addons no sólo serán compatibles sino que además irán sobre la base de datos backend real.
1.- Compilamos la aplicación:
cd ndoutils-1.4b7
./configure --prefix=/usr/local/nagios --enable-mysql --with-mysql-lib=/usr/local/mysql/lib
make
2.- Copiamos los binarios y ficheros de configuración:
cp -p src/ndomod-3x.o /usr/local/nagios/bin/ndomod.o
cp -p src/ndo2db-3x /usr/local/nagios/bin/ndo2db
cp -p config/ndo2db.cfg /usr/local/nagios/etc/ndo2db.cfg
cp -p config/ndomod.cfg /usr/local/nagios/etc/ndomod.cfg
3.- Creamos la base de datos nagios y la inicializamos con el script installdb:
cd db
mysql -u root -p
mysql> create database nagios;
mysql> CREATE USER nagios@localhost IDENTIFIED BY 'nagios123';
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT USAGE ON *.* TO nagios@localhost IDENTIFIED BY 'nagios123' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON nagios.* TO nagios@localhost WITH GRANT OPTION ;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
./installdb -u root -p '' -h localhost -d nagios
4.- Editaremos los archivos de configuración ndo2db.cfg y ndomod.cfg:
vi ndomod.cfg
instance_name=default
output_type=unixsocket
output=/opt/nagios/var/ndo.sock
tcp_port=5668
output_buffer_items=5000
buffer_file=/opt/nagios/var/ndomod.tmp
file_rotation_interval=14400
file_rotation_timeout=60
reconnect_interval=15
reconnect_warning_interval=15
data_processing_options=-1
config_output_options=2
vi ndo2db.cfg
ndo2db_user=nagios
ndo2db_group=nagios
socket_type=unix
socket_name=/opt/nagios/var/ndo.sock
tcp_port=5668
db_servertype=mysql
db_host=localhost
db_port=3306
db_name=nagios
db_prefix=nagios_
db_user=nagios
db_pass=nagios123
max_timedevents_age=1440
max_systemcommands_age=10080
max_servicechecks_age=10080
max_hostchecks_age=10080
max_eventhandlers_age=44640
debug_level=0
debug_verbosity=1
debug_file=@localstatedir@/ndo2db.debug
max_debug_file_size=1000000
5- Añadiremos la configuración de broker en Nagios para que haga uso del módulo ndomod:
vi nagios.cfg
event_broker_options=-1
broker_module=/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg
6.- A continuación arrancamos el demonio NDO2DB que montará el socket "/usr/local/nagios/var/ndo.sock". Si aparece un error es porque puede haber quedado el socket creado anteriormente y no se haya borrado. Borraremos el archivo y arrancaremos de nuevo.
/usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg
Could not bind socket: Address already in use
rm /usr/local/nagios/var/ndo.sock
/usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg
7.- Cuando reiniciemos Nagios aparecerán nuevos logs en "/usr/local/nagios/var/nagios.log". Veremos si NDOMOD ve el "sumidero" de datos (el ndo.sock).
Nota: si el proceso ndo2db estuviera parado y el broker arrancado, este acumula items que debe traspasar a la base de datos...
[1208969593] Nagios 3.0.1 starting... (PID=5397)
[1208969593] Local time is Wed Apr 23 18:53:13 CEST 2008
[1208969593] LOG VERSION: 2.0
[1208969593] ndomod: NDOMOD 1.4b7 (10-31-2007) Copyright (c) 2005-2007 Ethan Galstad (nagios@nagios.org)
[1208969593] ndomod: Successfully connected to data sink. 0 queued items to flush.
[1208969593] Event broker module '/opt/nagios/bin/ndomod.o' initialized successfully.
Si hubiera problemas con la componente NDO2DB podemos configurar en el "ndo2db.cfg" las opciones de debug debug_level, debug_verbosity y debug_file.
Al intentar compilar NDOUtils en Solaris nos devuelve varios errores del tipo:
gcc -g -O2 -DHAVE_CONFIG_H -D BUILD_NAGIOS_2X -o ndo2db-2x ndo2db.c
dbhandlers-2x.o io.o utils.o db.o -lnsl -lsocket -lmysqlclient -lm
Undefined first referenced
symbol in file
asprintf dbhandlers-2x.o
ld: fatal: Symbol referencing errors. No output written to ndo2db-2x
collect2: ld returned 1 exit status
Para corregir este error añadimos al fichero "src/db.c" al principio lo siguiente:
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define CHUNKSIZE 512
int vasprintf(char **ret, const char *fmt, va_list ap)
{
int chunks;
size_t buflen;
char *buf;
int len;
chunks = ((strlen(fmt) + 1) / CHUNKSIZE) + 1;
buflen = chunks * CHUNKSIZE;
for (;;) {
if ((buf = malloc(buflen)) == NULL) {
*ret = NULL;
return -1;
}
len = vsnprintf(buf, buflen, fmt, ap);
if (len >= 0 && len < (buflen - 1)) {
break;
}
free(buf);
buflen = (++chunks) * CHUNKSIZE;
/*
* len >= 0 are required for vsnprintf implementation
that
* return -1 of buffer insufficient
*/
if (len >= 0 && len >= buflen) {
buflen = len + 1;
}
}
*ret = buf;
return len;
FILE *fp;
*ret = NULL;
}
int asprintf(char **ret, const char *fmt, ...)
{
int len;
va_list ap;
va_start(ap, fmt);
len = vasprintf(ret, fmt, ap);
va_end(ap);
return len;
}
Y en el fichero "src/io.c" añadimos:
#define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) + strlen ((ptr)->sun_path))
Comentarios recientes
8 weeks 1 day ago
22 weeks 2 days ago
27 weeks 5 days ago
36 weeks 3 days ago
44 weeks 2 days ago
51 weeks 5 days ago
1 year 3 days ago
1 year 12 weeks ago
1 year 12 weeks ago
1 year 15 weeks ago