miércoles, 25 de agosto de 2010

Configurar SNMP para monitorizar Windows 7 y K/Ubuntu con Nagios y Centreon

Ya tenemos instalado Nagios y Centreon y monitorizamos Windows 7 con NSClient++ como vemos en los siguientes enlaces.

http://yoadminsis.blogspot.com/2010/08/centreon-219-y-nagios-321-en-ubuntu.html
http://yoadminsis.blogspot.com/2010/08/monitorizar-windows-7-con-nagios.html

Ahora vamos a ver como monitorizar GNU\Linux con SNMP, en concreto, K/Ubuntu y Microsoft Windows 7 Home Premium.

SNMP (Simple Network Management Protocol)

Es un protocolo de gestión de redes sencillo... no muy sencillo pero bueno :-).

Se basa en ficheros MIB que son ficheros de texto que definen un espacio de nombres jerárquico de la forma .1.3.6.1.2... que identifica, mediante un OID (los números separados por puntos), a una variable que recoge los datos del dispositivo de red. También puede tener la forma .iso.org.dod.internet... (como si fuera un nombre dns)

Por ejemplo: la variable .iso.org.(...).system.sysUptime tiene un OID .1.3.6.etc. único y nos dará el tiempo que lleva un sistema levantado.

Normalmente se usa el MIB-II que recoge datos de administración. También hay MIBs que crean fabricantes para sus dispositivos.

Las herramientas usadas en GNU\Linux son SNMP-Net y para Windows hay un servicio que hay que agregar.

  • Agente: Al contrario de lo que parece, este es el servidor (snmpd o el servicio de windows). Proporciona los datos del dispositivo al cliente.
  • Manager: Es el cliente y el que recibe traps o respuestas a peticiones del servidor. El que gestiona lo que se le envía desde el dispositivo. NMS (Network Manager System) Por ejemplo, Nagios.
  • Traps: Trampas son operaciones asíncronas que envía el servidor (agente), sin petición, al manager para informar de algo. El manager recibe el trap y lo gestiona. En Ms Windows está traducido como capturas.

La mayoría de veces se configura SNMP con las versiones 1 o 2c que usan lo que se denomina "community chain" o cadena de comunidad. Esta cadena, por defecto, es public para lectura y private para lectura y escritura. Bien, no os comáis la olla, una community chain es una CONTRASEÑA. Podéis cambiar public y private por la contraseña que queráis (más difícil a poder ser :-D) o crear otras communities. También está la versión 3 que da más seguridad y usa usuario y contraseña, cifrado, etc.

Los puertos usados son 161 y 162 (snmp y snmp-trap)

Configurar GNU\Linux

Si seguimos el tutorial de instalación de nagios, ya tenemos instalado SNMP-Net. Para configurar el servidor Nagios y que sea monitorizado con SNMP debemos seguir este procedimiento. Este procedimiento se sigue para instalarlo en otro GNU\Linux que queramos monitorizar, como Kubuntu.

Los paquetes a instalar son

sudo aptitude install snmp snmpd

Esto nos instala el agente snmpd que recoge datos del equipo GNU\Linux y los envía al gestor cuando este lo pida o envía traps asíncronas y notificaciones. También instala las aplicaciones como snmpwalk, etc. que sirven para usar snmp o testearlo.

Lo primero es configurar /etc/default/snmpd,

$ sudo vim /etc/default/snmpd

# This file controls the activity of snmpd and snmptrapd

# MIB directories.  /usr/share/snmp/mibs is the default, but
# including it here avoids some strange problems.
# Directorio donde están los mibs
export MIBDIRS=/usr/share/snmp/mibs

# snmpd control (yes means start daemon).
# Yes. para que se inicie snmpd
SNMPDRUN=yes

# snmpd options (use syslog, close stdin/out/err).
# Opciones del servidor, debeis añadir la interfaz donde queréis que snmp este activo.
# Si dejáis solo 127.0.0.1 no enviaréis recibiréis nada mas que en localhost, no por la red.
# Pongo aquí la ip 192.168.1.10, puesto que el host Centreon-Server lo tengo añadido a 
# Centreon con esta IP. Si en Centreon (Nagios) añadis hosts GNU\Linux con sus IPs y queréis
# monitorizarlos con snmp debéis poner la IP aquí (en cada host, en este archivo)

#SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1'
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid 192.168.1.10 127.0.0.1'

# snmptrapd control (yes means start daemon).  As of net-snmp version
# 5.0, master agentx support must be enabled in snmpd before snmptrapd
# can be run.  See snmpd.conf(5) for how to do this.
# Para el control de traps.
TRAPDRUN=yes

# snmptrapd options (use syslog).
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'

# create symlink on Debian legacy location to official RFC path
SNMPDCOMPAT=yes

Por otro lado configuramos el archivo /etc/snmp/snmpd.conf que es donde está el grueso de la configuración.

####
# First, map the community name (COMMUNITY) into a security name

# Aquí ponemos la configuración del nombre de seguridad que vamos a usar
# (una especie de usuario) y la contraseña que tiene (community)
# com2sec vale para cualquier dirección ip IPv4 de origen "default" que es de cualquier
# origen. Para IPv6 podemos poner com2sec6. Son ACLs o listas de control de acceso.

#       sec.name  source          community
#com2sec paranoid  default         public

# El nombre de seguridad readonly con contraseña "mipasswordpublica"
# se usará para datos de lectura que enviará el agente (snmpd) al gestor.
# Se permite coger datos desde cualquier origen (default)
com2sec readonly  default         mipasswordpublica

# El nombre de seguridad readwrite con contraseña "mipasswordprivada"
# se usará para datos de lectura que enviará el agente (snmpd) al gestor
# y escritura para modificar las variables snmp del dispositivo gestionado
# (gnu\linux en este caso) desde cualquier origen (default)
com2sec readwrite default         mipasswordprivada

# Eoy a crear una ACL.
# El nombre de seguridad redlocal permite, desde la red 192.168.1.0/24 y con
# la contraseña mipasswordredlocal, recoger datos de este dispositivo.
com2sec redlocal 192.168.1.0/24   mipasswordredlocal

# También para localhost.
com2sec lhostacc  127.0.0.1/32    mipasswordlocal


####
# Second, map the security names into group names:

# Los nombres de seguridad (usuarios, nombres de ACL, o como queramos
# llamarlos) se asignan a un grupo.

# readonly lo hemos asignado a MyROGroup para las versiones
# del protocolo snmp 1 y v2c y usm
# Lo mismo hacemos con el nombre de seguridad readwrite
# Obviamente, podemos cambiar los nombres por los nuestros propios
# pero yo los he dejado por defecto.
# Añado también redlocal al grupo de solo lectura.
# Añado lhostacc al grupo de lectura escritura

#               sec.model  sec.name
group MyROSystem v1        paranoid
group MyROSystem v2c       paranoid
group MyROSystem usm       paranoid
group MyROGroup v1         readonly
group MyROGroup v2c        readonly
group MyROGroup usm        readonly
group MyRWGroup v1         readwrite
group MyRWGroup v2c        readwrite
group MyRWGroup usm        readwrite

group MyROGroup v1         redlocal
group MyROGroup v2c        redlocal
group MyROGroup usm        redlocal

group MyRWGroup v1         lhostacc
group MyRWGroup v2c        lhostacc
group MyRWGroup usm        lhostacc


####
# Third, create a view for us to let the groups have rights to:

# Aquí se crean vistas para después permitir verlas o no a los
# grupos. Las vistas son partes de los arboles MIBS. Por ejemplo
# La vista all es todo el árbol a partir de .1 (.iso)
# La vista system solo recorre la parte del árbol a partir de .system.*

#           incl/excl subtree                          mask
view all    included  .1                               80
view system included  .1.3.6.1.2.1.1
#view system included  .iso.org.dod.internet.mgmt.mib-2.system

####
# Finally, grant the 2 groups access to the 1 view with different
# write permissions:

# Por último, le damos permisos a los grupos que creamos.
# MyROSystem tiene acceso con cualquier sec.model (version protocolo)y
# puede leer la vista system (solo el árbol system) pero no escribir ni notificar.
# A este grupo pertenece el "usuario/ACL" paranoid que estaba comentado así que no se aplica.

# MyROGroup puede leer la vista all, es decir, obtener todos los datos pero no
# puede escribir ni notificar.

# MyRWGroup puede leer, escribir y notificar en todo el arbol con la vista all
# y con cualquier versión del protocolo (sec.model)


#                context sec.model sec.level match  read   write  notif
access MyROSystem ""     any       noauth    exact  system none   none
access MyROGroup ""      any       noauth    exact  all    none   none
access MyRWGroup ""      any       noauth    exact  all    all    all

# -----------------------------------------------------------------------------

###############################################################################
# System contact information
#
# Información del sistema

syslocation Sistema Centreon/Nagios con nombre de host ubults6401.midominio.com
syscontact Francisco J. Bejarano 

# También vamos a monitorizar los procesos mysql y postfix como ejemplo.
# El nombre de los procesos debemos ponerlo exacto a como saldria
# con ps -e (no es igual mysql que mysqld
# Esto nos dice si los procesos están corriendo en la máquina.
# Podemos monitorizar los que queramos incluso el numero que tiene que haber
# corriendo como mínimo o como máximo.

# Mysql
proc mysqld

# Postfix
proc master
proc qmgr
proc pickup

...

###############################################################################
# Subagent control
#

# The agent can support subagents using a number of extension mechanisms.
# From the 4.2.1 release, AgentX support is being compiled in by default.
# To use this mechanism, simply uncomment the following directive.
#
master  agentx

Ahora podemos probar si recibimos datos con snmpwalk y testear si funciona la configuración

$ snmpwalk -v 1 -c mipasswordredlocal 192.168.1.10 prName
UCD-SNMP-MIB::prNames.1 = STRING: mysqld
UCD-SNMP-MIB::prNames.2 = STRING: master
UCD-SNMP-MIB::prNames.3 = STRING: qmgr
UCD-SNMP-MIB::prNames.4 = STRING: pickup

Vemos como los procesos que hemos configurado se muestran. Hemos dicho a snmpwalk que use la version 1 del protocolo, la community "mipasswordredlocal" que recoja datos de 192.168.1.10 y que recoja los nombres de procesos. También podemos decirle que recoja los datos del sistema

$ snmpwalk -v 2c -c mipasswordredlocal 192.168.1.10 system
SNMPv2-MIB::sysDescr.0 = STRING: Linux ubults6401 2.6.32-24-server #41-Ubuntu SMP Thu Aug 19 02:47:08 UTC 2010 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-TC::linux
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (130841) 0:21:48.41
SNMPv2-MIB::sysContact.0 = STRING: Francisco J. Bejarano 
SNMPv2-MIB::sysName.0 = STRING: ubults6400
SNMPv2-MIB::sysLocation.0 = STRING: Sistema Centreon/Nagios con nombre de host ubults6401
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (1) 0:00:00.01

...

Si no le decimos nada, ni tabla de proceos o system o system,sysUptime... nos saldrá toooodos los datos que recoge del host. Algún dato más :-)

$ snmpwalk -v 2c -c mipasswordlocal localhost sysUptime
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (138707) 0:23:07.07

$ snmpwalk -v 1 -c mipasswordlocal localhost interfaces
IF-MIB::ifNumber.0 = INTEGER: 2
IF-MIB::ifIndex.1 = INTEGER: 1
IF-MIB::ifIndex.2 = INTEGER: 2
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eth2
IF-MIB::ifType.1 = INTEGER: softwareLoopback(24)
IF-MIB::ifType.2 = INTEGER: ethernetCsmacd(6)

Configurar Windows 7 Home Premium

Para configurar SNMP en Windows 7 (vale para XP) debemos añadir una característica o servicio que no trae activa por defecto.

Vamos Inicio --> Panel de Control --> Programas --> Programas y Características --> Activar o desactivar las características de Windows y en la ventana que sale marcamos Protocolo simple de administración de redes (SNMP)

Esto nos instala el servicio (agente) de SNMP en Ms Windows 7 Home Premium (me sorprende que lo lleve sin pagar más jeje ;-P)

Vamos a Equipo-->Click botón Derecho --> Administrar --> Servicios y Aplicaciones --> Servicios --> Servicio SNMP

Hacemos que se inicie automáticamente


Configuramos el agente con la información de lo que queremos monitorizar, la localización y el contacto.


Por último, configuramos la Seguridad para proporcionar la Community (contraseña). Como está en la red 192.168.1.0/24 usaremos la misma community que creamos para GNU\Linux en la redlocal. Le decimos que acepte paquetes de cualquier host auque podemos restringir los hosts en Aceptar paquetes SNMP de estos hosts (poner el de centreon/nagios, por ejemplo 192.168.1.10, yo dejo, para probar, que acepte paquetes de cualquiera aunque convendria poner solo el host de monitorización).


Por último,  le decimos en Capturas, que envie los traps (capturas) a nagios/centreon 192.168.1.10. El daemon del servidor nagios snmptrapd recogerá estas capturas.


Aplicamos y Aceptamos y reiniciamos el servicio.

Como apunte, en el caso de que Ms Windows fuera el que tuviera instalado nagios, deberiamos habilitar el servicio Captura SNMP, configurarlo y abrir los puertos del firewall. Los puertos de servicio SNMP ya están habilitados en el firewall.

Desde GNU\Linux podemos probar con snmpwalk si vemos a Windows

$ snmpwalk -v 2c -c mipasswordredlocal 192.168.1.37 system
SNMPv2-MIB::sysDescr.0 = STRING: Hardware: Intel64 Family 6 Model 37 Stepping 2 AT/AT COMPATIBLE - Software: Windows Version 6.1 (Build 7600 Multiprocessor Free)
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.311.1.1.3.1.1
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (27311) 0:04:33.11
SNMPv2-MIB::sysContact.0 = STRING: fjbejarano@gmail.com
SNMPv2-MIB::sysName.0 = STRING: casaw7
SNMPv2-MIB::sysLocation.0 = STRING: Escritorio Windows con nombre de host casaw7
SNMPv2-MIB::sysServices.0 = INTEGER: 79

Y aquí está :-)

Configuración de Nagios con Centreon de un servicio SNMP

Por último, vamos a ver como configurar un servicio SNMP de Windows y de GNU\Linux en Centreon y poder monitorizarlo.

Lo primero es configurar la community chain o contraseña. Por defecto es public en centreon/nagios y debemos cambiarla. La community chain es un recurso que se encuentra en resources.cfg y que se asigna a $USER2$. Este recurso se usa en los comandos de check snmp. Así que lo cambiamos de public a mipasswordredlocal. Y guardamos


Ahora vamos a añadir un servicio para los hosts Windows y, por tanto, lo añadiremos al grupo de hosts Windows-Servers y monitorizará el espacio de disco C:. Tenemos la siguiente pantalla.


Como vemos hemos usado el comando check_centreon_remote_storage que tiene una serie de parametros !C:!80!90!$USER2$!1. Estos parametros se corresponden con el orden en los argumentos $ARG1$, etc. El $ARG4$ es la community y vemos que en vez de poner la contraseña a pelo, lo sustituye por $USER2$ que es el recurso que configuramos antes. También podríamos ponerla a pelo o crear otro recurso en resources.cfg $USER3$, por ejemplo, y poner otra community chain. Los argumentos se separan con ! y vemos que ponemos el nombre de disco C: (por defecto viene sin los : así que ponedlo), 80 es el warning al 80% de uso del espacio del disco, el 90 es el critical a 90% de uso del disco, la community chain como hemos dicho y 1 que es la version del protocolo a usar. No olvidamos ir a Relations y añadir el servicio al grupo de hosts Windows-Servers. Como casaw7 pertenece a este grupo le saldrá de forma automática. Guardamos con Save.

Para un servicio de GNU\Linux, lo mismo. Pero vamos a monitorizar la carga media de CPU, eso que sale con el comando uptime en la shell, pero a través de SNMP y nagios/centreon. Vemos la siguiente pantalla.


Los parametros aquí cambian como veis, en este caso la community es el segundo argumento y está puesta a pelo, pero nosotros lo cambiamos y le ponemos $USER2$. Recordad que podeis crear los servicios como querais :-). No olvidaros poner el servicio en el host-group de Linux-Servers en Relations. Guardais y listo.

¿Que falta? Efectivamente, exportar los ficheros a Nagios para que nagios coja los cambios y empiece a monitorizar y luego salgan en centreon. Esto ya lo hemos visto en las entregas anteriores (ver los links del principio del artículo). Una vez hecho, esperamos un ratito para que de tiempo a recopilar datos y listo, en la siguiente pantalla vemos el resultado.



NOTA: Nombres de Community Chain y Ms Windows
Los nombres de contraseña o de comunidad no pueden usar la ñ. Al principio use micontraseñaredlocal, etc. con los nombres de comunidad pero fue imposible obtener datos de Ms Windows con snmpwalk. Tuve que cambiar a otra password sin la ñ. En GNU\Linux si se obtenían datos con un nombre con ñ.
Related Posts with Thumbnails