Profundizando nagios .pdf
Nombre del archivo original: Profundizando nagios.pdf
Vista previa del documento
Monitoria y análisis de Red con
Nagios
Las redes de cómputo de las organizaciones, se vuelven cada vez más
complejas y la exigencia de la operación es cada vez mas demandante. Las
redes, cada vez mas, soportan aplicaciones y servicios estratégicos de las
organizaciones. Por lo cual el análisis y monitoreo de redes se ha convertido en
una labor cada vez mas importante y de carácter pro-activo para evitar
problemas.
Para prevenir errores en un sistema existe podemos utilizar un equipo que se
ocupe de estar “controlado y observando” el funcionamiento de la red, esto
podemos realizarlo por medio de un software llamado Nagios.
Nagios es un sistema de monitorización de equipos y de servicios de red,
escrito en C y publicado bajo la GNU General Public License, el lenguage con el
cual esta desarrollado nos asegura una rápida ejecución y su licencia que lo
determina como Software Libre nos asegura que siempre tendremos
actualizaciones disponibles y que hay una gran comunidad de desarrolladores
soportándolo.
Creado para ayudar a los administradores a tener siempre el control de qué
está pasando en la red que administran y conocer los problemas que ocurren
en la infraestructura que administran antes de que los usuarios de la misma los
perciban, para así no sólo poder tomar la iniciativa, sino asumir la
responsabilidad de hacer que las cosas sucedan; decidir en cada momento lo
que queremos hacer y cómo lo vamos a hacer, debido a que este software nos
permite obtener datos, interpretarlos y tomar decisiones en base a ello como:
• Conservar y almacene datos de la red para manejar reportes y tendencias
• Ver y analizar la red, así como el tráfico de la red a través del tiempo
• Monitorear el estado de la red en comparación a los reportes de análisis
• Generar reportes sustentados para justificar las necesidades de actualización
de la red
Para facilitar tareas de explotación de datos, hay diferentes aditivos como un
visor de reportes integrados, en el cual se puede ver el histórico de actividad y
performance de servicios, y además un visor de diagramas de red con el
estado actual de cada equipo.
El mismo, esta constituido por un Núcleo que construye la interfaz de usuario y
por plugins los cuales representan los ojos y oídos de Nagios y por lo cual se
encargan de recopilar información (bajo demanda). Los mismos pueden estar
programados en diversos lenguajes como C, C++, Python, Perl, PHP, Java, Bash
etc, ya que Nagios es independiente del lenguaje en el cual que se desarrolle el
plugin y solo procesa los datos recibidos de este, para la posterior elaboración
y envío de notificaciones a los encargados de la administración del sistema en
cuestión.
Objetivos y necesidades
Conocer el estado de diferentes servicios brindados por equipos como
servidores corriendo diferentes sistemas operativos, routers de los cuales
dependen varios equipos. Obtener información de los mismos como estado en
red, tiempo arriba, puertos abiertos, servicios y procesos corriendo, carga de
CPU, carga de memoria física, carga de memoria virtual, espacio en disco,
interfaces de red activas. Es posible conocer los estados y datos de estos
diferentes equipos para una posterior elaboración de reportes etc, elaborando
una configuración personalizada de Nagios para cada caso en particular, por
medio de testeo de paquetes de red, o haciendo uso de diferentes funciones
que provee el protocolo SNMP (Simple Network Management Protocol) que nos
permite gestionar y/o supervisar datos de diferentes elementos y componentes
de la red como routers, switches, servidores etc y al ser un protocolo standard
es posible monitorizar una amplia variedad de casos en escenarios con
sistemas ó equipos diferentes.
Con lo cual podremos concluir si el sistema :
• Lleva a cabo eficazmente su finalidad
• Utiliza eficientemente los recursos.
Ya que podemos :
• Detectar de forma sistemática el uso de los recursos y los flujos de
información dentro de una organización.
• Determinar qué información es crítica para el cumplimiento de su misión y
objetivos, identificando necesidades, duplicidades, costos, valor y barreras,
que obstaculizan flujos de información eficientes.
• Análizar de eficiencia del sistema.
• Verificar el cumplimiento de Normativas.
• Revisión de la gestión de recursos.
Descripción
Que se puede hacer con Nagios
• Monitorización de servicios de red (SMTP, POP3, HTTP, NTTP, ICMP, SNMP).
• Monitorización de los recursos de un host (carga del procesador, uso de los
discos, logs del sistema) en varios sistemas operativos, incluso Microsoft
Windows con el plugin NRPE_NT.
• Monitorización remoto, a través de túneles SSL cifrados o SSH.
• Diseño simple de plugins, que permiten a los usuarios desarrollar sus propios
chequeos de servicios dependiendo de sus necesidades, usando sus
herramientas preferidas (Bash, C++, Perl, Ruby, Python, PHP, C#, Java, etc.).
• Chequeo de servicios paralizados.
• Posibilidad de definir la jerarquía de la red, permitiendo distinguir entre host
caídos y host inaccesibles.
• Notificaciones a los contactos cuando ocurren problemas en servicios o hosts,
así como cuando son resueltos ( Vía email, pager, Jabber, SMS o cualquier
método definido por el usuario junto con su correspondiente complemento).
• Posibilidad de definir manejadores de eventos que ejecuten al ocurrir un
evento de un servicio o host para resoluciones de problemas proactivas.
• Rotación automática del archivo de registro.
• Soporte para implementar hosts de monitores redundantes.
• Interfaz web opcional, para observar el estado de la red
notificaciones, historial de problemas, archivos de registros, etc.
actual,
• Reportes y estadísticas del estado cronológico de disponibilidad de servicios
y hosts.
Quien va a usar Nagios
• Administradores de Redes con alto conocimiento tecnico
• Operadores con minimo conocimiento tecnico de la situacion, o conocimiento
puntual de algun servicio
• Pudiedo avisar y ayudar a determinar posibles causas de efectos
producidos
• Equipos de desarrollo
• Coordinadores de Mesas de Ayuda
• Areas relacionadas
Como impacta
• Mejora de productividad
• Antelacion de problemas
• Reporte y aviso de incidentes
• Agilidad en su tratamiento
• Mejor y mayor relacion e integracion de sectores adjuntos
Requerimientos
• Plan de acción bien diagramado
• Personal con conocimiento medio/avanzado en redes
• Hardware acorde a la inversion y criticidad de los datos
• Si se van a monitorear >= 600 host y >= 2000 servicios hay que plantear
bien esto, no sobrevaluar pero tampoco escatimar
Ejemplo un vez tuve que monitorear una red con 700 hosts
y 2000 servicios que a su vez guardaba estadisticas
completas en un MySQL dentro del mismo equipo para
luego generar informes SLA y mostrar datos en pantalla en
una interfaz personalizada y disponia de un Intel Quad Core
2.8 GHz a 32 bits con un disco SATA de 320 GB y se quedo
algo corto el hardware para los requerimientos
Tareas
Dependencias
Para una correcta instalación de Nagios, con todas sus características es
necesario tener instalados ciertos paquetes de software en el sistema, la
instalación puede variar según la distribución de Linux que elijamos, si los
tenemos empaquetados, o si los tenemos que compilar en instalar
manualmente.
Paquete
Perl
Net::SNMP
Crypt::DES
Digest::HMAC
Digest::SHA1
RRDTool
Zlib
LibJPEG
LibPNG
Freetype2
Graphviz
XFree86-libs
Apache 2
Descripción
Sitio web
Interprete para el lenguaje de script http://www.perl.org
Perl
Modulo de Perl para consultas SNMP http://search.cpan.org/dis
t/Net-SNMP
Modulo de Perl para encripción DES, http://search.cpan.org/~d
necesario para consultas SNMPv3
paris/Crypt-DES/
Keyed-Hashing for Message
http://search.cpan.org/dis
Authentication
t/Digest-HMAC/
Perl interface to the SHA-1
http://search.cpan.org/dis
algorithm
t/Digest-SHA1/
Utilitario para generación de
http://oss.oetiker.ch/rrdto
gráficas de red y además
ol
su módulo de integración con el
lenguaje Perl
Librería de compresión utilizada por http://www.gzip.org/zlib/
las utilidades graficas
Librería para exportación jpg
http://www.ijg.org/
Librería para exportación png
http://www.libpng.org/pub
/png/
Librería para procesamiento de
http://www.freetype.org/
fuentes
Utilitario para generación de
http://www.graphviz.org/
graficas
Librerías gráficas generales
http://koala.ilog.fr/lehors/
xpm.html
Servidor Web
http://httpd.apache.org/
PHP
MySQL
Postfix
GD
Nagvis
PNP4Nagios
NDO
Plugins
SNMP Plugins
Nagios
NagiosQL
Dokuwiki
Syslog-Ng
Interprete de lenguaje de script
Sistema de base de datos
SMTP para enviar mail
Librería para generación de
formatos graficos
Aditivo para la generación de
diagramas dinamicos
Aditivo para la generación de
gráficos estadísticos y reportes
visuales
Agregado para articular Nagios con
MySQL
Plugins de chequeo standard de
Nagios
Plugins para la integración de
chequeos SNMP de Nagios
Sitio de descarga oficial
Herramienta visual de configuración
de Nagios via Web
Herramienta de documentación
colaborativa
Logueo de eventos del sistema
http://www.php.net
http://www.mysql.com
http://www.postfix.org/
http://www.libgd.org/
http://www.nagvis.org/
http://www.pnp4nagios.or
g/
http://www.nagios.org
http://www.nagios.org
http://nagios.manubulon.
com/
http://www.nagios.org
http://www.nagiosql.org/
http://www.dokuwiki.org/
http://www.balabit.com/n
etwork-security/syslogng/
http://www.intersectallian
ce.com/projects/index.ht
ml
http://mathiaskettner.de/checkmk_lives
tatus.html
SNARE
Agente Syslog para clientes
Windows
MK Livestatus
Aditivo para obtener los datos de
Nagios
en Vivo via Socket (muy útil para
abandonar NDO)
Aplicación de interfaz para celulares http://gnokii.org
y modems 3G,
para la realización de llamadas y
alertas SMS
Gnokii
Nota:
Hay algunos plugins que no estan mas disponibles en su sitio, aca los incluyo
Descarga y compilación
En este apartado nos concentraremos en la descarga y compilación de los
diferentes paquetes bajados en formato de codigo fuente.
Nagios
Para empezar deberemos descargar el código fuente del software Nagios
desde su sitio web, en formato tar.gz, a la fecha la última versión es la 3.0.
Para ello descomprimiremos el paquete descargado y luego procederemos a
compilarlo.
root@localhost # tar xvfzp nagios-3.0.6.tar.gz
root@localhost nagios-3.0.6 # ./configure
*** Configuration summary for nagios 3.0.6 12-01-2008 ***:
General Options:
------------------------Nagios executable:
Nagios user/group:
Command user/group:
Embedded Perl:
Event Broker:
Install ${prefix}:
Lock file:
Check result directory:
Init directory:
Apache conf.d directory:
Mail program:
Host OS:
nagios
nagios,nagios
nagios,nagios
no
yes
/usr/local/nagios
${prefix}/var/nagios.lock
${prefix}/var/spool/checkresults
/etc/rc.d/init.d
/etc/httpd/conf.d
/bin/mail
linux-gnu
Web Interface Options:
-----------------------HTML URL:
CGI URL:
Traceroute (used by WAP):
http://localhost/nagios/
http://localhost/nagios/cgi-bin/
/bin/traceroute
Review the options above for accuracy. If they look okay,
type 'make all' to compile the main program and CGIs.
root@localhost nagios-3.0.6 # make all
*** Compile finished ***
If the main program and CGIs compiled without any errors, you
can continue with installing Nagios as follows (type 'make'
without any arguments for a list of all possible options):
make install
- This installs the main program, CGIs, and HTML files
make install-init
- This installs the init script in /etc/rc.d/init.d
make install-commandmode
- This installs and configures permissions on the
directory for holding the external command file
make install-config
- This installs *SAMPLE* config files in /usr/local/nagios/etc
You'll have to modify these sample files before you can
use Nagios. Read the HTML documentation for more info
on doing this. Pay particular attention to the docs on
object configuration files, as they determine what/how
things get monitored!
make install-webconf
- This installs the Apache config file for the Nagios
web interface
*** Support Notes *******************************************
If you have questions about configuring or running Nagios,
please make sure that you:
- Look at the sample config files
- Read the HTML documentation
- Read the FAQs online at http://www.nagios.org/faqs
before you post a question to one of the mailing lists.
Also make sure to include pertinent information that could
help others help you. This might include:
-
What version of Nagios you are using
What version of the plugins you are using
Relevant snippets from your config files
Relevant error messages from the Nagios log file
For more information on obtaining support for Nagios, visit:
http://www.nagios.org/support/
*************************************************************
Enjoy.
root@localhost nagios-3.0.6 # make fullinstall
root@localhost nagios-3.0.6 # make install-config
Para correr el daemon del servicio nagios y realizar tareas de administración y
configuración sobre el, se debió crear el usuario nagios y el grupo nagios con
privilegios de usuario normal del sistema, con su home ubicado en el directorio
de instalación de nagios /usr/local/nagios, luego se le atribuyeron permisos
de acceso y escritura para dicho usuario.
root@localhost # groupadd nagios
root@localhost # useradd nagios -d /usr/local/nagios -G nagios
root@localhost # chown nagios:nagios -R /usr/local/nagios
Para dejar corriendo el servicio deberemos ejecutar :
/etc/init.d/nagios start
Luego deberemos bajarnos el paquete de plugins básico de Nagios y
descomprimirlo para luego compilarlo
root@localhost
root@localhost
root@localhost
root@localhost
# tar xvfzp nagios-plugins-1.4.13.tar.gz
nagios-plugins-1.4.13 # ./configure
nagios-plugins-1.4.13 # make all
nagios-plugins-1.4.13 # make install
root@localhost nagios-plugins-1.4.13 # make install-root
Con esto ya tendremos un Nagios instalado y funcional en modo básico.
PNP4Nagios
PNP4Nagios es un addon para Nagios que básicamente, nos genera gráficas
con los resultados de los análisis de Nagios, para poder llevar un control más
general de la monitorización de un determinado servidor o servicio en las
últimas horas, días, semanas, meses o incluso años.
Una vez que tenemos instalado y configurado Nagios procederemos a
descargar y descomprimir el paquete pnp4nagios,
root@localhost # tar xvfzp pnp-0.4.12.tar.gz
root@localhost pnp-0.4.12 # ./configure
*** Configuration summary for pnp 0.4.12 10-11-2008 ***
General Options:
------------------------Nagios user/group:
Install directory:
HTML Dir:
Config Dir:
Path to rrdtool:
RRDs Perl Modules:
RRD Files stored in:
process_perfdata.pl Logfile:
Perfdata files (NPCD) stored in:
------------------nagios nagios
/usr/local/nagios
/usr/local/nagios/share/pnp
/usr/local/nagios/etc/pnp
/usr/bin/rrdtool (Version 1.2.29)
FOUND (Version 1.2029)
/usr/local/nagios/share/perfdata
/usr/local/nagios/var/perfdata.log
/usr/local/nagios/var/spool/perfdata/
Review the options above for accuracy.
type 'make all' to compile.
If they look okay,
root@localhost pnp-0.4.12 # make all
root@localhost pnp-0.4.12 # make fullinstall
NDOUtils
El generador de graficas Nagvis necesita que Nagios almacene sus datos
dentro de una base de datos MySQL ya que por defecto lo hace en archivos de
texto, para que Nagios pueda hacer eso, deberemos instalar el modulo NDO
que viene dentro del paquete NDOUtils descargable via el sitio web de
Nagios. Este módulo es el que se encarga de generar las consultas en formato
MySQL, que son cargadas sobre un socket El proceso NDO2DB corriendo
como daemon lee de ese socket y carga los datos en una base de datos
MySQL.
root@localhost # tar xvfzp ndoutils-1.4b7.tar.gz
root@localhost ndoutils-1.4b7 # ./configure
*** Configuration summary for ndoutils 1.4b7 10-31-2007 ***:
General Options:
------------------------NDO2DB user:
nagios
NDO2DB group:
nagios
Review the options above for accuracy. If they look okay,
type 'make' to compile the NDO utilities.
root@localhost ndoutils-1.4b7 # make
root@localhost ndoutils-1.4b7 # cd db
root@localhost db #./installdb -u nagios -p nagios -h localhost -d nagios
Hay 4 componentes principales que inician las utilidades NDO:
1. NDOMOD Event Broker Module (Modulo de evento corredor)
2. LOG2NDO Utility
3. FILE2SOCK Utility
4. NDO2DB Daemon
El NDOMOD Event Broker Module
Las utilidades NDO incluyen un Nagios Even Broker Module (NDOMOD.O) que
exporta datos desde el demonio de nagios.
Asumiendo que nagios fue compilado con el Modulo Event Broker activado
(esto es por default), usted puede configurar que nagios cargue el modulo
NDOMOD en tiempo de ejecucion. Una vez que el modulo fue cargado por el
daemon de nagios, este puede acceder a todos los datos y logicamente
presente el el proceso de nagios que esta corriendo.
El modulo NDOMOD tiene designado exportar la configuracion, como
informacion variada de eventos en tiempo de ejecucion que ocurre en el
proceso de monitoreo, por el daemon de nagios. El modulo puede enviar esta
informacion a un archivo estandar, a un Socket Unix de Dominio o un a socket
TCP.
El NDOMOD escribe la info en un formato que el demonio NDO2DB puede
entender.
Si el NDOMOD esta escrito para un archivo de salida, usted puede configurarlo
para rotarlo periodicamente y/o procesarlo en otra maquina fisicamente
(usando SSH, etc.) y envia este contenido al daemon NDO2DB usando la
utilidad FILE2SOCK (que describiremos mas adelante).
La utilidad LOG2NDO
Esta es designada para permitir importar un historial de logs de nagios a una
BD via el NDO2DB daemon (describiremos luego). La utilidad trabaja enviando
archivos de logs históricos a un archivo estandar, un unix sock o un tcp sock en
un formato que NDO2DB daemon entienda. El NDO2DB daemon puede luego
usarlo para procesar la salida y almacenar en un archivo de log historico
informandolo en una BD.
La utilidad FILE2SOCK
Esta utilidad es muy simple, solo lee de un archivo estandar (o STDIN) y escribe
todo sobre un socket de dominio unix o un tcp socket. Estos datos son leidos y
no son procesados por nada, antes de ser enviados al socket.
El demonio NDO2DB
La utilidad es diseñada para tomar los datos de salida de los componentes
NDOMOD y LOG2NDO y almacenarlos en una BD MySQL o BD PostgreSQL.
Cuando este inicia, el daemon NDO2DB crea un socket y espera que los
clientes se conecten. NDO2DB puede correr independientemente, bajo un
demonio multiproceso o bajo inetd (si esta usando un socket TCP).
Multiples clientes pueden conectarse al daemon NDO2DB y transmitir
simultáneamente.
Instalación
Una vez compilado el modulo NDO procederemos a instalarlo manualmente
• cp src/ndomod-3x.o /usr/local/nagios/bin/ndomod.o
• Con esto copiaremos el modulo al directorio de ejecución de Nagios
• cp config/ndomod.cfg /usr/local/nagios/etc
• De esta manera instalaremos la configuración inicial del modulo
Igualmente lo haremos con el daemon NDO2DB
• cp src/ndo2db-3x /usr/local/nagios/bin/ndo2db
• Con esto copiaremos el daemon al directorio de ejecución de Nagios
• cp config/ndo2db.cfg /usr/local/nagios/etc
• De esta manera instalaremos la configuración inicial del daemon
MK Livestatus
La forma clásica de acceder a la informacion actual de sus hosts y servicios es
mediante la lectura y análisis del archivo status.dat, que es creado por Nagios
en una base regular. El intervalo de actualización se configura a través
status_update_interval en nagios.cfg. Un valor típico es de 10 segundos. Si la
instalación es cada vez más grande, usted podría tener que aumentar este
valor con el fin de reducir al mínimo el uso de CPU y de E / S de disco. La
interfaz web de Nagios utiliza status.dat para mostrar sus datos.
Analizar status.dat no es muy popular entre los desarrolladores de addons. Así
que muchos utilizan otro enfoque: NDO. Este es un módulo de ORC que se
carga directamente en el proceso de Nagios y envía todas las actualizaciones
de estado a través de un socket UNIX a un proceso de ayuda. Eso crea
sentencias SQL y actualizaciones de varias tablas en una base de datos MySQL
o PostgreSQL. Este enfoque tiene varias ventajas sobre status.dat:
• Los datos se actualizan de inmediato, no sólo cada 10 o 20 segundos.
• Las solicitudes tienen acceso fácil a los datos a través de SQL. N analizador
para status.dat es necesario.
• En las grandes instalaciones el acceso de los addons a los datos es más
rápida que la lectura status.dat.
Lamentablemente, sin embargo, ha NDO también algunas deficiencias graves:
• Tiene una configuración compleja.
• Se necesita una (creciente) base de datos para ser administrado.
• Se alimenta de una parte significativa de sus Recursos de la CPU, solo con el
fin de mantener la base estrictas disponibles.
• Limpieza periódica de la base de datos puede colgar Nagios.
El futuro
Desde la versión 1.1.0, Check_MK ofrece un enfoque totalmente nuevo para
acceder a datos de estado y también histórico: Livestatus. Así como NDO,
Livestatus hacer uso de la API de Nagios evento Broker y carga un módulo
binario en su proceso de Nagios. Pero luego otros NDO, Livestatus no realiza
escribir datos. En su lugar, se abre un socket en la que pueden consultar los
datos a demanda.
La toma permite enviar una solicitud de los servicios u otros datos y obtener
una respuesta inmediata. Los datos son directamente leídos de estructuras de
datos internas de Nagios. Livestatus no crea su propia copia de esos datos. A
partir de la versión 1.1.2 que también se pueden recuperar los datos históricos
de los archivos de registro a través de Nagios Livestatus.
Esto es no sólo un enfoque increíblemente simple, si no también muy rápido.
Algunas ventajas son:
• Otro entonces NDO, utilizando Livestatus no impone una carga mensurable
de su CPU para nada. Sólo en el tratamiento de las consultas de una cantidad
muy pequeña de la CPU es necesario. Pero eso ni siquiera se bloqueará
Nagios.
• Livestatus produce cero / S de disco cuando quering datos de estado.
• Acceso a los datos es mucho más rápido que analizar status.dat o consultar
una base de datos SQL.
• No se necesita configuración, base de datos no es necesaria. Ninguna
administración es necesario.
• Livestatus escalas bastante bien a las grandes instalaciones, incluso más allá
de 50,000 servicios.
• Livestatus le da acceso a los datos específicos de Nagios no se dispone de
ningún otro método disponible acceder al estado - por ejemplo, la
información del tiempo una multitud se encuentra actualmente en período de
notificación.
En el mismo tiempo, ofrece a sus Livestatus propio lenguaje de consulta que es
simple de entender, ofrece la mayoría de la flexibilidad de SQL e incluso más
en algunos casos. Es un protocolo rápido, ligero y no necesita un cliente
binario. Incluso, pueden obtener acceso a los datos sin ningún tipo de software
especial de ayuda.
Proceso de compilación
root@linux# wget 'http://www.mathias-kettner.de/download/mk-livestatus1.1.2.tar.gz'
root@linux# tar xzf mk-livestatus-1.1.2.tar.gz
root@linux# cd mk-livestatus-1.1.2
root@linux#
root@linux# ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for g++... g++
checking for C++ compiler default output file name... a.out
checking whether the C++ compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
...
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
root@linux# make
g++ -DHAVE_CONFIG_H -I. -I..
-I../nagios -fPIC -g -O2 -MT livestatus_soAndingFil...
g++ -DHAVE_CONFIG_H -I. -I..
-I../nagios -fPIC -g -O2 -MT livestatus_soClientQue...
g++ -DHAVE_CONFIG_H -I. -I..
-I../nagios -fPIC -g -O2 -MT livestatus_soColumn.o ...
g++ -DHAVE_CONFIG_H -I. -I..
-I../nagios -fPIC -g -O2 -MT livestatus_soColumnsCo...
g++ -DHAVE_CONFIG_H -I. -I..
-I../nagios -fPIC -g -O2 -MT livestatus_soContactsC...
g++ -DHAVE_CONFIG_H -I. -I..
-I../nagios -fPIC -g -O2 -MT livestatus_soCustomVar...
g++ -DHAVE_CONFIG_H -I. -I..
-I../nagios -fPIC -g -O2 -MT livestatus_soCustomVar...
....
root@linux# make install
Making install in src
make[1]: Entering directory `/d/nagvis-dev/src/mk-livestatus-1.1.2/src'
make[2]: Entering directory `/d/nagvis-dev/src/mk-livestatus-1.1.2/src'
test -z "/usr/local/bin" || /bin/mkdir -p "/usr/local/bin"
/usr/bin/install -c 'unixcat' '/usr/local/bin/unixcat'
test -z "/usr/local/lib/mk-livestatus" || /bin/mkdir -p "/usr/local/lib/mklivestatus"
/usr/bin/install -c -m 644 'livestatus.so' '/usr/local/lib/mklivestatus/livestatus.so'
ranlib '/usr/local/lib/mk-livestatus/livestatus.so'
/bin/sh /d/nagvis-dev/src/mk-livestatus-1.1.2/install-sh -d /usr/local/lib/mklivestatus
/usr/bin/install -c livestatus.o /usr/local/lib/mk-livestatus
rm -f /usr/local/lib/mk-livestatus/livestatus.so
make[2]: Leaving directory `/d/nagvis-dev/src/mk-livestatus-1.1.2/src'
make[1]: Leaving directory `/d/nagvis-dev/src/mk-livestatus-1.1.2/src'
make[1]: Entering directory `/d/nagvis-dev/src/mk-livestatus-1.1.2'
make[2]: Entering directory `/d/nagvis-dev/src/mk-livestatus-1.1.2'
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/d/nagvis-dev/src/mk-livestatus-1.1.2'
make[1]: Leaving directory `/d/nagvis-dev/src/mk-livestatus-1.1.2'
Despues tenemos que especificar que Nagios cargue el archivo objeto
compilado livestatus.o, para eso debemos agregar a nagios.cfg:
broker_module=/usr/local/lib/mk-livestatus/livestatus.o /var/lib/nagios/rw/live
event_broker_options=-1
Y dentro del log de Nagios vamos a ver algo similar a esto
[1256144866] livestatus: Version 1.1.2 initializing. Socket path: '/var/lib
/nagios/rw/live'
[1256144866] livestatus: Created UNIX control socket at /var/lib/nagios/rw/
live
[1256144866] livestatus: Opened UNIX socket /var/lib/nagios/rw/live
[1256144866] livestatus: successfully finished initialization
[1256144866] Event broker module '/usr/local/lib/mk-livestatus/livestatus.o'
initializ
ed successfully.
[1256144866] Finished daemonizing... (New PID=5363)
[1256144866] livestatus: Starting 10 client threads
[1256144866] livestatus: Entering main loop, listening on UNIX socket
Opciones del módulo
Opción
debug
Valor por
default
0
max_cached_messages 500000
max_response_size
104857600
num_client_threads
10
thread_stack_size
65536
query_timeout
10000
Que significa
Set this to 1 in order to make
Livestatus log each query it
executes in nagios.log
Livestatus' access to Nagios logfiles
caches messages in-memory. Here
you can set the maximum number
of cached messages. Each message
takes about 250 bytes (in the
current implementation)
Livestatus constructs each response
in-memory before sending it to the
clients. In order to avoid a crash in
case of extensive queries, the
maximum response size is limited.
The default limit is 100 MB
Livestatus needs one thread for
each concurrent client connection. A
fixed number of threads is created
when Nagios starts
This parameter sets the size of the
stack of each client thread. In
versions before 1.1.4, the stack size
was set to 8 MB (pthread default).
The new default value is 64 KB. A
small stack reduces virtual memory
usage and also save CPU
ressources. A too small value will
probably crash your Nagios process,
though. You have been warned
This value is in ms. In order to avoid
being hung by broken clients,
Livestatus imposes a limit on the
idle_timeout
300000
time for reading the query from the
client. A value of 0 disables the
timeout
This value is in ms. Livestatus is
waiting at most that much time for
the next query. A value of 0 disables
the timeout
Ejemplo de como agregar opciones
broker_module=/usr/local/lib/mk-livestatus/livestatus.o /var/run/nagios/rw/live
debug=1
Nagvis
Nagvis es un addon para Nagios, con el cual podemos tener gráficos a modo de
diagrama estructural de red, dinámicos, con lo cual podemos conocer el estado
actual de la red mirando un gráfico amigable al usuario final.
Deberemos bajar el paquete Nagvis desde su sitio web, y descomprimirlo y
copiarlo a un directorio visible desde la interfaz web de Nagios.
root@localhost # tar xvzf nagvis-1.3.x.tar.gz
root@localhost # mv nagvis /usr/local/nagios/share
Para instalar la configuración por defecto deberemos dentro de
/usr/local/nagios/share/nagvis renombrar o mover el archivo etc/nagvis.ini.phpsample a etc/nagvis.ini.php.
Para su correcto funcionamiento necesitaremos establecer una serie particular
de permisos
root@localhost
root@localhost
root@localhost
root@localhost
root@localhost
root@localhost
root@localhost
#
#
#
#
#
#
#
chmod
chmod
chmod
chmod
chmod
chmod
chmod
664
775
664
775
664
775
664
/usr/local/nagios/share/nagvis/etc/nagvis.ini.php
/usr/local/nagios/share/nagvis/nagvis/images/maps
/usr/local/nagios/share/nagvis/nagvis/images/maps/*
/usr/local/nagios/share/nagvis/etc/maps
/usr/local/nagios/share/nagvis/etc/maps/*
/usr/local/nagios/share/nagvis/var
/usr/local/nagios/share/nagvis/var/*
Nota sobre la generación del Automap
Para una correcta generación de la característica Automap de Nagvis, primero
es necesario configurar todos los parents hosts para poder diagramar en
tiempo real la topología de red. Ademas deberemos tomar los iconos de la
directiva statusmap_image que especificamos en el anexo hostextinfo, dicho
icono se almacena en nagios/share/images/logos, en formato gd2 entendible
por el binario statusmap.cgi para mostrarlo via web, pero no es entendible por
nagvis siendo que este lo busca en base al parametro statusmap_image
entonces aprovechando que dicho icono esta en formato gd2 y en formato png
copiaremos en archivo en formato png al directorio nagvis/images/shapes pero
cambiandole la extensión de png a gd2, y entonces Nagvis lo vera como un
gd2 siendo que realmente es un PNG y debido a eso sera capas de mostrarlo.
Nota Nagvis 1.5 y template integrada con PNP
Modificar el archivo nagvis/share/userfiles/templates/default.hover.html de la
siguiente manera, agregando solo las dos lineas donde especificamos el tag
img.
<table class="hover_table">
<tr><th colspan="2">[lang_obj_type] ([lang_last_status_refresh]:
[last_status_refresh])</th></tr>
<tr><td class="label"><label>[lang_name]</label></td><td>[obj_name]</td></tr>
<!-- BEGIN service -->
<tr><td
class="label"><label>[lang_service_description]</label></td><td>[service_descrip
tion]</td></tr>
<!-- END service -->
<tr><td class="label"><label>[lang_alias]</label></td><td>[obj_alias]</td></tr>
<!-- BEGIN host -->
<tr><td colspan="2" style="text-align:center;"><img src="/nagios/pnp/index.php?
host=[obj_name]&srv=_HOST_&source=1&view=0&display=image" with="300px"
height="94px"></td></tr>
<tr><td class="spacer" colspan="2"></td></tr>
<tr><td class="label[obj_state]"><label>[lang_state]
([lang_state_type])</label></td><td class="state[obj_state]">[obj_state]
([obj_state_type])[obj_in_downtime][obj_acknowledged]</td></tr>
<tr><td
class="label"><label>[lang_output]</label></td><td>[obj_output]</td></tr>
<tr><td
class="label"><label>[lang_perfdata]</label></td><td>[obj_perfdata]</td></tr>
<tr><td
class="label"><label>[lang_current_attempt]</label></td><td>[obj_current_check_a
ttempt]/[obj_max_check_attempts]</td></tr>
<tr><td
class="label"><label>[lang_last_check]</label></td><td>[obj_last_check]</td></tr
>
<tr><td
class="label"><label>[lang_next_check]</label></td><td>[obj_next_check]</td></tr
>
<tr><td
class="label"><label>[lang_last_state_change]</label></td><td>[obj_last_state_ch
ange]</td></tr>
<!-- END host -->
<tr><td class="spacer" colspan="2"></td></tr>
<tr><td
class="label[obj_summary_state]"><label>[lang_summary_state]</label></td><td
class="state[obj_summary_state]">[obj_summary_state] [obj_summary_in_downtime]
[obj_summary_acknowledged]</td></tr>
<tr><td
class="label"><label>[lang_summary_output]</label></td><td>[obj_summary_output]<
/td></tr>
<!-- BEGIN service -->
<tr><td colspan="2" style="text-align:center;"><img src="/nagios/pnp/index.php?
host=[obj_name]&srv=[service_description]&source=1&view=0&display=image"
with="300px" height="94px"></td></tr>
<tr><td
class="label"><label>[lang_perfdata]</label></td><td>[obj_perfdata]</td></tr>
<tr><td
class="label"><label>[lang_current_attempt]</label></td><td>[obj_current_check_a
ttempt]/[obj_max_check_attempts]</td></tr>
<tr><td
class="label"><label>[lang_state_type]</label></td><td>[obj_state_type]</td></tr
>
<tr><td
class="label"><label>[lang_last_check]</label></td><td>[obj_last_check]</td></tr
>
<tr><td
class="label"><label>[lang_next_check]</label></td><td>[obj_next_check]</td></tr
>
<tr><td
class="label"><label>[lang_last_state_change]</label></td><td>[obj_last_state_ch
ange]</td></tr>
<!-- END service -->
<!-- BEGIN childs -->
<tr><td class="spacer" colspan="2"></td></tr>
<tr><td colspan="2">
<table width="100%">
<tr>
<!-- BEGIN servicegroup --><td
class="label"><label>[lang_child_name1]</label></td><!-- END servicegroup --><td
class="label"><label>[lang_child_name]</label></td><td
class="label"><label>[lang_state]</label></td><td
class="label"><label>[lang_output]</label></td>
</tr>
<!-- BEGIN loop_child -->
<tr><!-- BEGIN servicegroup_child --><td>[obj_name1]</td><!-- END
servicegroup_child --><td>[obj_name]</td><td
class="state[obj_summary_state]">[obj_summary_state][obj_summary_in_downtime]
[obj_summary_acknowledged]</td><td>[obj_summary_output]</td></tr>
<!-- END loop_child -->
</table>
</td></tr>
<!-- END childs -->
</table>
MySQL
MySQL es uno de los Sistemas Gestores de Bases de Datos Relacional multihilo
y multiusuario, más populares,
Compilacion
Debemos descargar el paquete de su web oficial y proceder a compilarlo.
root@localhost
root@localhost
root@localhost
root@localhost
root@localhost
root@localhost
root@localhost
root@localhost
root@localhost
root@localhost
root@localhost
root@localhost
root@localhost
root@localhost
#
#
#
#
#
#
#
#
#
#
#
#
#
#
groupadd mysql
useradd -g mysql mysql
gunzip < mysql-VERSION.tar.gz | tar -xvf cd mysql-VERSION
./configure --prefix=/usr/local/mysql
make
make install
cp support-files/my-medium.cnf /etc/my.cnf
cd /usr/local/mysql
bin/mysql_install_db --user=mysql
chown -R root .
chown -R mysql var
chgrp -R mysql .
bin/mysqld_safe --user=mysql &
Establecer la contraseña del usuario root
Por defecto, el usuario root no tiene asignada una contraseña y esto no es
nada recomendable, así que vamos a establecer una. Utilizamos el comando:
mysqladmin -u root password 'contraseñadificil'
Cambiar ‘loquesea’ por la contraseña que desemos establecer, pero es
importante no olvidarse de teclear las comillas simples.
Comprobamos la nueva contraseña abriendo una sesión en mysql:
mysql -u root -p
Nos pedirá la contraseña, la tecleamos, y si todo es correcto entraremos en la
interfaz del cliente de MySQL, podemos teclear algún comando de mysql para
interactuar con el servidor, por ejemplo:
mysql> show databases;
Nos mostrará las bases de datos que existan en el servidor, normalmente y si
acabamos de instalar, aparecerán las bases de datos mysql y test.
Deberemos crear una base de datos llamada Nagios
mysql>create database nagios;
Query OK, 1 row affected (0.00 sec)
mysql>show databases;
+----------+
| Database |
+----------+
| mysql
|
| nagios
|
| test
|
+----------+
3 rows in set (0.01 sec)
Ahora deberemos crear un usuario con privilegios de SELECT, INSERT, UPDATE,
DELETE
CREATE USER nagios IDENTIFIED BY 'nagios123';
Y darle privilegios sobre la base de datos nagios
mysql> GRANT ALL ON nagios.* TO nagios@localhost IDENTIFIED BY "nagios";
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Tecleamos exit o quit para salir del programa cliente.
Paquetes
La instalacion de MySQL, en el caso de tenerlo empaquetado en nuestra
distribucion Linux, es bastante simple
CentOS y RedHat
Para instalar el paquete mysql haremos uso de la utilidad de sistema up2date
o yum
up2date mysql-server
yum install mysql-server
Y para dejar el servicio corriendo en segundo plano
service mysqld start
Para configurar el arranque del servicio
Lo habitual será que cuando arranque o se pare nuestro servidor tambien se
inicie o detenga el MySQL, para ello deberemos ejecutar:
chkconfig –level 35 mysqld on
Esto activa el demonio mysqld en los runlevel 3 y 5, y lo detiene en el resto. Si
queremos comprobar el estado del servicio podemos utilizar lo siguiente:
chkconfig –list mysqld
Debian
Para instalar mysql en Debian, deberemos ejecutar :
apt-get install mysql-server mysql-common mysql-client
Para arrancar el servicio y dejarlo corriendo :
/etc/init.d/mysql start
Y para setear su arranque por defecto :
update-rc.d -f mysql defaults
Nota SuSE
Para setear el arranque de un servicio en SuSE Linux deberemos ejecutar el
comando insserv -d nombre_servicio con el parametro -d estariamos indicando
una opcion similar a defaults como en Debian.
Apache y PHP
Nagios muestra los estados de todos los servicios configurados a través de
páginas web, esto implica que debe instalarse un servidor web con la
información correspondiente para hacerlo.
En esta etapa se hace dicha instalación siguiendo las mejores prácticas de
instalación de Apache poniendo énfasis en su seguridad.
Apache es un software libre servidor HTTP de código abierto para plataformas
Unix (BSD, GNU/Linux, etc.), Windows, Macintosh y otras, es el mas usado en
internet.
PHP es un lenguaje de programación interpretado, diseñado originalmente para
la creación de páginas web dinámicas, en nuestro caso nos servira realizar una
interpretación extra de los datos de Nagios via web.
CentOS
Para instalar los paquetes desde CentOS ejecutaremos :
yum install httpd php php-common
Para dejar el servicio corriendo :
/etc/init.d/httpd start
Debian
Para instalar los paquetes de Debian, deberemos ejecutar :
apt-get install apache2 php5
Para dejar el servicio corriendo :
/etc/init.d/apache2 start
Configuración
Ahora nos referiremos a la configuración de los elementos instalados para su
posterior articulación y funcionamiento en conjunto.
Implementación
Para el correcto funcionamiento de Nagios, y asegurar escalabilidad con orden,
se debe seguir una estructura de configuración y tener previamente
planteados temas como:
• Definición una estructura de archivos y directorios acorde a la situación,
haciéndolo a su vez mas entendible para su posterior administración
• Configurar Apache para su permitir su acceso via web por HTTP o HTTPS
• En la mayoría de los equipos a monitorear mientras fuera posible instalar y
dejar corriendo los servicios de SNMP
• Configurar servicio de envío de emails
• Definir grupos de contactos a los cuales se les enviarían los avisos de
notificaciones, dependiendo de que hosts o servicio se trate.
• Definir grupos de hosts y servicios, al tenerlos agrupados y verlos mas
facilmente
A continuación se detalla como llevar a cabo dichos pasos necesarios para su
implementación.
En el servidor
Configuraciones necesarias en el servidor de monitoreo.
Nagios
Algunos puntos basicos previos a la instalacion :
• PATH Esta es la ruta de instalación. Por defecto es /usr/local/nagios
• Usuario Usuario que va a usar nagios par ejecutarse. Debe crearse con
adduser especificarle el PATH de Nagios como su directorio home de inicio,
usualmente deberemos llamarlo nagios y debe estar dentro del grupo nagios
• Grupo Grupo de usuario que va a usar Nagios. Este grupo tendrá permisos
sobre todos los ficheros y directorios de Nagios. Por defecto es nagios. Puede
crearse con groupadd.
• URL Nagios utiliza una interfaz web para ejecutarse. Esta URL determina cual
va a ser el directorio virtual que debe usar para instalarse. Por defecto
/nagios, es decir, las peticiones irán dirigidas a http://host/nagios
Estructura de archivos
Una vez que compilamos e instalamos el paquete Nagios nos termina
quedando una nomenclatura de directorios como la siguiente :
• bin
• Aqui se almacenan los binarios ejecutables
• etc
• Guarda la configuracion de Nagios
• libexec
• Se almacenan los plugins que efectuaran los chequeos a monitorear
• sbin
• Dentro de este directorio se mantienen los ejecutables CGI de la interfaz
web
• share
• Organiza el contenido web a mostrar, iconos, html, php etc
• var
• Guarda los datos de ejecucion del monitoreo, estado de servicios, hosts, y
logs
bin
Dentro de este directorio encontramos los ejecutable principales, como el
binario nagios que es el que se ejecuta como proceso en segundo plano, el
objeto ndomod.o que es el modulo que se encarga de traducir las estadisticas
de nagios en formato de consultas MySQL, y ndo2db que el proceso en
segundo plano que se encarga conectarse con la base de datos para
posteriormente ejecutar esas consultas.
etc
Este directorio guarda la configuración de Nagios, sus componentes,
hosts/servicios a chequear, comandos de ejecucion, contactos de notificación,
intervalos de chequeos. Dentro de el hay diferentes subdirectorios y archivos.
libexec
Alli se contienen lo ejecutables de los plugins que efectuan los chequeos,
SNMP, SAP, Oracle, SSH, que pueden ser binarios, scripts en Perl, PHP, Shell,
Java, etc.
sbin
Aqui se almacenan los ejecutables cgi que se ejecutaran para la visualizacion
por web de la consola Nagios.
share
Aqui encontramos el contenido web, imagenes, logos, los aditivos como PNP,
Nagvis y los datos que necesitan para funcionar estos.
var
Aqui se guardan los datos internos de Nagios, estadisticas de los chequeos,
informacion de ejecucion actual, archivos de sockets, registros de logs, colas
de ejecución de chequeos.
Archivos de configuracion nagios/etc
cgi.cfg
• Definir archivo de configuracion principal de Nagios
• main_config_file=/usr/local/nagios/etc/nagios.cfg
• Ruta donde se ubican los archivos a mostrar via web
• physical_html_path=/usr/local/nagios/share
• Ruta del url a donde ubicar Nagios desde el navegador
• url_html_path=/nagios
• Mostrar o no el icono de ayuda en la interfaz web
• show_context_help=0
• Mostrar objetos pendientes de chequeo
• use_pending_states=1
• Usar autenticacion para acceder a Nagios
• use_authentication=1
• Tener usuario logueado por default (no recomendado, dejar comentado)
• #default_user_name=guest
• Usuarios con acceso permitido para ver la informacion de objetos (separados
por comas)
• authorized_for_system_information=nagiosadmin
• Usuarios con acceso permitido para ver la informacion de configuracion
(separados por comas)
• authorized_for_configuration_information=nagiosadmin
• Usuarios con acceso permitido ejecucion de comandos nagios (separados por
comas)
• authorized_for_system_commands=nagiosadmin
• Usuarios permitidos a ver informacion de hosts y servicios (separados por
comas)
• authorized_for_all_services=nagiosadmin
• authorized_for_all_hosts=nagiosadmin
• Usuarios permitidos para ejecutar comandos sobre hosts y servicios
(separados por comas)
• authorized_for_all_service_commands=nagiosadmin
• authorized_for_all_host_commands=nagiosadmin
• Tasa de refresco para la interfaz web en segundos
• refresh_rate=90
htpasswd.users
• Archivo con passwords encriptadas de los usuarios que se autentificaran por
HTTP
nagios.cfg
• Archivo de configuracion principal de Nagios, aqui se especifican los
directorios de trabajo y se incluyen los archivos de configuracion extra a
utilizar por Nagios
• Con diversos parametros :
• log_file se especifica el archivo de log a utilizar por Nagios
• cfg_file se especifica un archivo de configuracion extra a incluir en la
ejecucion de Nagios
• cfg_dir se especifica un directorio con archivos de configuracion extra a
incluir recursivamente en la ejecucion de Nagios
• log_archive_path path donde se alojaran los archivos de log
• use_syslog integracion con syslog
ndo2db.cfg
• Archivo de configuracion del daemon que se encarga de introducir las
consultar generadas por el modulo ndomod
ndomod.cfg
• Modulo de Nagios que se encarga de traducir la informacion de ejecucion de
Nagios en consultas MySQL, disponiendolas por medio de un socket
resource.cfg
• Archivo de configuracion donde se definen macros de ejecucion
objects/
• Directorio de archivos generales de configuracion
objects/commands.cfg
• Definicion de comandos de ejecucion por default, con los alias que queremos
usar
objects/contacts.cfg
• Definicion de contactos de notificacion
objects/localhost.cfg
• Plantilla inicial para el chequeo del host local
objects/printer.cfg
• Plantilla de ejemplo de chequeo de impresoras por SNMP
objects/switch.cfg
• Plantilla de ejemplo de chequeo de switch por SNMP
objects/templates.cfg
• Plantillas generales de host, contactos, y servicios
objects/timeperiods.cfg
• Plantilla inicial para definir periodos de chequeos, aquí se definen los rangos
de tiempo donde son válidos el envío de alertas y las verificaciones de los
servicios que están funcionando
objects/windows.cfg
• Plantilla de ejemplo de chequeo de equipos Windows
services/
• Aqui vamos a definir los servicios que usaremos en los chequeos. Se define la
métrica o el servicio a monitorizar y el host/grupo de hosts sobre el que se
ejecuta
var/rw/
• Alli se encuentra un archivo special de socket que realiza la comunicacion de
los comando y ordenes de la interfaz web hacia nagios, como cambiar
horarios de chequeo, deshabilitar notificaciones etc.
• El archivo que alli se encuentra nagios.cmd debe tener permisos de
escritura y lectura por el propietario y el grupo de pertenencia
nagios:nagcmd (660), nagcmd es un grupo especial en el cual vamos a
incluir al usuario que ejecuta el servidor web (ej. en apache sobre Debian
www-data), y asi poder enviar ordenes desde la interfaz web CGI. Esta es
una característica avanzada de Nagios es que permite vía web la ejecución
de ciertas tareas más allá del propio conjunto de CGI’s que vienen de serie,
como por ejemplo la
caída o el reinicio del propio Nagios, etcétera. Para poder ejecutar este tipo de
comandos es necesario también configurar el sistema de una forma un tanto
especial. No hay que olvidar que al configurar Nagios de este modo se está
permitiendo desde la web activar o desactivar opciones que en principio sólo
estaban disponibles desde la consola del sistema. Para configurar Nagios de
esta forma, hay que editar el fichero principal nagios.cfg y añadir (o modificar
si ya existen) las siguientes líneas:
check_external_commands=1
command_check_interval=-1
command_file=/usr/local/nagios/var/rw/nagios.cmd
Lo que hará que Nagios active el chequeo para buscar comandos externos, con
tanta frecuencia como sea posible por el sistema y buscará los comandos en el
archivo nagios.cmd.
En el siguiente gráfico detalla la organización recomendada de la configuración
de Nagios.
Apache
Para permitir y tener una correcta visualizacion de la consola web de Nagios,
procederemos a realizar una configuración personalizada dentro del servidor
web Apache.
Deberemos crear un archivo de configuracion preferentemente con el nombre
nagios.conf para tenerlo de una manera mejor organizada, y deberá ir dentro
del directorio de donde el Apache obtiene su configuración, el mismo
dependerá del método de instalación elegido o con que distribución de Linux
estemos trabajando.
• CentOS /etc/httpd/conf.d
• Debian /etc/apache2/site-available y luego crear un link simbolico a ese
archivo dentro de /etc/apache2/site-enabled
• SuSE /etc/apache2/vhosts.d
Archivo de configuración por defecto de Nagios
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
<Directory "/usr/local/nagios/sbin">
# SSLRequireSSL
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
# Order deny,allow
# Deny from all
#
Allow from 127.0.0.1
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd.users
Require valid-user
</Directory>
Alias /nagios "/usr/local/nagios/share"
<Directory "/usr/local/nagios/share">
# SSLRequireSSL
Options None
AllowOverride None
Order allow,deny
Allow from all
# Order deny,allow
# Deny from all
# Allow from 127.0.0.1
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd.users
Require valid-user
</Directory>
Configuración SSL
La configuración HTTPS con SSL se realiza por defecto en la instalación del
paquete Debian y CentOS, no asi en SuSE para ellos deberemos realizar
configuraciones extra.
Primero procederemos a crear las claves SSL
localhost:~
localhost:~
localhost:~
localhost:~
localhost:~
localhost:~
localhost:~
#
#
#
#
#
#
#
openssl genrsa -des3 -out server.3des-key 1024
openssl rsa -in server.3des-key -out server.key
openssl req -new -key server.key -x509 -out server.crt -days 365
chmod 600 server.key
rm server.3des-key
mv server.crt /etc/apache2/ssl.crt
mv server.key /etc/apache2/ssl.key
Dentro del archivo /etc/sysconfig/apache2 deberemos agregarle el siguiente
FLAG de arranque para especificar la utilización del protocolo SSL dentro del
servidor web Apache.
APACHE_SERVER_FLAGS="-D SSL"
A continuación mostramos un archivo de configuración de Apache mas
elaborado con autenticación por ActiveDirectory
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl.crt/server.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
<Directory "/usr/local/nagios/sbin">
AuthType Basic
AuthName "Nagios Access"
AuthLDAPEnabled On
AuthLDAPURL ldap://192.168.1.9:389/OU=Usuarios,DC=test,DC=com,DC=ar?
SamAccountName?sub?(&(objectClass=user)
(memberOf=CN=Monitoreo,OU=Tech,OU=Grupos,DC=test,DC=com,DC=ar))
AuthLDAPBindDN [email protected]
AuthLDAPBindPassword *****
Options All
Order allow,deny
Allow from all
SSLRequireSSL
AllowOverride None
Require valid-user
</Directory>
Alias /nagios "/usr/local/nagios/share"
<Directory "/usr/local/nagios/share">
AuthType Basic
AuthName "Nagios Access"
AuthLDAPEnabled On
AuthLDAPURL ldap://192.168.1.9:389/OU=Usuarios,DC=test,DC=com,DC=ar?
SamAccountName?sub?(&(objectClass=user)
(memberOf=CN=Monitoreo,OU=Tech,OU=Grupos,DC=test,DC=com,DC=ar))
AuthLDAPBindDN [email protected]
AuthLDAPBindPassword *****
Options All
Order allow,deny
Allow from all
SSLRequireSSL
AllowOverride None
Require valid-user
</Directory>
El usuario Bind debe ser un usuario solo con privilegios necesarios para saber
que usuarios existen (ver documentación LDAP), y su contraseña debe estar
almacenada en texto plano en la configuración, y el archivo de configuración
debe tener los debidos permisos para que no sean leídos por otros usuarios.
En la directiva AuthLDAPURL, especificamos
• IP del servidor de autenticacion
• DN donde buscar
• OU=Usuarios,DC=test,DC=com,DC=ar
• Que buscar, en este caso usuarios
• objectClass=user
• Que sean miembros del grupo Monitoreo a su vez dentro del grupo Tech
• memberOf=CN=Monitoreo,OU=Tech,OU=Grupos,DC=test,DC=com,DC=ar
En caso de tener requerimientos mas exhaustivos con respecto a la
autenticación, como restringir el acceso por ip se puede agregar a cada campo
<Directory> los siguientes parámetros.
Order deny,allow
Deny from all
Allow from 127.0.0.1
Con esto restringimos todo el acceso, y lo vamos abriendo IP x IP.
En el caso por ejemplo de que usemos otro sistema de autenticacion como
CAS, deberemos compilar el modulo de apache Auth_CAS, si estammos usando
Debian
podemos
bajarnos
los
archivos
libapache2-mod-authcas_1.0.8.orig.tar.gz libapache2-mod-auth-cas_1.0.8-3.diff.gz, ya que a la fecha
no estan en la rama estable, si no en la inestable, pero tenemos los fuentes
originales y el diff para parchear esos fuentes y ejecutar los scripts que lo
convierten en paquete debian. Antes deberemos tener instalados los paquetes
debhelper y dh-make en el sistema.
# tar xvfzp libapache2-mod-auth-cas_1.0.8.orig.tar.gz
# gzip -dc libapache2-mod-auth-cas_1.0.8-3.diff.gz | patch -p0
patching file libapache2-mod-auth-cas-1.0.8/debian/libapache2-mod-authcas.install
patching file libapache2-mod-auth-cas-1.0.8/debian/watch
patching file libapache2-mod-auth-cas-1.0.8/debian/README.Debian
patching file libapache2-mod-auth-cas-1.0.8/debian/copyright
patching file libapache2-mod-auth-cas-1.0.8/debian/compat
patching file libapache2-mod-auth-cas-1.0.8/debian/control
patching file libapache2-mod-auth-cas-1.0.8/debian/rules
patching file libapache2-mod-auth-cas-1.0.8/debian/changelog
patching file libapache2-mod-auth-cas-1.0.8/debian/auth_cas.conf
patching file libapache2-mod-auth-cas-1.0.8/debian/libapache2-mod-authcas.postinst
patching file libapache2-mod-auth-cas-1.0.8/debian/libapache2-mod-auth-cas.docs
patching file libapache2-mod-auth-cas-1.0.8/debian/auth_cas.load
patching file libapache2-mod-auth-cas-1.0.8/debian/libapache2-mod-authcas.lintian-overrides
patching file libapache2-mod-auth-cas-1.0.8/debian/libapache2-mod-auth-cas.dirs
patching file libapache2-mod-auth-cas-1.0.8/debian/README.source
patching file libapache2-mod-auth-cas-1.0.8/debian/patches/00list
patching file libapache2-mod-auth-cas-1.0.8/debian/patches/10_ssl_libs.dpatch
libapache2-mod-auth-cas-1.0.8# debian/rules binary
...
dpkg-deb: building package `libapache2-mod-auth-cas' in `../libapache2-mod-authcas_1.0.8-3_i386.deb'.
Con eso tenemos el paquete libapache2-mod-auth-cas listo para funcionar,
para instalarlo deberemos ejecutar el comando dpkg -i libapache2-mod-authcas_1.0.8-3_i386.deb, luego ejecutar el comando a2enmod auth_cas, con lo
cual habilitamos ese modulo en la ejecucion del servicio Apache.
En el archivo de configuración del site de Nagios, deberemos incluir las
siguientes lineas.
CASAllowWildcardCert On
#CASCookiePath /tmp/mod_auth_cas/
CASDebug On
CASValidateServer Off
CASValidateDepth 9
CASLoginURL https://servidorcas/cas/login
CASValidateURL https://servidorcas/cas/proxyValidate
CASTimeout 7200
CASIdleTimeout 7200
En la directiva CASCookiePath, especificamos un directorio temporal donde
alojar las cookies, por default en debian es /var/cache/apache2/mod_auth_cas
Luego en cada entrada Directory eliminamos todas
autenticacion y las cambiamos a solo esta AuthType CAS.
las
entradas
de
Deberemos reiniciar el servicio Apache para que los cambios tengan efecto.
Configuración de Email
Para el envío de notificaciones por parte de Nagios es necesario configurar un
MTA (Agente de Transporte de Correos), por lo general suele estar previamente
configurado el Sendmail en el caso de que nos basemos en un CentOS, o un
Postifx tratándose de un SuSE o Debian.
En caso de que utilizemos el paquete de Postfix disponible en la distribución, y
debamos utilizar otro servidor saliente SMTP dentro de la red, deberemos
configurar el relayhost apuntando al servidor SMTP de la red local ej
192.168.1.110, quedando el archivo /etc/postfix/main.cf con las siguientes
entradas de configuración.
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
myhostname = nagios
mydomain = midominio.net
inet_interfaces = $myhostname
unknown_local_recipient_reject_code = 550
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = maildrop
html_directory = /usr/share/doc/packages/postfix/html
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/packages/postfix/samples
readme_directory = /usr/share/doc/packages/postfix/README_FILES
mail_spool_directory = /var/mail
canonical_maps = hash:/etc/postfix/canonical
virtual_maps = hash:/etc/postfix/virtual
relocated_maps = hash:/etc/postfix/relocated
transport_maps = hash:/etc/postfix/transport
sender_canonical_maps = hash:/etc/postfix/sender_canonical
masquerade_exceptions = root
masquerade_classes = envelope_sender, header_sender, header_recipient
program_directory = /usr/lib/postfix
inet_interfaces = 192.168.1.4
masquerade_domains =
mydestination = $myhostname, localhost.$mydomain
defer_transports =
disable_dns_lookups = no
relayhost = 192.168.1.110
content_filter =
mailbox_command =
mailbox_transport =
smtpd_sender_restrictions = hash:/etc/postfix/access
smtpd_client_restrictions =
smtpd_helo_required = no
smtpd_helo_restrictions =
strict_rfc821_envelopes = no
smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination
smtp_sasl_auth_enable = no
smtpd_sasl_auth_enable = no
smtpd_use_tls = no
smtp_use_tls = no
alias_maps = hash:/etc/aliases
mailbox_size_limit = 0
message_size_limit = 10240000
Siendo los parámetros : inet_interfaces la ip propia por cual salir, si tenemos
una sola placa de red, pondremos esa ip, relayhost es el host que nos
realizará el envío SMTP.
PNP4Nagios
Para la ejecución de almacenamiento de gráficas deberemos configurar ciertos
comandos que obtengan los resultados de la ejecución de comandos y
servicios, para ellos deberemos agregar y/o modificar en la configuración de
Nagios
Modo simple
Se ejecutara el procesamiento de perfdata, por la ejecucion de cada comando.
nagios.cfg
enable_environment_macros=1
service_perfdata_command=process-service-perfdata
host_perfdata_command=process-host-perfdata
commands.cfg
define command {
command_name
command_line
}
define command {
command_name
command_line
HOSTPERFDATA
}
process-service-perfdata
/usr/bin/perl /usr/local/nagios/libexec/process_perfdata.pl
process-host-perfdata
/usr/bin/perl /usr/local/nagios/libexec/process_perfdata.pl -d
Modo avanzado
Se vuelca la informacion de perfdata en una cola para luego ser procesada por
un proceso en segundo plano, lo cual libera gran carga del CPU.
nagios.cfg
process_performance_data=1
#
# service performance data
#
service_perfdata_file=/usr/local/nagios/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$\tSERVICEOUTPUT::
$SERVICEOUTPUT$
service_perfdata_file_mode=a
service_perfdata_file_processing_interval=15
service_perfdata_file_processing_command=process-service-perfdata-file
#
# host performance data starting with Nagios 3.0
#
host_perfdata_file=/usr/local/nagios/var/host-perfdata
host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::
$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::
$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::
$HOSTSTATETYPE$\tHOSTOUTPUT::$HOSTOUTPUT$
host_perfdata_file_mode=a
host_perfdata_file_processing_interval=15
host_perfdata_file_processing_command=process-host-perfdata-file
Directivas
• service_perfdata_file
• Ruta al archivo temporal que debe contener los datos de rendimiento.
• service_perfdata_file_template
• Formato del archivo temporal. Los datos se definen utilizando Nagios
macros.
• service_perfdata_file_mode
• Opción “a” especifica que los datos se insertan como anexo.
• service_perfdata_file_processing_interval
• El intervalo de procesamiento es de 15 segundos
• service_perfdata_file_processing_command
• El comando que habrá de ejecutarse durante dicho intervalo.
commands.cfg
define command{
command_name
process-service-perfdata-file
command_line
/bin/mv /usr/local/nagios/var/service-perfdata
/usr/local/nagios/var/spool/perfdata/service-perfdata.$TIMET$
}
define command{
command_name
process-host-perfdata-file
command_line
/bin/mv /usr/local/nagios/var/host-perfdata
/usr/local/nagios/var/spool/perfdata/host-perfdata.$TIMET$
}
Luego se deja ejecutando en segundo plano el demonio npcd para procesar la
cola de mensajes.
Nota: en modo avanzado con NPCD se puede deshabilitar la opcion
enable_environment_macros para ahorrar carga de CPU, ya que en este modo
esta ya no es requerida.
Interfaz web
Luego en el template que vayamos a utilizar deberemos agregar estas
directivas :
Para los hosts
action_url /nagios/pnp/index.php?host=$HOSTNAME$
Para los servicios
action_url /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$
En los clientes
Podemos elegir monitorear los clientes por medio del protocolo ICMP, SNMP o
de mecanismos como ver si tenemos x puerto abierto, o ciertos mensajes de
respuesta, aqui se comentan los protocolos mas comunes para monitorear
estados de equipos (ICMP/SNMP) o servicios (SNMP).
ICMP
El protocolo ICMP (Internet Control Message Protocol) puede ser considerado
como parte de la capa IP. La especificación completa de este protocolo se
encuentra en RFC 792. Aunque sus mensajes son encapsulados en datagramas
IP como cualquier otro protocolo de capa superior, su uso corresponde a
mensajes especiales de la propia capa de red, aunque también pueden acceder
a él las propias aplicaciones (por ejemplo el programa ping).
Algunos ejemplos de uso de ICMP son: obtención de máscaras de red (solicitud
y respuesta), obtención de marcas de tiempo (solicitud y respuesta),
condiciones de error del tipo “port unreachable” o “se necesita fragmentar el
datagrama habiéndose solicitado la no-fragmentación”, petición y respuesta de
eco para comprobar la actividad de otro host, información sobre el estado de
las comunicaciones en una red, etc.
Algunas consultas ICMP
Los mensajes de query incluyen tras la cabecera 2 bytes de identificación, para
que el cliente distinga las respuestas dirigidas a él de las dirigidas a otros
procesos, y 2 btes de número de secuencia, para que el cliente pueda
identificar 'requests' con 'replays'. La generación de replys suele correr a cargo
del kernel (no es un proceso de usuario). Los mensajes ICMP de 'query' más
importantes son:
• Petición/respuesta de máscara: Aunque normalmente se usa DHCP,
también es posible para el host hacer una petición durante el proceso de
arranque para obtener la máscara y una petición RARP para obtener su IP. La
petición de máscara suele enviarse en difusión. Un servidor de máscaras se
encarga de contestar.
• Petición/respuesta de marca de tiempo: Se utiliza para conocer el
tiempo que un host tarda en procesar un mensaje y contestarlo o para
sincronizar relojes entre hosts. Los tiempos se ponen en milisegundos desde
las 0h UTC (Tiempo Coordinado Universal). Se proveen tres campos, a parte
de los anteriormente citados para este tipo de mensajes. 'Marca de tiempo
de generación', a rellenar por el emisor, y 'Marca de tiempo de recepción', y
'Marca de tiempo de transmisión', a rellenar por el receptor. Los significados
de los campos resultan evidentes.
• Solicitud/anuncio de router: Se trata de una forma de inicializar la tabla
de enrutamiento. Tras el arranque, un host envía en broadcast o multicast un
mensaje de solicitud de router. Uno o más routers responderán con mensajes
de anuncio de router. Esto lo podrán hacer periódicamente permitiendo a los
hosts actualizar sus tablas de enrutamiento.
• Petición/respuesta de eco: Se utiliza para conocer si un host está en red.
El mensaje ICMP contiene unos datos OPCIONALES cuyo contenido es
irrelevante. Muchos SO implementan este mensaje mediante el programa
ping. En las implementaciones UNIX de ping el campo identificador suele
asociarse con el ID del proceso que envía el request. Esto permite identificar
las respuestas si hubiera varias instancias de ping corriendo en el mismo
host. En el campo de secuencia, se suele llevar un contador que permite ver
si se han perdido, duplicado o desordenado paquetes, cosa típica en la capa
IP sobre la que se encapsulan los mensajes ICMP.
Veamos un ejemplo de la salida del programa ping.
[deivid@localhost ~]$ ping www.virtuamanager.com
PING virtuamanager.com (213.194.149.188) 56(84) bytes of data.
64 bytes from virtuamanager.com (213.194.149.188): icmp_seq=1 ttl=56
ms
64 bytes from virtuamanager.com (213.194.149.188): icmp_seq=2 ttl=56
ms
64 bytes from virtuamanager.com (213.194.149.188): icmp_seq=3 ttl=56
ms
64 bytes from virtuamanager.com (213.194.149.188): icmp_seq=4 ttl=56
ms
64 bytes from virtuamanager.com (213.194.149.188): icmp_seq=5 ttl=56
ms
64 bytes from virtuamanager.com (213.194.149.188): icmp_seq=6 ttl=56
ms
64 bytes from virtuamanager.com (213.194.149.188): icmp_seq=7 ttl=56
ms
time=42.6
time=41.8
time=41.6
time=43.7
time=42.7
time=42.2
time=46.2
--- virtuamanager.com ping statistics --7 packets transmitted, 7 received, 0% packet loss, time 6005ms
rtt min/avg/max/mdev = 41.666/43.038/46.270/1.477 ms
ALGUNOS ICMP'S DE ERROR
Ya se ha dicho que el formato de los mensajes de error tan sólo incluye,
además de la cabecera, una copia de la cabecera IP del datagrama que generó
el error y los 8 primeros bytes del datagrama. En algunos de los ejemplos que
siguen veremos la razón de ser de este formato:
• Destination unreachable: Este tipo de mensajes de error se generan
cuando por alguna razón, el datagrama no pudo alcanzar su destino (puerto,
host, red inalcanzable, necesidad de fragmentar con bit DF activado…). La
forma de comunicar este error a la capa superior es copiando la cabecera IP
en el propio mensaje de error. Gracias al campo 'protocolo' el módulo ICMP
que lo reciba sabrá asociarlo con el protocolo adecuado. Supongamos que se
produce un 'port unreachable' en el envío de un datagrama UDP. La cabecera
IP permite identificar que el error se produjo en el protocolo UDP, y además
esto sirve para interpretar los 8 bytes adicionales, que pertenecerán a la
cabecera UDP. Estos contendrán los puertos origen y destino (ver tema UDP).
El puerto de origen puede servir para asociar el error con un determinado
proceso de usuario (ej. puerto 2924 asociado a un cliente tftp), mientras que
el destino nos indica qué puerto originó el error 'port unreachable'.
Otro ejemplo, al intentar hacer ping al otro equipo de la red, que está apagado,
se obtiene lo siguiente:
[deivid@localhost ~]$ ping 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of
From 192.168.1.100 icmp_seq=2 Destination Host
From 192.168.1.100 icmp_seq=3 Destination Host
From 192.168.1.100 icmp_seq=4 Destination Host
From 192.168.1.100 icmp_seq=6 Destination Host
From 192.168.1.100 icmp_seq=7 Destination Host
data.
Unreachable
Unreachable
Unreachable
Unreachable
Unreachable
From 192.168.1.100 icmp_seq=8 Destination Host Unreachable
--- 192.168.1.2 ping statistics --9 packets transmitted, 0 received, +6 errors, 100% packet loss, time 8002ms
, pipe 3
Se han producido mensajes ICMP de error en respuesta a mensajes ICMP de
query, lo cual SI está permitido, como ya se ha dicho.
• Source quench: Este tipo de mensaje es generado por un router con
problemas de congestión para avisar al host fuente de que reduzca el flujo de
transmisión. Es muy poco usado, normalmente los routers se limitan a tirar
paquetes y a intentar solucionar la congestión mediante algoritmos de
enrutamiento.
• Parameter problem: Si un router intermedio o el host destino encuentran
un problema en la cabecera IP que le obliga a desecharlo, puede enviar un
mensaje ICMP de este tipo al host fuente. Si el código es cero, un puntero
marca el lugar de la cabecera en el que se produjo el error.
• Redirección: Son enviados por un router al remitente de un datagrama IP
cuando éste debería haber sido enviado a través de otro router.
• Time Exceeded: Son enviados al remitente de un datagrama IP cuando se
cumple el tiempo de vida máximo del paquete. Esto puede ocurrir porque el
campo TTL del datagrama se haya puesto a 0 en un router, o bien el tiempo
de reensamblado de fragmentos se haya cumplido en el destino. Basándose
en este mensaje, y variando el campo TTL de un mensaje de petición de eco
es posible obtener la ruta a un destino. Si el TTL es insuficiente, se recibirá
un mensaje de tiempo excedido por cada router donde al recalcular el TTL
valga 0, y un mensaje de respuesta de eco cuando el TTL sea suficiente para
llegar al destino. El comando tracert de windows se basa en este algoritmo.
SNMP (Simple Network Management Protocol)
Protocolo Simple de Administración de Red o SNMP es un protocolo de la capa
de aplicación que facilita el intercambio de información de administración entre
dispositivos de red. Es parte de la familia de protocolos TCP/IP. SNMP permite a
los administradores supervisar el desempeño de la red, buscar y resolver sus
problemas, y planear su crecimiento. Podemos conocer datos internos de
dispositivos a monitorear, ej uso de CPU, Memoria, Disco, Uptime etc.
Se basa entre gestor y agentes.
Los agentes se centran en recopilar cierta información y mantenerla
organizada para que el gestor pueda acceder a ella cuando lo necesite. El
agente también puede mandar notificaciones al gestor sobre problemas o
información relevante sin que el gestor se lo solicite.
El gestor controla y actúa sobre los elementos de la red, controlando la
información que recopilan los agentes se pueden tomar decisiones y actuar
sobre la red para mejorar los aspectos que se necesiten. Para ello se basa en
tres elementos:
• SNMP: Es el protocolo entre el gestor y el elemento de red, se suele utilizar
UDP
• SMI: (Structure of Management Information): conjunto de estructuras y
esquemas de identificación para definir las MIB´s
• MIB: (Management Information Base): especifica qué variables mantienen los
elementos de la red (agentes)
SMI (Structure of Management Information)
SMI es el conjunto de estructuras y esquemas para definir elementos de las
MIB. Dichas estructuras están formateadas en ASN.1 (Abstract Synstax
Notation One), indicando cómo debe ser el nombre, la sintaxis y el método de
codificación de los datos para su transmisión por la red.
Un objeto en SMI consta de los siguientes campos:
• Objeto: Literal (Object descriptor) con la etiqueta que identifica el objeto
• Sintaxis: Puede ser alguno de los siguientes tipos ASN.1:
• SimpleSyntax (INTEGER, OCTET STRING, OBJECT IDENTIFIER, NULL)
• ApplicationSyntax (NetworkAddress (direcciones ip de 32 bits), Counter
(enteros no negativos de tamaño 32bits), Gauge (contadores que
mantienen el maximo valor alcanzado, pueden decrementarse en algun
momento), TimeTicks (centésimas de segundo desde el evento deseado),
Opaque (información arbitraria))
• Otros tipos (RFC 1155).
• Acceso: Puede ser: read-only, read-write, write-only, not-acessible. SMIv2
incluye además read-create, y deja de usar write-only
• Status: Puede ser: mandatory (en SMIv2 se indica como current), que tienen
que ser implementadas por cualquier versión de la MIB que incluya ese
modulo, optional, que pueden faltar sin que eso cause ningún problema ( en
vez de optional, SMIv2 incluye deprecated, para objetos que ya no se usan, y
que por tanto, no tienen por qué estar implementados), u obsolete, que han
dejado de mantenerse y revisarse.
• Descripción: Definición textual de la semántica del tipo de objeto. No es
codificable mediante una computadora, es una descripción para
programadores y administradores que pueden leerla para entender el
funcionamiento de la MIB.
La definición termina indicando bajo qué nodo del árbol de OIDs (ver la
siguiente sección) debe situarse y con qué número a efectos de identificación
MIB: (Management Information Base)
La información requerida de un sistema se almacena en las MIBs usando una
estructura jerárquica que contiene los identificadores de objeto descritos
mediante ASN.1.
Esta jerarquía de árbol contiene los elementos que pueden ser de tipo escalar o
tablas de datos. Estos objetos cuelgan en el árbol de la MIB de la rama
correspondiente a la organización que mantiene dicha estructura. Se nombra a
los ejemplares de la MIB mediante su identificador de objeto que es una
cadena de enteros que representa como cuelga el objeto del nodo raíz. Por
ejemplo IP es el (1.3.6.1.2.1.4.)
Esta es la estructura de la MIB-II (RFC 1213) y sus diferentes subgrupos. Estas
son algunas de las variables que se mantienen en cada grupo:
• Grupo system: Descripción de la entidad, identificador, tiempo desde
arranque, nombre del administrador, localización física, servicios ofrecidos
• Grupo interfaces: Número de interfaces del sistema
• Grupo at: Número de interfaz, Dirección física, Dirección IP
• Grupo ip: Si el sistema hace forward, valor del TTL, número de datagramas
recibidos y enviados, errores, datagramas con protocolo no válido, etc.
• Grupo icmp: cuatro contadores generales: número total de mensajes ICMP de
entrada y salida con o sin errores y 22 contadores para los diferentes
mensajes ICMP
• Grupo tcp: Algoritmo de retransmisión, timeout en milisegundos, número de
conexiones TCP, número de transiciones entre los diferentes estados de TCP,
número de segmentos recibidos y enviados, número de segmentos
retransmitidos, con error y con el flag RST activado.
• Grupo udp: Número de datagramas enviados y recibidos, datagramas sin
proceso receptor
• Grupo egp: Número de mensajes de encaminamiento recibidos con y sin
error, número de mensajes generados en el sistema, estado del sistema.
Funcionamiento del protocolo
Como sigue el paradigma gestor-agente la los comandos son para solicitar,
modificar o devolver información de la MIB, así como envíar notificaciones
(traps). Las operaciones disponibles en SNMPv1 son:
• Get-request : Solicitar el valor de una o varias variables
• Get-next-request : Solicitar el valor de la siguiente variable o grupo de
variables. Se utiliza para recorrer tablas, celda a celda.
• Set-request : Dar valor a una variable
• Get-response : Devolver el valor de una o varias variables
• Trap : El agente notifica al gestor de alguna situación especial sucede en el
elemento de red. Reinicialización, fallo y recuperación en un enlace
Posteriormente, a partir de la versión 2 se introdujo la operación de get-bulkrequest, que permite realizar varios get-next seguidos sin tener que hacer
varias peticiones. También se introdujo la operación de inform, para que
distintos gestores puedan intercambiarse notificaciones.
SNMPv1
Ejemplo de configuración SNMPv3 para un sistema típico Linux/UNIX/AIX/Solaris
etc
rocommunity public 192.168.1.4
syscontact Sysadmin (root@localhost)
syslocation Server Room
view all included .1
access notConfigGroup "" any noauth exact systemview none none
access notConfigGroup "" any noauth exact all none none
Donde rocommunity es una comunidad de solo lectura, de nombre public y que
solo se le permita el acceso desde la ip 192.168.1.4, el nombre de la
comunidad define la dificultad de adivinar su acceso, por eso es recomendable
que tenga un nombre similar a una contraseña.
SNMPv3
Configuramos un usuario que se llama nagios con autenticacion, en la
siguiente linea lo creamos con una clave almacenada en texto plano en este
archivo y luego encriptada en MD5 y DES
Ejemplo de configuración SNMPv3 para un sistema típico Linux/UNIX/AIX/Solaris
etc
rouser nagios auth
createUser nagios MD5 "ClaV3RfsTtD2" DES
Debemos reiniciar el servicio SNMP y luego podemos hacer algo como esto
snmpget -v 3 -u nagios -l authNoPriv -a MD5 -A ClaV3RfsTtD2 127.0.0.1
sysUpTime.0
NOTA: En Debian deberemos editar el archivo /etc/default/snmpd, modificando
la siguiente linea
De:
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1'
A:
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid'
Para que el servicio se accesible por red.
SNMPv1 en Windows
En los equipos Windows se configurara una community RO (read only)
denominada public, acceso para la ip que corresponda al servidor que tiene
acceso al SNMP, en este caso nuestro nagios.
Para ello nos situamos en el panel de control dentro de agregar programas en
la sección de componentes.
Una vez dentro nos situamos dentro de Herramientas de administración y
supervisión o Management and Monitoring tools
Dentro de ella nos situamos sobre la opcion SNMP y la tildamos
Luego en la Administración de Servicios, nos dirigiremos a las propiedades del
servicio SNMP
Dentro de ella nos encontraremos con un cuadro de dialogo
Configuraremos el accesso a la ip del servidor con acceso SNMP
Y luego la comunidad de aceso a los datos SNMP
Luego de realizados los cambios de configuración procederemos a reiniciar el
servicio para que estos surtan efecto.
A veces en Windows es necesario configurar el servicio de Firewall para
permitir las consultas por medio SNMP.
En el Monitoreo
Creando directivas
Debemos crear algunas entradas de configuración para especificar donde
encontramos los servicios, grupos, contactos etc, las mismas debemos
incluirlas en nuestro archivo de configuración nagios.cfg
# Directorio con la configuración de grupos de Hosts de los Servidores
cfg_dir=/usr/local/nagios/etc/hostgroups
# Directorio con la configuración de grupos de servicios de los Servidores
cfg_dir=/usr/local/nagios/etc/servicegroup
# Directorio con la configuración de contactos
cfg_dir=/usr/local/nagios/etc/contacts
# Directorio con la configuración de grupos de contacto
cfg_dir=/usr/local/nagios/etc/contactgroups
# Directorio con la configuración de servicios
cfg_dir=/usr/local/nagios/etc/services
# Directorio con la configuración de los comandos
cfg_dir=/usr/local/nagios/etc/commands
# Directorio con la configuración de los equipos a monitorear
cfg_dir=/usr/local/nagios/etc/servers
Con la directiva cfg_dir el indicamos Nagios que tome como configuración los
archivos con extencion “cfg” encontrados en tal directorio.
Configuración de alertas
Agregando Grupos de contacto
Para que el Nagios envíe notificaciones sobre el estado de los servicios es
necesario definir grupos a los cuales enviárselas, y dentro de ellos estarán los
miembros a cuales enviarlos
A continuación podemos ver una configuración típica de un grupo de contactos
define contactgroup{
contactgroup_name
alias
members
}
admin
Administrators
admin-sap,admin-windows
define contactgroup{
contactgroup_name
alias
members
}
{nombre del grupo contacto}
{descripcion}
{miembros del grupo}
contactgroup_name
Nombre que se le asignara al grupo de contacto
alias
Descripción corta para identificar al grupo
members
Miembros del grupo separados por comas
Se
deberá
crear
el
{nombregrupodecontacto.cfg}
anteriormente explicadas.
archivo
con
las
{nagios-dir}/etc/contactgroups/
entradas
correspondientes
Agregando Contactos
Para recibir las notificaciones de Nagios es necesario generar contactos que
estén incluidos en diferentes grupos de contactos, una configuración simple
para un contacto se ve como la siguiente entrada
define contact{
contact_name
alias
contactgroups
service_notification_period
host_notification_period
service_notification_options
host_notification_options
service_notification_commands
host_notification_commands
}
define contact{
contact_name
alias
admin
Administrador Nagios
admin
24x7
24x7
w,u,c,r
d,u,r
notify-by-email
host-notify-by-email
root@localhost
{nombre del contacto}
{descripcion del contacto}
contactgroups
service_notification_period
servicios}
host_notification_period
hosts}
service_notification_options
host_notification_options
service_notification_commands
servicio}
host_notification_commands
host}
}
{grupo de contactos al cual pertenece}
{priodo de tiempo de notificaciones de
{priodo de tiempo de notificaciones de
{opciones de notificacion por servicio}
{opciones de notificacion por host}
{comando de notificacion a utilizar por
{comando de notificacion a utilizar por
{direccion de email del contacto}
contact_name
Nombre literal a asignarle al contacto
alias
Alias descriptivo del contacto, ej Administrador de Routers
contactgroups
Grupos de contactos a los cuales pertenece
service_notification_period
Periodo de tiempo en el cual recibir notificaciones sobre el estado de los
servicios
host_notification_period
Periodo de tiempo en el cual recibir notificaciones sobre el estado de los hosts
service_notification_options
Opciones de cuando realizar una notificación sobre el estado de un servicio
host_notification_options
Opciones de cuando realizar una notificación sobre el estado de un host
service_notification_commands
Comando para realizar la notificación del estado del servicio, podemos definir
múltiples comandos
host_notification_commands
Comando para realizar la notificacion del estado del host, podemos definir
múltiples comandos
Email perteneciente al contacto en el cual recibira las notificaciones por email.
Para que esto funcione se debe tener correctamente configurado el mail
delivery local.
Se deberá crear el archivo {nagios-dir}/etc/contacts/{nombredecontacto.cfg}
con las entradas correspondientes anteriormente explicadas.
Alertas en formato HTML
Podemos estilizar nuestras alertas por email de nagios con colores, símbolos eh
imágenes.
Aquí adjunto dos scripts
modificados por mi :
descargados
de
nagiosexchange
que
están
Alertas por SMS
Podemos configurar alertas SMS de forma muy simple con el software Gnokii.
Ejemplo de archivo de configuración de Gnokii
allow_breakage = 0
bindir = /usr/local/sbin/
connection = serial
connection = serial
[connect_script]
debug = on
[disconnect_script]
[fake_driver]
[flags]
[global]
[gnokii]
[gnokiid]
initlength = default
[logging]
model = AT
model = fake
[phone_fake]
port = /dev/ttyUSB3
port = foobar
rlpdebug = off
serial_baudrate = 19200
smsc_timeout = 10
sms_inbox = /tmp/sms
TELEPHONE = 12345678
use_locking = yes
xdebug = off
[xgnokii]
Modo de uso :
echo “Hola mundo” | sudo gnokii –sendsms 1155667798
Definición como comando de notificación, (podemos agregarlo como comando
extra al contacto, para que ademas del comando común de notificación por
email tambien se ejecute este para el envío de la alerta por sms).
Notemos que lo ejecutamos por ssh, es para una situación hipotética de que el
modem USB 3G de nuestro proovedor de telefonía celular este enchufado en
otra maquina de nuestra red.
define command {
command_name
host-notify-by-sms
command_line
ssh [email protected] "echo "Host '$HOSTNAME$' esta
$HOSTSTATE$ $HOSTOUTPUT$" | sudo gnokii --sendsms $CONTACTPAGER$"
}
define command {
command_name
service-notify-by-sms
command_line
ssh [email protected] "echo 'Servicio $SERVICEDESC$ en Host
$HOSTNAME$ IP $HOSTADDRESS$ State $SERVICESTATE$ Info $SERVICEOUTPUT$' | sudo
gnokii --sendsms $CONTACTPAGER$"
}
Agregando Comandos
En Nagios los encargados de recabar los datos del monitoreo, de mostrar
alertas, de todas las tareas, son los comandos.
Los mismos se dividen en comandos de performance y en comandos de
chequeo, los primeros son utilizados para algunos casos en particular.
Los comandos de chequeo no traen datos de los equipos a monitorear, como
consumo de CPU, Memoria, Disco, procesos corriendo, puertos abiertos etc, es
decir todos los datos necesarios de la monitoria.
Los comandos de performance se utilizan cuando hay que guardar ciertos
datos o enviarlos a algún host externo etc, con información de algún servicio.
Una entrada en un archivo de configuración de comandos puede ser como la
siguiente
define command{
command_name check_snmp_mem
command_line $USER1$/check_snmp_mem.pl -H $HOSTADDRESS$ $ARG1$ -w $ARG2$
-c $ARG3$ $ARG4$
}
define command{
command_name {nombre del comando}
command_line {datos de ejecucion}
}
command_name
El nombre que el comando tendra para nuestra configuración personal de
Nagios
command_line
Modo del cual Nagios ejecutara el comando en cuestión, con su ruta física y
argumentos Lo que vemos en entre signos $ son variables internas de nagios,
llamadas macros, las mas comunes son:
$USER1$ : Contiene datos del path de ejecución de los plugins de Nagios
$HOSTADDRESS$ : Tiene la IP de hosts desde el cual se esta corriendo el
servicio
$ARG1$ $ARG2$ $ARG3$ $ARG4$ : Son los números en orden de
argumentos que recibe el comando a ejecutar
Podemos definir nuestros propios macros seteando variables en el archivo
resource.cfg
Se deberán agregar al archivo {nagios-dir}/etc/commands.cfg las entradas
correspondientes anteriormente explicadas.
Agregando Grupos de Servicios
Los grupos de servicio se utilizan para denotar un variedad de servicios sobre
otros, debemos tener asignado aunque sea un servicio a ese grupo por que si
no de lo contrario el Nagios mostrara un error al arranque, para eso lo
asignamos en la propiedad servicegroups de un servicio en particular. Ejemplo
de una entrada de grupo de servicios:
define servicegroup{
servicegroup_name
alias
}
lotus_response
Lotus Reponse Services
define servicegroup{
servicegroup_name
alias
}
{nombre corto del grupo de servicio}
{alias descriptivo completo del grupo}
Se
deberá
crear
el
{nombregrupodeservicios.cfg}
anteriormente explicadas.
archivo
con
las
{nagios-dir}/etc/servicegroup/
entradas
correspondientes
Agregando Servicios
A continuacion se muestra una tipica entrada de configuración de un servicio
define service {
use
host_name
hostgroup_name
service_description
servicegroups
is_volatile
check_period
max_check_attempts
normal_check_interval
retry_check_interval
contact_groups
notification_interval
notification_period
notification_options
check_command
}
define service {
use
host_name
hostgroup_name
servicio}
service_description
servicegroups
is_volatile
check_period
max_check_attempts
normal_check_interval
chequeos}
retry_check_interval
contact_groups
max_check_attempts
notification_interval
notificaciones}
notification_period
notification_options
check_command
}
use
Template de servicio a utilizar
windows
srv1,srv2
servidores-windows
Verification disco F:
storage
0
24x7
3
5
1
windows
240
24x7
c,r
check_snmp_storage!^F!60!90!-C public!-r
{template de servicio a utilizar}
{hosts que ejecutan dicho servicio}
{grupos de host que ejecutan ese
{descripcion del servicio}
{grupo al cual pertenece}
{si el servicio es volatil}
{periodo de tiempo para el chequeo}
{maximo de intentos de chequeo}
{intervalo de tiempo a programar los
{intervalo de tiempo para un re-chequeo}
{grupo de contacto};
{maxima cantidad de chequeos}
{intervalo de tiempo entre
{priodo de tiempo de notificaciones}
{cuando enviar notificaciones}
{comando de chequeo con sus argumentos}
host_name
Nombre del o los host a los cuales esta asignado dicho servicio
hostgroup_name
Nombre del grupo de host en los cuales esta asignado dicho servicio, es útil
para cuando se vuelve tedioso poner uno por uno los nombres de los hosts a
los cuales se asigna el servicio
service_description
Alias descriptivo del nombre del servicio
contact_groups
Grupos de contacto a los que enviar las notificaciones
max_check_attempts
Maxima cantidad de chequeos a efectuar por Nagios, antes de enviar un OK
como resultado
normal_check_interval
Intervalo de tiempo antes de programar un nuevo chequeo del servicio
retry_check_interval
Intervalo de tiempo antes de realizar un re-chequeo del servicio
notification_interval
Esta directiva se utiliza para definir el número de las “unidades del tiempo”
para esperar antes de re-notificar a un contacto que este servidor todavía está
abajo o inalcanzable. A menos que se haya cambiado la directiva
interval_length del valor prefijado de 60, este número significará minutos. Si
este valor se establece a 0, Nagios re-no notificará contactos sobre los
problemas para este host - solamente una notificación del problema será
enviada.
notification_period
Periodo de tiempo en el cualse envia notificacion y notificacion
notification_options
Esta directiva indica a Nagios en que momentos debe enviar notificaciones de
estado
• d = DOWN cuando el host esta caido
• u = UNREACHABLE cuando el host no es visible o es inalcanzable
• r = RECOVERY (OK) cuando el host se recupero
• f = FLAPPING cuando es de estado cambiante
• n = NONE no enviar notificaciones
check_command
Comando para efectuar el chequeo de dicho servicio
Se deberá crear el archivo {nagios-dir}/etc/services/{nombreservicio.cfg} con
las entradas correspondientes anteriormente explicadas.
Dependencia del estado del servicio por el estado de otro servicio
En caso en los cuales el estado de un servicio dependa de la disponibilidad o el
estado de otro, se pueden definir dependencias. Una entrada a modo ejemplo
puede ser:
define servicedependency{
host_name Host A
service_description Service A
dependent_host_name Host B
dependent_service_description Service D
execution_failure_criteria u
notification_failure_criteria n
}
define servicedependency{
host_name {host donde se ejecuta el servicio dependiente}
service_description {servicio dependiente}
dependent_host_name {host donde se ejecuta el servicio del cual se depende}
dependent_service_description {servicio del cual se depende}
execution_failure_criteria {criterio para establecer el estado}
notification_failure_criteria {notificar segun x estado}
}
host_name
Nombre del o los host dentro de los cuales se ejecuta el servicio dependiente
service_description
Descripcion del servicio dependiente, debe ser igual a la entrada que aparece
en la configuracion del servicio.
dependent_host_name
Host donde se esta ejecutando el servicio del cual se depende
dependent_service_description
Nombre descriptivo que corresponde al servicio del cual se depende, debe ser
igual al de su configuracion de servicio
execution_failure_criteria
Criterios para definir el estado del servicio
notification_failure_criteria
En base a que estado realizar las notificaciones, si esta caido, si esta ok o no
realizar notificaciones
Informacion extendida de servicio
En algunos casos podemos agregar un link informativo u externo haciendo
referencia al servicio en ejecution
define serviceextinfo{
host_name linux2
service_description Carga del sistema Linux
notes Carga sistema
notes_url http://localhost/cargalinux.pl?host=linux2&service=Carga+Sistema
icon_image carga.png
icon_image_alt Alertas de carga
}
define serviceextinfo{
host_name {nombre del host}
service_description {nombre descriptivo del servicio}
notes {nota descriptiva sobre la informacion extra}
notes_url {url donde se encuentra la informacion extra}
icon_image {imagen de icono}
icon_image_alt {texto alternativo de la imagen}
}
host_name
Host donde se ejecuta dicho servicio
service_description
Nombre descriptivo del servicio al cual corresponde la informacion extra
notes
Descripcion sobre “que es” o “a que corresponde” la información extra a
mostrar
notes_url
Url donde encontrar la informacion extra
icon_image
Icono a referenciar el link de la información extra
icon_image_alt
Texto alternativo del icono
Agregando Grupos de Hosts
Los host en nagios de puede agrupar mediante grupos y asi tener un listado
aparte que los diferencia de los demas. por ejemplo tener por un lado los
servidores SAP con Oracle y por otro los servidores Lotus, o Linux y Windows
por separado etc.
Un archivo tipo de grupos de host se presenta a continuacion
define hostgroup {
hostgroup_name
alias
members
}
ramallo
Equipos de Ramallo
ramallo,slnra01,srvrmlofs
define hostgroup {
hostgroup_name
alias
members
}
{nombre del grupo}
{alias descriptivo}
{host miembros}
hostgroup_name
Nombre del grupo de hosts
alias
Alias descriptivo del grupo
members
Host que son miembros del grupo, debemos ingresar el host_name de cada
uno separado por comas ”,”
Se
deberá
crear
el
archivo
{nagios-dir}/etc/hostgroups/
{nombregrupodehosts.cfg} con las entradas correspondientes anteriormente
explicadas.
Agregando Hosts
Para configurar un host con o sin SNMP previamente instalado y configurado
como lo indicado anteriormente, para su posterior monitoreo. Se debe crear
una entrada en la configuracion de Nagios.
Un tipico archivos hosts.cfg
define host{
use
host_name
hostgroup_name
alias
address
parents
contact_groups
max_check_attempts
notification_interval
notification_period
notification_options
}
define host{
use
host_name
hostgroup_name
alias
address
parents
contact_groups
max_check_attempts
notification_interval
notificaciones}
notification_period
notification_options
}
servidores
servidorsap2
servidores-linux
SAP SERVER
192.168.10.84
buenos_aires
linux;
10
120
24x7
d,u,r
{template-host}
{nombre-host}
{grupos al que pertenece este host}
{alias-descriptivo}
{ip}
{host del que depende}
{grupo de contacto};
{maxima cantidad de chequeos}
{intervalo de tiempo entre
{priodo de tiempo de notificaciones}
{cuando enviar notificaciones}
use
Template de host a utilizar
host_name
Nombre del host
hostgroup_name
Grupos a los que pertenece este host
address
Direccion IP del host
parents
Host del que depende y que esta delante suyo, por ejemplo puede ser un
router o un equipo que le brinde la conectividad etc, y en el mapa se dibujara
como dependiente de ese nodo
contact_groups
Grupos de contacto a los que enviar las notificaciones
max_check_attempts
Maxima cantidad de chequeos a efectuar por Nagios, antes de enviar un OK
como resultado
notification_interval
Esta directiva se utiliza para definir el número de las “unidades del tiempo”
para esperar antes de re-notificar a un contacto que este servidor todavía está
abajo o inalcanzable. A menos que se haya cambiado la directiva
interval_length del valor prefijado de 60, este número significará minutos. Si
este valor se establece a 0, Nagios re-no notificará contactos sobre los
problemas para este host - solamente una notificación del problema será
enviada.
notification_period
Periodo de tiempo en el cualse envia notificacion y notificacion
notification_options
Esta directiva indica a Nagios en que momentos debe enviar notificaciones de
estado
• d = DOWN cuando el host esta caido
• u = UNREACHABLE cuando el host no es visible o es inalcanzable
• r = RECOVERY (OK) cuando el host se recupero
• f = FLAPPING cuando es de estado cambiante
• n = NONE no enviar notificaciones
Se deberá crear el un subdirectorio correspondiente al nombre del host y
segun corresponda ubicarlo en el directorio servers/{linux-windows-lotus} o
routers y deentro crear un archivo hosts.cfg con la configuración anteriormente
explicada,
Informacion extendida de host
La informacion extendida de host se utiliza para el look and feel de los host
dentro de los mapas de estado, ya sea tanto el 2D como el 3D
define hostextinfo{
host_name
notes
icon_image
icon_image_alt
vrml_image
statusmap_image
}
define hostextinfo{
host_name
notes
linuxoracle
Servidor Oracle de uniface
oracle.png
Oracle
oracle.png
oracle.gd2
{nombre de host}
{descripcion para el host}