All in One Nagios

Posted on Posted in Nagios

Bueno este manual que os traigo está dirigido a responsables de Sistemas que quieren crear un sistema de monitorización desde cero. Aprovecho la oportunidad que me ha dado la Universidad de Navarra al encargarme la instalación y configuración de su nuevo SMU (Sistema de monitorización Unificado), el cual consta de Nagios + plugins, Nagios HA, NdoUtils, Pnp4Nagios,  Nagvis, Smokeping y MRTG.

  • Nagios –> Es la base del sistema de monitorización, el encargado de realizar los chequeos usando los plugins que nosotros le instalemos.
  • Nagios HA –> Hay dos servidores que realizan los mismos chequeos pero solo uno, el primario, es el que tiene habilitadas las notificaciones por defecto. El segundo nodo las tiene des-habilitadas, las cuales se habilitarán de forma automática al detectar que el nodo primario ha caído y volviendo a su estado original (off) cuando vuelve a recuperarse.
  • NdoUtils –> Utilidades para introducir los datos a una BD Mysql para poder así “jugar” con los datos almacenados.
  • Pnp4Nagios –> Sistema de gráficas en tiempo real, así como histórico para poder detectar posibles problemas que pueden surgir a corto plazo.
  • Nagvis–> Cuando vi este programa me encanto, es un sistema basado en templates o mapas que nosotros creamos a nuestro gusto, los cuales por ejemplo pueden ser salas de servidores, infraestructura de red, etc; pudiendo ver de un vistazo el estado de nuestra infraestructura de modo gráfico.

Este manual puede considerarse como nivel Medio-Alto.

Instalación de Apache:

Es una instalación normal de Apache lo único que hay que tener en cuenta es que vamos a habilitar el ldap.

-Librerías para Apache: apr, apr-util (ver 1.3.10) , mod_auth_cas

Este será el configure a lanzar para crear el configure correctamente, podemos introducirlo en un script para tenerlo así documentado. Posteriormente tendremos que compilarlo “make” e instalarlo “make install

./configure --prefix=/usr/local/etc2/httpd \
--disable-autoindex --disable-imap --disable-userdir --disable-status --disable-actions \
--disable-asis --enable-modules=ssl --enable-ssl --with-ssl \
--with-ldap --enable-ldap --enable-authnz-ldap \
--with-apr=/usr/local/etc2/apr --with-apr-util=/usr/local/etc2/apr-util

– Instalación de módulos con APXS:

/usr/local/etc2/apache22/bin/apxs -cia modules/generators/mod_autoindex.c
/usr/local/etc2/apache22/bin/apxs -cia modules/mappers/mod_speling.c
/usr/local/etc2/apache22/bin/apxs -cia modules/mappers/mod_rewrite.c
/usr/local/etc2/apache22/bin/apxs -cia modules/metadata/mod_headers.c
/usr/local/etc2/apache22/bin/apxs -cia modules/generators/mod_status.c

**Modulo LDAP

No es necesario añadir el módulo ldap o ldap_authz en el httpd.conf, el propio apache 2.2.17 lo incluye.

– Ajuste script de Inicio:

more /etc/init.d/apache22

more /etc/init.d/apache22
-------------------------------------
#!/bin/sh
#
# Inicio para el servidor web apache
#
# chkconfig: 345 70 69
# description: Apache is a World Wide Web server.  It is used to serve \
#              HTML files and CGI.
# processname: httpd
# pidfile: /var/run/apache.pid
# config: /etc/httpd/conf/apache.conf
# Source function library.

HTTPD=/usr/local/etc2/apache22/bin/apachectl
MNT_FLAG=/usr/local/etc2/httpd/CTI_FLAG

if [ ! -f $MNT_FLAG ] ; then
        exit 0
fi

RETVAL=0

start() {
                echo -n "Starting Apache 2.2.14: "
                $HTTPD start
                RETVAL=$?
                [ $RETVAL -eq 0 ] && touch /var/lock/subsys/apache22
                echo
                return $RETVAL
}
stop() {
                echo -n "Shutting down Apache 2.2.14: "
               $HTTPD stop
               RETVAL=$?
               [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/apache22
               echo
               return $RETVAL
}
case "$1" in
start)
        start
        ;;

stop)
        stop
        ;;
*)
        echo $"Usage: $0 {start|stop}"
        exit 1

esac
exit $?
exit $RETVAL

Habilitamos el arranque automático de apache en los niveles 3, 4 y 5:

chkconfig –-level 345 apache on

Instalación PHP (necesitamos mbstring):

Instalamos los siguientes módulos:

yum install php-mysql.x86_64 mysql-devel.x86_64 php-mbstring

Instalamos MyCrypt y Mhash

wget http://downloads.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
wget http://downloads.sourceforge.net/project/mcrypt/Libmcrypt/Production/libmcrypt-2.5.7.tar.gz
wget http://downloads.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.bz2
tar xvfz libmcrypt-2.5.7.tar.gz
./configure
make
make install
tar xvfj mhash-0.9.9.9.tar.bz2
./configure
make
make install
tar xvfz mcrypt-2.6.8.tar.gz
export LD_LIBRARY_PATH=/usr/local/lib
./configure --with-libmcrypt-prefix=/usr/local
make
make install

Lanzamos el configure de PHP,

ATENCIÓN si nuestra máquina es de 64 bits tendremos que agregar la opción “–with-libdir=lib64

./configure --prefix=/usr/local/etc2/apache22/php --with-apxs2=/usr/local/etc2/apache22/bin/apxs \
--with-config-file-path=/usr/local/etc2/apache22/conf/ --disable-ipv6 --with-openssl --with-mysql=/usr/bin \
--with-libdir=lib64 --with-mcrypt=/usr/local/bin --enable-threadsafe --with-gd --with-zlib-dir --with-jpeg-dir \
--with-mhash=/usr/local/bin --enable-soap --with-xsl=/usr/include/libxslt --enable-mbstring

Una vez instalado (make && make install) podemos comprobar que PHP está funcionando correctamente, para ello creamos un php en el directorio web que contenga lo siguiente:

<?php phpinfo();
phpinfo(INFO_MODULES);?>

·· SI NO CARGA MBSTRING AÑADIRLO AL php.ini

extension=php_mbstring.dll

Instalación Nagios CORE:

Antes de instalar Nagios tenemos que crear los usuarios y grupos pertienentes:

#/usr/sbin/useradd -m -s /bin/bash nagios
#passwd *****
#/usr/sbin/groupadd nagios
#/usr/sbin/usermod -G nagios nagios
#/usr/sbin/groupadd nagcmd
#/usr/sbin/usermod -a -G nagcmd nagios
#/usr/sbin/usermod -a -G nagcmd www-data

Nos aseguramos que la ruta base de Nagios tiene los permisos correctos:

root@localhost # chown nagios:nagios -R /usr/local/etc2/nagios
nagios-core

Instalación de Nagios, crearemos un script que contendrá la configuración de instalación:

tar xvfz nagios-3.2.3.tar.gz 
./configure --prefix=/usr/local/etc2/nagios \
--with-httpd_conf=/usr/local/etc2/apache22/conf --with-cgiurl=/nagios/cgi-bin --with-htmurl=/nagios \
--with-nagios-user=nagios --with-nagios-group=nagios --with-command-group=nagcmd

Para luego seguidamente:

make all
make install
make install-init
make install-config
make install-commandmode
Configuración core

Editamos el fichero para poner email y datos del administrador:

[root@monitordes nagios-3.2.3]# vim /usr/local/etc2/nagios/etc/objects/contacts.cfg
[root@monitordes nagios-3.2.3]# vim /usr/local/etc2/nagios/etc/cgi.cfg

Creamos el nagios.conf para apache, situándonos en el directorio de los binarios de instalación:

[root@monitordes nagios-3.2.3]# /usr/bin/install -c -m 644 sample-config/httpd.conf /usr/local/etc2/httpd/conf/nagios.conf

Creamos el usuario nagiosadmin para poder logearnos, ni no tenemos LDAP, en la interfaz web

[root@monitordes nagios-3.2.3]# /usr/local/etc2/httpd/bin/htpasswd -c /usr/local/etc2/nagios/etc/htpasswd.users nagiosadmin

Configuramos el inicio automático:

chkconfig --add nagios 
chkconfig --level 345 nagios on
nagios-plugins:

Descomprimimos los plugins e instalamos:

tar xvfz nagios-plugins-1.4.13.tar.gz
cd nagios-plugins-1.4.13
nagios-plugins-1.4.13 # ./configure --prefix=/usr/local/etc2/nagios/libexec --with-nagios-user=nagios --with-nagios group=nagios
nagios-plugins-1.4.13# make all
nagios-plugins-1.4.13 # make install
nagios-plugins-1.4.13 # make install-root

Necesitaremos las utilidades snmp para los chequeos pertinentes:

yum install net-snmp-utils

RRDTOOL (necesario para pnp4nagios)

Las RRDTOOL es una especie de BD circular como su propio nombre índica Round Robind Database tool

Necesitaremos previamente los siguientes módulos:

yum install libxml libxml-devel
yum install pango
yum install pango-devel
cd rrdtool-1.4.5

Este sería el configure pertinente:

./configure --disable-tcl --prefix=/usr/local/etc2/rrdtool
make
make install

MRTG:

Tan sencillo como:

yum install gd
yum install gd-devel.x86_64
cd /usr/local/etc/NAGIOS/
unzip mrtg-2.17.2.zip
cd mrtg-2.17.2
(./configure --prefix=/usr/local/etc2/mrtg)
make
make install

Posteriormente tenemos que ajustar el mrtg.cfg para que cargue las librerías de 64bits

/usr/local/etc2/httpd/htdocs/mrtg/cfg/mrtg.cfg
LibAdd: /usr/local/etc2/rrdtool/lib/perl/5.8.8/x86_64-linux-thread-multi

SMOKEPING (Necesita RRDTool y fping):

Instalamos el fping y smokeping:

cd fping-2.4b2_to4-ipv6
./configure
make
make install
tar xvfz smokeping-2.4.2.tar.gz
cp -R smokeping-2.4.2 /usr/local/etc2/smokeping

Añadimos los siguientes módulos con CPAN, instalar CPAN si no lo tenemos instalado:

cpan -i Net::Telnet
cpan -i Net::DNS
cpan -i Net::LDAP
cpan -i Authen::Radius

FastCGI (enlace descarga):

cd <mod_fastcgi_dir&gt
cp Makefile.AP2 Makefile
vim Makefile → top_dir = /usr/local/etc2/apache22
make
make install

Ahora añadimos el módulo a la configuración de nuestro Apache:

vim /usr/local/etc2/apache22/conf/httpd.conf → LoadModule fastcgi_module modules/mod_fastcgi.so
 

NRPE (equipos a monitorizar + servidor):

Esto será necesario hacerlo en el servidor y en los host linux que queramos monitorizar:

cd nrpe-2.12
./configure –prefix=/usr/local/etc2/nagios
make all
make install-plugin
make install-daemon
make install-daemon-config
make install-xinetd

Ahora permitimos el acceso al servidor Nagios que realiza la monitorización, que será en el caso del propio servidor la “localhost” pero en los otros hosts a monitorizar sera la que corresponda.

vim /etc/xinetd.d/nrpe → only_from = 127.0.0.1 <nagios_ip_address>

Tenemos que agrear a los servicios el demonio nrpe y el puerto:

vim /etc/services → nrpe 5666/tcp # NRPE

Reiniciamos el demonio:

/etc/init.d/xinetd restart

Instalación de MYSQL (mediante yum, cliente + servidor):

Creamos los usuarios y grupos:

useradd -g mysql mysqlgroupadd mysql

Instalamos mediante yum (centos) apt-get (debian)

yum install MySQL-server.x86_64 MySQL-client.x86_64

Configuramos el autoarranque:

service mysqld start
chkconfig –level 345 mysqld on

Ponemos el password de ROOT de Mysql:

mysqladmin -u root password 'contraseñadificil'

Creamos la BD nagios y asignamos los permisos oportunos, como vais a poder ver el permiso de acceso será por nombre del equipo “nagios.snaider.dom” y no por ip o localhost:

mysql -u root -p
mysql>create database nagios
mysql>create user 'nagios'@'nagios.snaider.dom'
mysql>grant usage on *.* to nagios@nagios.snaider.dom identified by 'nagios'
mysql>grant all privileges on nagios.* to nagios@nagios.snaider.dom

NDOUTILS:

Necesitaremos el conector para poder establecer la conexión a Mysql, para ello usamos DBD-MYSQL (DBD-mysql-4.019)

tar xvzf DBD-mysql-4.019.tar.gz
cd DBD-mysql-4.019
perl Makefile.PL
make
make install

Ahora ya estamos listos para instalar las NdoUtils:

Realizamos limpieza “make distclean” y extraemos:

tar xzf ndoutils-1.4b9.tar.gz

Realizamos el configure:

./configure --prefix=/usr/local/etc2/nagios/ --enable-mysql --disable-pgsql --with-ndo2db-user=nagios --with-ndo2db-group=nagios --with-mysql-lib=/usr/lib64/mysql
make all

Entramos en el directio “src” y copiamos los siguientes binarios:

cd src
cp log2ndo file2sock ndo2db-3x sockdebug ndomod-3x.o /usr/local/etc2/nagios/bin/

Lo mismo con los archivos de configuración:

cd config
cp ndomod.cfg-sample ndo2db.cfg-sample /usr/local/etc2/nagios/etc/

Nos aseguramos que los permisos estén bien, sino tendremos problemas a la hora de ejecutar:

chown -R nagios:nagios /usr/local/nagios/bin
chown -R nagios:nagios /usr/local/nagios/etc

Lanzamos el instalador que nos creará la estructura en nuestra BD nagios, para ello:

./installdb -u nagios -p XXXXXX -h nagios.snaider.dom -D nagios
mysql -h nagios.snaider.dom -u nagios -D nagios -p
mysql> alter table nagios_configfilevariables add index (instance_id, configfile_id);
mysql> alter table nagios_configfilevariables drop index instance_id;

Ahora vamos a ajustar los archivos de configuración que hemos copiado anteriormente a “/usr/local/etc2/nagios/etc” ndo2db.cfg ndomod.cfg y nagios.cfg

Tener en cuenta que el socket usado debe ser el mismo, ya que sino ndo2db y ndomod no se comunicaran.

  • nagios.cfg
event_broker_options=-1
broker_module=/usr/local/etc2/nagios//bin/ndomod-3x.o config_file=/usr/local/etc2/nagios//etc/ndomod.cfg
  • ndo2db.cfg

Aquí lo único que tenemos que tener en cuenta es el nombre y dirección del socket así como los datos de conexión a la BD Mysql.

Bien y ahora ejecutamos el demonio y reiniciamos nagios:

/usr/local/etc2/nagios/bin/ndo2db-3x -c /usr/local/etc2/nagios/etc/ndo2db.cfg

Para asegurarnos que esta corriendo podemos ver en los procesos , que hay dos demonios ndo2db, esto es normal, si tenemos puesto el “debug_level= -1” podremos ver como esta escribiendo la información a MYSQL.

nagios 3385 0.0 0.1 21464 544 ? Ss 17:03 0:00 /usr/local/etc2/nagios/bin/ndo2db-3x -c /usr/local/etc2/nagios/etc/ndo2db.cfg
nagios 3437 0.0 0.3 33936 1676 ? S 17:03 0:01 /usr/local/etc2/nagios/bin/ndo2db-3x -c /usr/local/etc2/nagios/etc/ndo2db.cfg
nagios 3440 0.0 0.2 30012 1224 ? Ssl 17:03 0:00 /usr/local/etc2/nagios/bin/nagios -d /usr/local/etc2/nagios/etc/nagios.cfg

NAGVIS:

Instalamos estos módulos necesarios:

yum install expat freetype gd fontconfig urw-fonts glib libpng pango zlib GTS

También será necesario Graphviz para Nagvis (WEB):

Descargamos de la web y configure+make+make install

Bueno ahora la instalación de Nagvis, la cual es muy sencilla:

cd nagvis-1.5.9
chmod u+x install.sh
./install.sh → Seguir el asistente, si falta alguna librería introducirla con yum.

Ahora apuntamos correctamente a nuestra BD nagios:

 vim /usr/local/etc2/nagvis/etc/nagvis-ini.php

Para poder editar mapas tenemos que tener permisos de administración, para asignarselos a un usuario específico habilitamos el acceso al usuario nagiosadmin, ya que es este el que por defecto  tiene permisos administrativos, para ello creamos una contraseña, si no lo hemos hecho anteriormente y la introducimos en el fichero que usa apache para validar los usuarios:

htpasswd -n nagiosadmin
/usr/local/etc2/nagios/etc/htpasswd.users

Entramos en la interfaz web con este usuario:

http://XXXXXXXXXX/nagvis/frontend/wui/index.php

Una vez dentro en la barra superior podemos asignar los permisos que deseemos para los nuevos usuarios, los cuales pueden ser los de LDAP o lo que creemos nosotros en dicho fichero.

Si algo no funciona correctamente asegurarnos que los permisos son correctos:

mkdir /usr/local/etc2/nagvis/var/tmpl/compile/
chown www-data.www-data /usr/local/etc2/nagvis -R
chmod 664 /usr/local/etc2/nagvis/etc/nagvis.ini.php
chmod 775 /usr/local/etc2/nagvis/etc/maps
chmod 664 /usr/local/etc2/nagvis/etc/maps/*
chmod 775 /usr/local/etc2/nagvis/etc/automaps
chmod 664 /usr/local/etc2/nagvis/etc/automaps/*
chmod 775 /usr/local/etc2/nagvis/share/userfiles/images/maps
chmod 664 /usr/local/etc2/nagvis/share/userfiles/images/maps/*
chmod 775 /usr/local/etc2/nagvis/var
chmod 664 /usr/local/etc2/nagvis/var/*
chmod 775 /usr/local/etc2/nagvis/var/tmpl/cache
chmod 664 /usr/local/etc2/nagvis/var/tmpl/cache/*
[root@nagios conf]# mkdir /var/lib/php/session
[root@nagios conf]# chown www-data.www-data /var/lib/php/session

A todo esto tenemos que incluir la configuración de Nagvis en Apache:

Copiar contenido de apache-sample.conf del directorio etc de nagvis y ajustarlo en http.conf de apache

Alias /nagvis "/usr/local/etc2/nagvis/share"

Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
# To enable Nagios basic auth on NagVis use the following options
# Just uncomment it. Maybe you need to adjust the path to the
# Auth user file.
#
# If you use the NagVis internal auth mechanism based on the web
# for you won't need this.
#
#AuthName "NagVis Access"
#AuthType Basic
#AuthUserFile @NAGIOS_PATH@/etc/htpasswd.users
#Require valid-user
AuthName "Acceso a Nagvis"
AuthType CAS
AuthLDAPURL "ldap://ldap.unav.es/dc=unav,dc=es?unavnetid"
require ldap-group cn=unav.web.si,ou=groups,o=people,dc=unav,dc=es
# With installed and enabled mod_rewrite there are several redirections
# available to fix deprecated and/or wrong urls. None of those rules is
# mandatory to get NagVis working.

RewriteEngine On
RewriteBase /nagvis
# Use mod_rewrite for old url redirection even if there are php files which
# redirect the queries itselfs. In some cases the mod_rewrite redirect
# is better than the php redirect.
RewriteCond %{REQUEST_URI} ^/nagvis(/index\.php|/|)(\?.*|)$
RewriteRule ^(index\.php|)(\?.*|)$ /nagvis/frontend/nagvis-js/$1$2 [R=301,L]
RewriteCond %{REQUEST_URI} ^/nagvis/config\.php.*$
RewriteRule ^config\.php(.*) /nagvis/frontend/wui/$1 [R=301,L]
# Redirect old regular map links
RewriteCond %{REQUEST_URI} ^/nagvis/frontend/nagvis-js
RewriteCond %{QUERY_STRING} map=(.*)
RewriteRule ^(.*)$ /nagvis/frontend/nagvis-js/index.php?mod=Map&act=view&show=%1 [R=301,L]
# Redirect old wui map links
RewriteCond %{REQUEST_URI} ^/nagvis/frontend/wui
RewriteCond %{QUERY_STRING} map=(.*)
RewriteRule ^(.*)$ /nagvis/frontend/wui/index.php?mod=Map&act=edit&show=%1 [R=301,L]
# Redirect old rotation calls
RewriteCond %{REQUEST_URI} ^/nagvis/frontend/nagvis-js
RewriteCond %{QUERY_STRING} !mod
RewriteCond %{QUERY_STRING} rotation=(.*)
RewriteRule ^(.*)$ /nagvis/frontend/nagvis-js/index.php?mod=Rotation&act=view&show=%1
[R=301,L]

PNP4Nagios:

**** Si resultara necesario (por propia experiencia):

Pre-requisitos

glib-2.12.12ftp://ftp.gtk.org/pub/glib/2.12/

yum install pango.x86_64 pango-devel.x86_64

rrdtool-1.4.5 http://oss.oetiker.ch/rrdtool/pub

tar -zxvf rrdtool-1.x.xx.tar.gz

cd rrdtool-1.x.xx

./configure && make && make install

# cd perl-shared # Version 1.0.x

cd bindings/perl-shared # Version 1.2.x

make clean

perl Makefile.PL && make && make install

echo “/usr/local/rrdtool-1.x.xx/lib” >> /etc/ld.so.conf

ldconfig

Instalación PNP4NAGIOS:

./configure –with-rrdtool=/usr/local/etc2/rrdtool/bin/rrdtool –prefix=/usr/local/etc2/pnp4nagios \

–with-nagios-user=nagios –with-nagios-group=nagios \

–with-httpd-conf=/usr/local/etc2/apache22/conf –with-base-url=/nagios/pnp4nagios

*** Configuration summary for pnp4nagios-0.6.13 05-19-2011 ***

General Options:

————————- ——————-

Nagios user/group: nagios nagios

Install directory: /usr/local/etc2/pnp4nagios

HTML Dir: /usr/local/etc2/pnp4nagios/share

Config Dir: /usr/local/etc2/pnp4nagios/etc

Location of rrdtool binary: /usr/local/etc2/rrdtool/bin/rrdtool Version 1.4.5

RRDs Perl Modules: FOUND (Version 1.4004)

RRD Files stored in: /usr/local/etc2/pnp4nagios/var/perfdata

process_perfdata.pl Logfile: /usr/local/etc2/pnp4nagios/var/perfdata.log

Perfdata files (NPCD) stored in: /usr/local/etc2/pnp4nagios/var/spool

Web Interface Options:

————————- ——————-

HTML URL: http://localhost/nagios/pnp4nagios

Apache Config File: /usr/local/etc2/apache22/conf/pnp4nagios.conf

—————–

make all

make install

make install-webconf

make install-config

make install-init

– Configuración de Pnp4Nagios:

– EN NAGIOS

El modo de funcionamiento que vamos a usar es MASIVO con NPCD:

Visto desde el punto de vista de Nagios, este es el mejor modo de procesado, puesto que Nagios no es bloqueado.

Nagios de nuevo, usa un fichero temporal para almacenar los datos y ejecuta un comando después de cierto tiempo predefinido. En lugar de procesar inmediatamente los datos mediante process_perfdata.pl, el fichero es movido a un directorio de spool. Debido a que únicamente estamos moviendo un fichero del mismo sistema de ficheros, esto no lleva prácticamente tiempo, por lo que nagioses capaz de ejecutar su trabajo de forma inmediata.

El demonio NPCD (Nagios Performance C Daemon) monitoriza el directorio en busca de nuevos ficheros y le pasa los nombres a process_perfdata.pl. El procesado de los datos esta desacoplado de Nagios. NPCD es capaz de lanzar múltiples hilos de ejecución para el procesado de datos. 

  • template.cfg

Tenemos que definir unas nuevas plantillas para que nagios pueda mostrarnos los gráficas.

Estas gráficas tienen el popup activado, sera necesario copiar:

cp pnp4nagios-0.6.13/contrib/ssi/status-header.ssi /usr/local/etc2/nagios/share/ssi/
chown -R www-data.www-data /usr/local/etc2/nagios/share/ssi/

En el archivo “template.cfg“:

define host {
name host-pnp
action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_' class='tips' rel='/pnp4nagios/index.php/popup?host=$HOSTNAME$&srv=_HOST_
register 0
}

define service {
name srv-pnp
action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$' class='tips' rel='/pnp4nagios/index.php/popup?host=$HOSTNAME$&srv=$SERVICEDESC$
register 0
}
  •  commands.cfg

Usamos el modo NPCD.

define command {
command_name process-service-perfdata-file
command_line /bin/mv /usr/local/etc2/pnp4nagios/var/service-perfdata /usr/local/etc2/pnp4nagios/var/spool/service-perfdata.$TIMET$
}

define command {
command_name process-host-perfdata-file
command_line /bin/mv /usr/local/etc2/pnp4nagios/var/host-perfdata /usr/local/etc2/pnp4nagios/var/spool/host-perfdata.$TIMET$
}
  •  nagios.cfg o un cfg a parte
process_performance_data=1

# *** the template definition differs from the one in the original nagios.cfg
#
service_perfdata_file=/usr/local/etc2/pnp4nagios/var/service-perfdata
service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$
service_perfdata_file_mode=a
service_perfdata_file_processing_interval=15
service_perfdata_file_processing_command=process-service-perfdata-file

# *** the template definition differs from the one in the original nagios.cfg
#
host_perfdata_file=/usr/local/etc2/pnp4nagios/var/host-perfdata
host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$
host_perfdata_file_mode=a
host_perfdata_file_processing_interval=15
host_perfdata_file_processing_command=process-host-perfdata-file
  •  Habilitar las gráficas para host y servicio en el fichero cfg en el que tengamos definidos los hosts.

Añadir en cada host y servicio el template definido anteriormente (srv-pnp o host-pnp)

define host {
use generic-host,host-pnp
host_name localhost
alias localhost
address 127.0.0.1
}

define service {
use local-service,srv-pnp
host_name localhost
service_description ping
check_command check_ping!100.0,20%!500.0,60%
}

– EN PNP4NAGIOS

  •  config.php && config_local.php

Tenemos que configurar la opción siguiente con “0” para que se muestren correctamente las gráficas, sino podremos tener problemas.

$conf['use_url_rewriting'] = 0;
  • npcd.cfg

Copiar el npcd.cfg-sample a npcd.cfg

No es necesario definir ninguna opción, repasar la conf

  •  rra.cfg

Copiar el rra.cfg-sample a rra.cfg

Deberemos tener los binarios npcd en …/pnp4nagios/bin y process_perfdata.pl en …/pnp4nagios/libexec

 Nagios HA:

Bien ahora vamos a configurar el HA en las notificaciones de Nagios, la infraestructura que vamos a llevar a cabo consiste en un servidor Maestro que será el que tenga activadas las notificaciones y un servidor Esclavo el cual por defecto tiene las notificaciones des-habilitadas y se activan al caer el nodo Maestro, para ello haremos los siguientes cambios:

  • nagios.cfg

Este archivo de configuración varia en los dos servidores que forman el HA, en el Maestro las notificaciones están activadas “enable_notifications=1  mientras que en el esclavo “enable_notifications=0“.

Bien ahora las siguientes configuraciones hay que realizarlas desde el esclavo ya que será el que este chequeando si el Maestro esta vivo.

  • commands.cfg
# 'check_nagios_remote' command definition
define command{
        command_name    check_nagios_remote
        command_line    $USER1$/check_by_ssh -H $HOSTADDRESS$ -C "/opt/nagios-2.9/libexec/check_nagios -e 10 -F /opt/nagios-2.9/var/nagios.log -C /opt/nagio
s-2.9/bin/nagios"
        }
# 'handle-master-host-event' command definition
define command{
        command_name    handle-master-host-event
        command_line    $USER1$/eventhandlers/handle-master-host-event $HOSTSTATE$ $HOSTSTATETYPE$
        }
# 'handle-master-proc-event' command definition
define command{
        command_name    handle-master-proc-event
        command_line    $USER1$/eventhandlers/handle-master-proc-event $SERVICESTATE$ $SERVICESTATETYPE$
        }
  •  check_master.cfg

Crearemos un nuevo archivo que contendrá:

#master_nagios.snaider.dom
define host{
        use                     generic-host
        host_name               master_nagios.snaider.dom
        alias                   master_nagios.snaider.dom
        address                 192.168.xxx.xxx
        event_handler           handle-master-host-event
        }
define service{
        use                     generic-service
        host_name               master_nagios.snaider.dom
        service_description     nagios
        check_command           check_nagios_remote
        event_handler           handle-master-proc-event
        }
  • ../nagios/libexec/eventhandlers/handle-master-host-event
#!/bin/sh
# Only take action on hard host states...
case "$2" in
HARD)
        case "$1" in
        DOWN)
                # The master host has gone down!
                # We should now become the master host and take
                # over the responsibilities of monitoring the
                # network, so enable notifications...
                /opt/nagios-2.9/libexec/eventhandlers/enable_notifications
                ;;
        UP)
                # The master host has recovered!
                # We should go back to being the slave host and
                # let the master host do the monitoring, so
                # disable notifications...
                /opt/nagios-2.9/libexec/eventhandlers/disable_notifications
                ;;
        esac
        ;;
esac
exit 0
  •  ../nagios/libexec/eventhandlers/handle-master-proc-event
#!/bin/sh
# Only take action on hard service states...
case "$2" in
HARD)
        case "$1" in
        CRITICAL)
                # The master Nagios process is not running!
                # We should now become the master host and
                # take over the responsibility of monitoring
                # the network, so enable notifications...
                /opt/nagios-2.9/libexec/eventhandlers/enable_notifications
                ;;
        WARNING)
                # The master Nagios process may or may not
                # be running.. We won't do anything here, but
                # to be on the safe side you may decide you
                # want the slave host to become the master in
                # these situations...
                ;;
        UNKNOWN)
                # The master Nagios process may or may not
                # be running.. We won't do anything here, but
                # to be on the safe side you may decide you
                # want the slave host to become the master in
                # these situations...
                ;;
        OK)
                # The master Nagios process running again!
                # We should go back to being the slave host,
                # so disable notifications...
                /opt/nagios-2.9/libexec/eventhandlers/disable_notifications
                ;;
        esac
        ;;
esac
exit 0 
  •  ../nagios/libexec/eventhandlers/disable_notifications
#!/bin/sh
# This is a sample shell script showing how you can submit the DISABLE_NOTIFICATIONS command
# to Nagios.  Adjust variables to fit your environment as necessary.

now=`date +%s`
commandfile='/opt/nagios-2.9/var/rw/nagios.cmd'

/usr/bin/printf "[%lu] DISABLE_NOTIFICATIONS\n" $now > $commandfile
  •  ../nagios/libexec/eventhandlers/enable_notifications
#!/bin/sh
# This is a sample shell script showing how you can submit the ENABLE_NOTIFICATIONS command
# to Nagios.  Adjust variables to fit your environment as necessary.

now=`date +%s`
commandfile='/opt/nagios-2.9/var/rw/nagios.cmd'

/usr/bin/printf "[%lu] ENABLE_NOTIFICATIONS\n" $now > $commandfile

Tendremos que realizar un intercambio de claves id-rsa-pub entre los dos usuario nagios de los dos servidores, para poder realizar los chequeos por ssh.

Espero que os allá sido de utilidad, cualquier sugerencia será bien recibida:

2 thoughts on “All in One Nagios

  1. @saiCheck to make sure that you’ve defined the cmmoand on the remote server as check_all_diskscmmoand[check_all_disks]=/usr/lib/nagios/plugins/check_disk -w 20 -c 10Also check to make sure that the check_disk binary actually exists.If both are there and correct then the final thing to check is that within your host config you’re using NRPE to call the correct check_all_disks cmmoand.

Leave a Reply

Your email address will not be published. Required fields are marked *