Mostrando entradas con la etiqueta Centreon. Mostrar todas las entradas
Mostrando entradas con la etiqueta Centreon. Mostrar todas las entradas

jueves, 18 de julio de 2013

Instalación del Servidor de Centreon (I)

Buenos días,

 hoy vamos a ver un software de monitorización en tiempo real basado en Nagios cuyo nombre es Centreon. Nagios es bastante conocido y ampliamente usado en el mundo IT, su principal función es la de comprobar el estado de nuestros servidores y servicios. Uno de los principales escollos de Nagios es su configuración basada en ficheros de texto plano. Conforme nuestra infraestructura va creciendo estos archivos se vuelven complejos y complicados de mantener. Para solventar esto la empresa Merethis se ha ingeniado un interface web que funciona como una capa más, haciendo de interface entre el usuario y el propio servidor de Nagios. A su vez aporta nuevas funcionalidades como gráficas de rendimiento y un dashboard donde nos muestra datos de tiempos online bastante útiles para calcular SLA.

En la página de Centreon podemos encontrar más información sobre sus caracteristicas. En la misma página podemos ver las diferentes versiones que podemos encontrar. Por un lado hay una versión en tar.gz para instalar. Y por otro lado nos encontramos con una versión embebida que te instala un servidor sobre CentOS prácticamente automatizada, hoy nos centraremos en está ultima versión llamada "CES" o Centreon Entreprise Server. Todo es software libre. Si fuera necesario soporte Merethis te lo puede proporcionar con un coste adicional.

Para estás pruebas crearemos dos maquinas virtuales sobre KVM. Una para el servidor de Centreon y otra un PC con Windows XP al que realizaremos una monitorización básica.

Descargaremos la última versión Stable del servidor de CES.

Crearemos una máquina virtual mínima con 1G de RAM y 8G de HD. Arrancaremos la VM con la ISO de CES.



Pulsaremos Intro para la instalación por defecto.


Seleccionamos el idioma.


La parte de instalación en modo texto es practicamente la misma a la de RHEL/CentOS. Posteriomente arrancara el modo gráfico.


Le diremos que sí, que borre todos los datos del disco.


Aceptamos la partición del disco por defecto.


Seleccionaremos la zona horaria.


Introducimos el password de root.


Veremos el proceso de instalación.


Reiniciamos.


Dejaremos sin modificar ninguno de los Items.


 OK! Servidor arrancado.

Una vez acabada la instalación accederemos a la página principal.
http://192.168.122.25/centreon/index.php
 El  usuario por defecto es "admin/centreon", os aconsejo cambiarlo una vez hecha la instalació.

Clickando en "Home" iremos al dashboard principal de alertas.

En el siguiente post agregaremos una máquina a la monitorización.

Saludos...


viernes, 12 de julio de 2013

Configurar una nueva alerta de Centreon

Hola,

 vamos a configurar una alerta de memoria en nuestro servidor linux. Ya tenemos instalado el cliente de NRPE.  Vamos a buscar en "Nagios Exchange" si hay ya hecho algún script que se ajuste al tipo de alerta que estamos buscando. He encontrado este que nos ira bien para el ejemplo.
  • Copiamos el chequeo en la libreria de scripts y le damos permisos de ejecución.
    [root@myserver]# cd /usr/lib64/nagios/plugins
    [root@myserver plugins]# vi check_linux_mem
    [root@myserver plugins]# chmod +x check_linux_mem
  • Lo ejecutamos para ver que todo funciona correctamente.
    [root@myserver plugins]# ./check_mem 80 90
    OK | Total=3924872;;;;Used=3063452;;;;Free=861420;;;;Buffers=364708;;;;Cached=1693484
     
  • Buscamos la configuración de nrpe y la editamos.
    [root@myserver plugins]# ps -ef | grep nrpe
    nagios   23755     1  0 09:14 ?        00:00:00 nrpe -c /etc/nagios/nrpe.cfg -d
    root     24254 23713  0 09:26 pts/0    00:00:00 grep nrpe
    [root@myserver plugins]# vi /etc/nagios/nrpe.cfg
  • Agregamos la linea.
    command[check_mem]=/usr/lib64/nagios/plugins/check_linux_mem 90 95
  • Reiniciamos el demonio de nrpe.
    [root@myserver plugins]# service nrpe restart
    Shutting down Nagios NRPE daemon (nrpe):                   [  OK  ]
    Starting Nagios NRPE daemon (nrpe):                        [  OK  ]

    Ya tenemos el servidor nrpe esperado para ser consultado por el nuevo comando.
  • Desde Nagios/Centreon no crearemos un nuevo comando, ya que lo comprobaremos usando el "check_nrpe" ya existente en la instalación por defecto.
  • Crearemos un nuevo servicio en:


    En la pestaña "Relations" hemos de agregar nuestro servidor para que el chequeo quede vinculado.
  • El resultado final con gráfica y datos es el siguiente:


 Saludos!!


jueves, 11 de julio de 2013

Instalación del cliente de NRPE para Linux


La instalación del cliente de NRPE nos permitirá monitorizar nuestros equipos con Nagios o Centreon. Hay varios metodos para su instalación. Podriamos bajarnos el código, compilarlo e instalarlo. O lo que haremos en este tutorial, bajarnos el paquete desde rpmforge.

Rpmforge es un proyecto libre donde se compilan y empaquetan programas de código abierto para distribuciones RHEL, CentOs y Scientific Linux.

Pongamos que nuestro servidor es un RHEL 6 de 64 Bits. Nos bajamos el paquete de repoforge y lo instalamos:

[root@master ~]# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
--2013-03-11 11:52:16--  http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
Connecting to 192.168.122.1:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: 12700 (12K) [application/x-redhat-package-manager]
Saving to: “rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm”
100%[=====================================================================>] 12,700      39.4K/s   in 0.3s  
2013-03-11 11:52:17 (39.4 KB/s) - “rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm” saved [12700/12700]
[root@master ~]# rpm -Uvh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
warning: rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY
Preparing...                ########################################### [100%]
   1:rpmforge-release       ########################################### [100%]
[root@master ~]# yum repolist
Loaded plugins: product-id, subscription-manager
Updating certificate-based repositories.
Unable to read consumer identity
rhel-local                                                                              | 4.0 kB     00:00  
rhel-local/primary_db                                                                   | 3.1 MB     00:00  
rpmforge                                                                                | 1.9 kB     00:00  
rpmforge/primary_db                                                                     | 2.5 MB     00:00  
repo id                                repo name                                                         status
rhel-local                             Red Hat Linux 6Server - x86_64 - DVD                              3,585
rpmforge                               RHEL 6Server - RPMforge.net - dag                                 4,458
repolist: 8,043
[root@master ~]# yum install nrpe
Loaded plugins: product-id, subscription-manager
Updating certificate-based repositories.
Unable to read consumer identity
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package nagios-nrpe.x86_64 0:2.12-1.el6.rf will be installed
--> Processing Dependency: nagios-plugins for package: nagios-nrpe-2.12-1.el6.rf.x86_64
--> Running transaction check
---> Package nagios-plugins.x86_64 0:1.4.16-1.el6.rf will be installed
--> Processing Dependency: perl(Net::SNMP) for package: nagios-plugins-1.4.16-1.el6.rf.x86_64
--> Processing Dependency: fping for package: nagios-plugins-1.4.16-1.el6.rf.x86_64
--> Running transaction check
---> Package fping.x86_64 0:3.4-1.el6.rf will be installed
---> Package perl-Net-SNMP.noarch 0:5.2.0-1.2.el6.rf will be installed
--> Processing Dependency: perl(Socket6) >= 0.19 for package: perl-Net-SNMP-5.2.0-1.2.el6.rf.noarch
--> Processing Dependency: perl(Digest::HMAC) for package: perl-Net-SNMP-5.2.0-1.2.el6.rf.noarch
--> Processing Dependency: perl(Crypt::DES) for package: perl-Net-SNMP-5.2.0-1.2.el6.rf.noarch
--> Processing Dependency: perl(Digest::SHA1) for package: perl-Net-SNMP-5.2.0-1.2.el6.rf.noarch
--> Running transaction check
---> Package perl-Crypt-DES.x86_64 0:2.05-3.2.el6.rf will be installed
---> Package perl-Digest-HMAC.noarch 0:1.01-22.el6 will be installed
---> Package perl-Digest-SHA1.x86_64 0:2.12-2.el6 will be installed
---> Package perl-Socket6.x86_64 0:0.23-3.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================================================
 Package                       Arch                Version                       Repository               Size
===============================================================================================================
Installing:
 nagios-nrpe                   x86_64              2.12-1.el6.rf                 rpmforge                 34 k
Installing for dependencies:
 fping                         x86_64              3.4-1.el6.rf                  rpmforge                 47 k
 nagios-plugins                x86_64              1.4.16-1.el6.rf               rpmforge                795 k
 perl-Crypt-DES                x86_64              2.05-3.2.el6.rf               rpmforge                 41 k
 perl-Digest-HMAC              noarch              1.01-22.el6                   rhel-local               21 k
 perl-Digest-SHA1              x86_64              2.12-2.el6                    rhel-local               49 k
 perl-Net-SNMP                 noarch              5.2.0-1.2.el6.rf              rpmforge                 88 k
 perl-Socket6                  x86_64              0.23-3.el6                    rhel-local               23 k
Transaction Summary
===============================================================================================================
Install       8 Package(s)
Total download size: 1.1 M
Installed size: 5.5 M
Is this ok [y/N]: y
Downloading Packages:
(1/8): fping-3.4-1.el6.rf.x86_64.rpm                                                    |  47 kB     00:00  
(2/8): nagios-nrpe-2.12-1.el6.rf.x86_64.rpm                                             |  34 kB     00:00  
(3/8): nagios-plugins-1.4.16-1.el6.rf.x86_64.rpm                                        | 795 kB     00:00  
(4/8): perl-Crypt-DES-2.05-3.2.el6.rf.x86_64.rpm                                        |  41 kB     00:00  
(5/8): perl-Digest-HMAC-1.01-22.el6.noarch.rpm                                          |  21 kB     00:00  
(6/8): perl-Digest-SHA1-2.12-2.el6.x86_64.rpm                                           |  49 kB     00:00  
(7/8): perl-Net-SNMP-5.2.0-1.2.el6.rf.noarch.rpm                                        |  88 kB     00:00  
(8/8): perl-Socket6-0.23-3.el6.x86_64.rpm                                               |  23 kB     00:00  
---------------------------------------------------------------------------------------------------------------
Total                                                                          572 kB/s | 1.1 MB     00:01  
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
  Installing : perl-Digest-SHA1-2.12-2.el6.x86_64                                                          1/8
  Installing : perl-Digest-HMAC-1.01-22.el6.noarch                                                         2/8
  Installing : perl-Socket6-0.23-3.el6.x86_64                                                              3/8
  Installing : perl-Crypt-DES-2.05-3.2.el6.rf.x86_64                                                       4/8
  Installing : perl-Net-SNMP-5.2.0-1.2.el6.rf.noarch                                                       5/8
  Installing : fping-3.4-1.el6.rf.x86_64                                                                   6/8
  Installing : nagios-plugins-1.4.16-1.el6.rf.x86_64                                                       7/8
  Installing : nagios-nrpe-2.12-1.el6.rf.x86_64                                                            8/8
Installed products updated.
  Verifying  : fping-3.4-1.el6.rf.x86_64                                                                   1/8
  Verifying  : nagios-nrpe-2.12-1.el6.rf.x86_64                                                            2/8
  Verifying  : perl-Digest-SHA1-2.12-2.el6.x86_64                                                          3/8
  Verifying  : perl-Net-SNMP-5.2.0-1.2.el6.rf.noarch                                                       4/8
  Verifying  : perl-Crypt-DES-2.05-3.2.el6.rf.x86_64                                                       5/8
  Verifying  : perl-Digest-HMAC-1.01-22.el6.noarch                                                         6/8
  Verifying  : perl-Socket6-0.23-3.el6.x86_64                                                              7/8
  Verifying  : nagios-plugins-1.4.16-1.el6.rf.x86_64                                                       8/8
Installed:
  nagios-nrpe.x86_64 0:2.12-1.el6.rf                                                                        
Dependency Installed:
  fping.x86_64 0:3.4-1.el6.rf                            nagios-plugins.x86_64 0:1.4.16-1.el6.rf            
  perl-Crypt-DES.x86_64 0:2.05-3.2.el6.rf                perl-Digest-HMAC.noarch 0:1.01-22.el6              
  perl-Digest-SHA1.x86_64 0:2.12-2.el6                   perl-Net-SNMP.noarch 0:5.2.0-1.2.el6.rf            
  perl-Socket6.x86_64 0:0.23-3.el6                    
Complete!

Para evitar confusiones a la hora de actualizar paquetes de sistema, deshabilitaremos el repositorio de rpmforge. Nos aseguramos que el resto de los paquetes se actualizaran desde redhat.

[root@master ~]# cd /etc/yum.repos.d/
[root@master yum.repos.d]# ls
local.repo        mirrors-rpmforge-extras   rhel-source.repo
mirrors-rpmforge  mirrors-rpmforge-testing  rpmforge.repo
[root@master yum.repos.d]# vi rpmforge.repo 

En la sección de rmpforge pondremos enable = 0

[root@master yum.repos.d]# cat rpmforge.repo
### Name: RPMforge RPM Repository for RHEL 6 - dag
### URL: http://rpmforge.net/
[rpmforge]
name = RHEL $releasever - RPMforge.net - dag
baseurl = http://apt.sw.be/redhat/el6/en/$basearch/rpmforge
mirrorlist = http://apt.sw.be/redhat/el6/en/mirrors-rpmforge
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge
enabled = 0
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1
[rpmforge-extras]
name = RHEL $releasever - RPMforge.net - extras
baseurl = http://apt.sw.be/redhat/el6/en/$basearch/extras
mirrorlist = http://apt.sw.be/redhat/el6/en/mirrors-rpmforge-extras
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge-extras
enabled = 0
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1
[rpmforge-testing]
name = RHEL $releasever - RPMforge.net - testing
baseurl = http://apt.sw.be/redhat/el6/en/$basearch/testing
mirrorlist = http://apt.sw.be/redhat/el6/en/mirrors-rpmforge-testing
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge-testing
enabled = 0
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1
[root@master yum.repos.d]# yum repolist
Loaded plugins: product-id, subscription-manager
Updating certificate-based repositories.
Unable to read consumer identity
repo id                                repo name                                                         status
rhel-local                             Red Hat Linux 6Server - x86_64 - DVD                              3,585
repolist: 3,585

Podemos comprobar que el servicio se ha instalado. Lo ejecutamos y vemos cual es el fichero de configuración que está usando.

[root@master yum.repos.d]# service nrpe status
nrpe is stopped
[root@master yum.repos.d]# service nrpe start
Starting Nagios NRPE daemon (nrpe):                        [  OK  ]
[root@master yum.repos.d]# ps -ef |grep nrpe
nagios    1504     1  0 11:59 ?        00:00:00 nrpe -c /etc/nagios/nrpe.cfg -d
root      1507  1402  0 11:59 pts/0    00:00:00 grep nrpe

Modificaremos el fichero de configuración y añadiremos los datos que hacen referencia a nuestro servidor, puerto, etc, etc...

[root@master yum.repos.d]# cat /etc/nagios/nrpe.cfg
#############################################################################
# Sample NRPE Config File
# Written by: Ethan Galstad (nagios@nagios.org)
#
# Last Modified: 11-23-2007
#
# NOTES:
# This is a sample configuration file for the NRPE daemon.  It needs to be
# located on the remote host that is running the NRPE daemon, not the host
# from which the check_nrpe client is being executed.
#############################################################################

# LOG FACILITY
# The syslog facility that should be used for logging purposes.
log_facility=daemon


# PID FILE
# The name of the file in which the NRPE daemon should write it's process ID
# number.  The file is only written if the NRPE daemon is started by the root
# user and is running in standalone mode.
pid_file=/var/run/nrpe.pid


# PORT NUMBER
# Port number we should wait for connections on.
# NOTE: This must be a non-priviledged port (i.e. > 1024).
# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
server_port=5666


# SERVER ADDRESS
# Address that nrpe should bind to in case there are more than one interface
# and you do not want nrpe to bind on all interfaces.
# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
#server_address=127.0.0.1


# NRPE USER
# This determines the effective user that the NRPE daemon should run as.
# You can either supply a username or a UID.
#
# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
nrpe_user=nagios


# NRPE GROUP
# This determines the effective group that the NRPE daemon should run as.
# You can either supply a group name or a GID.
#
# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
nrpe_group=nagios


# ALLOWED HOST ADDRESSES
# This is an optional comma-delimited list of IP address or hostnames
# that are allowed to talk to the NRPE daemon.
#
# Note: The daemon only does rudimentary checking of the client's IP
# address.  I would highly recommend adding entries in your /etc/hosts.allow
# file to allow only the specified host to connect to the port
# you are running this daemon on.
#
# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
allowed_hosts=127.0.0.1


# COMMAND ARGUMENT PROCESSING
# This option determines whether or not the NRPE daemon will allow clients
# to specify arguments to commands that are executed.  This option only works
# if the daemon was configured with the --enable-command-args configure script
# option.
#
# *** ENABLING THIS OPTION IS A SECURITY RISK! ***
# Read the SECURITY file for information on some of the security implications
# of enabling this variable.
#
# Values: 0=do not allow arguments, 1=allow command arguments
dont_blame_nrpe=0


# COMMAND PREFIX
# This option allows you to prefix all commands with a user-defined string.
# A space is automatically added between the specified prefix string and the
# command line from the command definition.
#
# *** THIS EXAMPLE MAY POSE A POTENTIAL SECURITY RISK, SO USE WITH CAUTION! ***
# Usage scenario:
# Execute restricted commmands using sudo.  For this to work, you need to add
# the nagios user to your /etc/sudoers.  An example entry for alllowing
# execution of the plugins from might be:
#
# nagios          ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/
#
# This lets the nagios user run all commands in that directory (and only them)
# without asking for a password.  If you do this, make sure you don't give
# random users write access to that directory or its contents!
# command_prefix=/usr/bin/sudo


# DEBUGGING OPTION
# This option determines whether or not debugging messages are logged to the
# syslog facility.
# Values: 0=debugging off, 1=debugging on
debug=0


# COMMAND TIMEOUT
# This specifies the maximum number of seconds that the NRPE daemon will
# allow plugins to finish executing before killing them off.
command_timeout=60


# CONNECTION TIMEOUT
# This specifies the maximum number of seconds that the NRPE daemon will
# wait for a connection to be established before exiting. This is sometimes
# seen where a network problem stops the SSL being established even though
# all network sessions are connected. This causes the nrpe daemons to
# accumulate, eating system resources. Do not set this too low.
connection_timeout=300


# WEEK RANDOM SEED OPTION
# This directive allows you to use SSL even if your system does not have
# a /dev/random or /dev/urandom (on purpose or because the necessary patches
# were not applied). The random number generator will be seeded from a file
# which is either a file pointed to by the environment valiable $RANDFILE
# or $HOME/.rnd. If neither exists, the pseudo random number generator will
# be initialized and a warning will be issued.
# Values: 0=only seed from /dev/[u]random, 1=also seed from weak randomness
#allow_weak_random_seed=1


# INCLUDE CONFIG FILE
# This directive allows you to include definitions from an external config file.
#include=<somefile.cfg>


# INCLUDE CONFIG DIRECTORY
# This directive allows you to include definitions from config files (with a
# .cfg extension) in one or more directories (with recursion).
#include_dir=<somedirectory>
#include_dir=<someotherdirectory>


# COMMAND DEFINITIONS
# Command definitions that this daemon will run.  Definitions
# are in the following format:
#
# command[<command_name>]=<command_line>
#
# When the daemon receives a request to return the results of <command_name>
# it will execute the command specified by the <command_line> argument.
#
# Unlike Nagios, the command line cannot contain macros - it must be
# typed exactly as it should be executed.
#
# Note: Any plugins that are used in the command lines must reside
# on the machine that this daemon is running on!  The examples below
# assume that you have plugins installed in a /usr/local/nagios/libexec
# directory.  Also note that you will have to modify the definitions below
# to match the argument format the plugins expect.  Remember, these are
# examples only!

# The following examples use hardcoded command arguments...
command[check_users]=/usr/lib64/nagios/plugins/check_users -w 5 -c 10
command[check_load]=/usr/lib64/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
command[check_hda1]=/usr/lib64/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1
command[check_zombie_procs]=/usr/lib64/nagios/plugins/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/lib64/nagios/plugins/check_procs -w 150 -c 200

# The following examples allow user-supplied arguments and can
# only be used if the NRPE daemon was compiled with support for
# command arguments *AND* the dont_blame_nrpe directive in this
# config file is set to '1'.  This poses a potential security risk, so
# make sure you read the SECURITY file before doing this.
#command[check_users]=/usr/lib64/nagios/plugins/check_users -w $ARG1$ -c $ARG2$
#command[check_load]=/usr/lib64/nagios/plugins/check_load -w $ARG1$ -c $ARG2$
#command[check_disk]=/usr/lib64/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
#command[check_procs]=/usr/lib64/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$

Reiniciaremos el demonio...

[root@master yum.repos.d]# service nrpe restart

 ...y ya desde Nagios/Centreon configuraremos las nuevas alertas.

martes, 11 de junio de 2013

Notificaciones de Centreon en el escritorio Ubuntu

Hola,

hemos realizado un script en bash que chequea la URL del servidor de centreon y nos avisa si hubiera alguna alerta con nuestros servidores. Se aprovecha el servicio de notificaciones de Ubuntu para enviar estos mensajes al escritorio.  Para su reutilización se ha de modificar la URL target y el usuario/password ya que los del script son ficticios.

El script:
#!/bin/bash                                                                                                                                                            
# Guardar cookies                                                                                                                                                        
USERNAME=admin                                                                                                                                                      
CHECK_INTERVAL=120                                                                                                                                                      
EXCEPTIONS_FILE="/etc/notify-exceptions"                                                                                                                                
# Gets                                                                                                                                                                
check(){                                                                                                                                                              
        FILE=`mktemp`                                                                                                                                                  
        COOKIES_FILE=`mktemp`                                                                                                                                          
        EXCEPTIONS=`cat $EXCEPTIONS_FILE`                                                                                                                                
        wget --keep-session-cookies --save-cookies $COOKIES_FILE --post-data "useralias=$USERNAME&password=$PASSWORD&submit=Connect+%3E%3E" http://myserver.com/centreon/index.php -O /dev/null 2> /dev/null
        wget --load-cookies $COOKIES_FILE -p http://myserver.com/centreon/include/home/tacticalOverview/xml/ndo/tacticalOverviewXml.php -O $FILE 2> /dev/null
        cat $FILE | tr "<" "\n" |sort | uniq |grep -i "\[sucs" |cut -c9-15 > $FILE
        NUMBER_OF_HOSTS=`diff $FILE /etc/notify-exceptions | grep "^<" | cut -d " " -f2 | wc -l`
        rm $FILE $COOKIES_FILE
        echo $NUMBER_OF_HOSTS
}
# Bucle
while true
do
        RES=`check`
        if  [[ $RES  -ne 0 ]] ; then
                notify-send --urgency=low -i "terminal" "Alerta Unix" "Eventos en $RES servidores."
        fi
        sleep $CHECK_INTERVAL
done
rm $HOSTS_FILE
El resultado:



Saludos!!



jueves, 21 de marzo de 2013

Monitorización de VMWARE con Centreon/Nagios

Buenos días,

 hoy vamos a ver como monitorizar nuestro servidores de vmware desde Centreon o Nagios. El mejor sitio para empezar a buscar scripts i recursos de monitorización de Nagios es "Nagios Exchange". Tanto usando la búsqueda como navegando por sus categorías nos podemos encontrar una gran cantidad de scripts para casi todos nuestros dispositivos, servidores o servicios.

Recordar que cualquier script de Nagios es plenamente compatible con Centreon.

De Vmware hay unos cuantos con buenas referencias. Yo personalmente he usado el siguiente ya que me parece maduro y con ciertas garantías. Ha sido desarrollado por el equipo "OP5". Se encargan de realizan un producto de monitorización profesional propio y dan cierta sensación de seguridad.

Una vez descargado el script, al leer el README podemos ver que hay que hacer unos preparativos previos antes de su instalación. El pilar básico de funcionamiento es el "vSphere SDK for Perl", es un software de desarrollo en PERL hecho por vmware para poder consultar las API de sus productos. Para poder descargarlo tenemos que tener un usuario y password en www.vmware.com, el registro es gratuito.

El link directo de descarga es el siguiente:

Descargaremos la versión 5.1
VMware-vSphere-Perl-SDK-5.1.0-780721.x86_64.tar.gz

Un punto fuerte de la instalación es que está todo bien documentado por parte de vmware. La documentación la podéis encontrar aquí.

Nuestro servidor de Centreon corre con RHEL 5.9, así que los requisitos de instalación son los siguientes:


Después hay una serie de módulos que la propia instalación descarga de los repositorios oficiales de redhat o los descarga de Perl mediante CPAN. El tema de los requerimientos de perl a veces es un poco tedioso, ya que hay paquetes en el repositorio y  otros que solo se encuentran por CPAN. Algunas veces nos podemos encontrar que se han de mezclar ambos para que nuestro software funcione. 
Mi recomendación es instalarlos o desde el repositorio de redhat o desde el Perl CPAN perno no mezclar ya que podría darnos problemas en el fututo. En este caso no hay otra opción que ir complementando ambas fuentes de paquetes.

Paquetes/módulos de Perl requeridos:

Crypt-SSLeay-0.55 (0.55-0.9.7 or 0.55-0.9.8)   
IO-Compress-Base-2.037   
Compress-Zlib-2.037   
IO-Compress-Zlib-2.037
Compress-Raw-Zlib-2.037   
Archive-Zip-1.28   
Data-Dumper-2.121   
XML-LibXML-1.63   
libwww-perl-5.805   
LWP-Protocol-https-6.02   
XML-LibXML-Common-0.13   
XML-NamespaceSupport-1.09   
XML-SAX-0.16   
Data-Dump-1.15   
URI-1.37
UUID-0.03
SOAP-Lite-0.710.08
HTML-Parser-3.60
version-0.78
Class-MethodMaker-2.10
Una vez se ha conseguido cumplir con los requerimientos, realizaremos la instalación de SDK:

# tar -xvf VMware-vSphere-Perl-SDK-5.1.0-780721.x86_64.tar.gz
# cd vmware-vsphere-cli-distrib/
#./vmware-install.pl

Aceptaremos la EULA (End User Licencese Agreement) y dejaremos que instalé paquetes y dependencias. Al acabar habrá dejado el modulo de perl en su directorio correspondiente.

Para ver que realmente el modulo de perl exista lo podemos hacer con el siguiente comando:

# perl -MFile::Find=find -MFile::Spec::Functions -Tlw -e 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC' |grep VMware
/usr/lib/perl5/5.8.8/VMware/VIM2Stub.pm
/usr/lib/perl5/5.8.8/VMware/VILib.pm
/usr/lib/perl5/5.8.8/VMware/VICredStore.pm
.
.
.
.

Solo nos queda copiar el script de Nagios Exchange en nuestro directorio de plugins de Nagios y probarlo:

#cp check_vmware_api.pl /usr/lib64/nagios/plugins
# cd /usr/lib64/nagios/plugins
#./check_vmware_api.pl
Usage: check_vmware_api.pl -D <data_center> | -H <host_name> [ -C <cluster_name> ] [ -N <vm_name> ]
    -u <user> -p <pass> | -f <authfile>
    -l <command> [ -s <subcommand> ] [ -T <timeshift> ] [ -i <interval> ]
    [ -x <black_list> ] [ -o <additional_options> ]
    [ -t <timeout> ] [ -w <warn_range> ] [ -c <crit_range> ]
    [ -V ] [ -h ]

Missing argument: command

Vamos a probar de lanzar alguna consulta a nuestro servidor de VCENTER para ver si todo funciona.
#./check_vmware_api.pl -D vcenter -C MY_CLUSTER -u myuser -p mypassword -l runtime list
CHECK_VMWARE_API.PL CRITICAL - Server version unavailable at 'https://vcenter:443/sdk/vimService.wsdl' at /usr/lib/perl5/5.8.8/VMware/VICommon.pm line 545

Si nos aparece esté error pueden ser dos cosas. Las consultas se realizan con SOAP, XML y HTTPS. Recordar desactivar la variable de "https_proxy" del sistemas, ya que la consulta es en nuestra red y no queremos que pase por el proxy.

#unset https_proxy

Y por otra banda añadir al script de Nagios Exchange la siguiente línea, justo después del la línea del interprete perl:

$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;

Evitará verificar el certificado SSL.

Lo volvemos a probar:
#./check_vmware_api.pl -D vcenter -C MY_CLUSTER -u myuser -p mypassword -l runtime list
CHECK_VMWARE_API.PL OK - 450/499 VMs up, overall status=green, no config issues | vmcount=450units;;
Funciona perfectamente. Para más delante miraremos de añadir los chequeos en Nagios/Centreon de los host/hipervisores, cluster, virtual center y máquinas virtuales.


Saludos!!



lunes, 11 de marzo de 2013

SNMPTraps y Centreon 2.4


Hola,

 durante estos días me he tenido que enfrentar con un problema que ha surgido al chequear el NAS de EMC (antiguo celerra).  La monitorización se realiza con el sistema de monitorización Centreon que a su vez en sus capas más bajas utiliza Nagios.  Dejo para proximos post el funcionamiento cliente-servidor del protocolo SNMP y la monitorización por NRPE de Centreon. En este caso nos centraremos en como Centreon 2.4 recibe alertas de forma pasiva desde dispositivos que tenga habilitado SNMPTrap. 

La idea básica es que uno de nuestros sistemas al tener algún cambio de estado o mal funcionamiento envíe un mensaje por SNMP a nuestro servidor de monitorización. Esté último nos avisará mediante alertas y correo. Se realizá por SNMPTrap y no por NRPE para evitar instalar agentes y software no soportado por el fabricante, en este caso por EMC.

Como trata Centreon los SNMP Traps

En la versión 2.4 de Centreon el circuito de un mensaje o Trap es el siguiente; el servidor de Centreon tiene configurado el demonio de snmpd, escuchando mensajes snmp en la red destinados a él. Hay otro demonio que es ejecutado junto con él llamado snmptrapd que recibe el trap, y lo envía a un traductor snmptt que comprueba si hay una MIB. Si la hay genera un comando de Centreon (centTrapHandler) para insertarlo como mensaje en Nagios. Posteriormente envía una alerta y correo. Un poco complicado ¿verdad?

SNMPD --> SNMPTRAPD --> SNMPTT --> CENTTRAPHANDLER --> CENTREON

Bien, nuestro servidor está configurado de está forma y recibe las alertas por snmptrap sin problemas, excepto las que envía el NAS.  

Configuración de SNMP Traps para EMC

El primer paso que hay que realizar es buscar el fichero de MIB de nuestro dispositivo en la web del fabricante. El nuestro es el siguiente:



--------------------------------------------------------------------------
-- Copyright (c) 1998-2002, All rights reserved by
--
-- EMC Corporation
-- 171 South Street
-- Hopkinton, MA 01748 USA
--
-- This software is furnished under a license and may be used and copied
-- inclusion of the above copyright notice. This software or  any  other
-- only  in  accordance  with  the  terms  of such  license and with the
-- copies thereof may not be provided or otherwise made available to any
-- other person. No title to and ownership of  the  software  is  hereby
-- transferred.
--
-- The information in this software is subject to change without notice
-- and should not be construed as a commitment by EMC Corporation.
--
-- EMC Corporation assumes no responsibility for the use or reliability
-- of this software.
--
----------------------------------------------------------------------------
--
--
-- EMC Celerra Management Information Base description
--
----------------------------------------------------------------------------
----------------------------------------------------------------------------
--
-- Author Identification
--
-- gma      Gary Ma, EMC
-- WZ       Weining Zhu, EMC
-- alc      Angela Cocks, EMC
--
----------------------------------------------------------------------------
--
--  003  alc   07-19-02   Added Web GUI event
--  002  WZ    07-02-02   Added Jserver Alert trap type
--  001  WZ    04-18-01   Added Control Station started trap type
--  000  gma   11-05-98   Created Original Module
--
----------------------------------------------------------------------------
EMC-CELERRA DEFINITIONS ::= BEGIN
   IMPORTS
       enterprises, Opaque
 FROM RFC1155-SMI
       DisplayString
          FROM RFC1213-MIB
       OBJECT-TYPE
          FROM RFC-1212
       TRAP-TYPE
          FROM RFC-1215;
--     emc
--        FROM EMC-MIB;

       emc OBJECT IDENTIFIER ::= { enterprises 1139  }
       emcCelerra OBJECT IDENTIFIER ::= { emc 2 }
-------------------------------------------------------------------
--
--       Celerra Event Group
--
-------------------------------------------------------------------
       celEventTable OBJECT-TYPE
          SYNTAX SEQUENCE OF CelEvent
          ACCESS not-accessible
          STATUS mandatory
          DESCRIPTION
                   "A table containing information
   about an particular event."
          ::= { emcCelerra 1}
       celEvent OBJECT-TYPE
          SYNTAX CelEvent
          ACCESS not-accessible
          STATUS mandatory
          DESCRIPTION
                   "Information about an particular event."
          INDEX {celEventFacility,
                 celEventID}
          ::= { celEventTable 1}
       CelEvent ::= SEQUENCE { celEventFacility INTEGER,
                               celEventID INTEGER,
                               celEventSeverity INTEGER,
                               celEventDescr DisplayString}
                           
       celEventFacility OBJECT-TYPE
          SYNTAX INTEGER
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
                 "The number representing the facility which generates
                  the event. For now, the value could be:
                  first 128 - default Dart facility
                  129 - master control
                  130 - event log
                  131 - box monitor
                  132 - video service
                  133 - callhome application
                  134 - AAF backup control station."
          ::= { celEvent 1 }
       celEventID OBJECT-TYPE
          SYNTAX INTEGER
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
                  "The event id which identifies the particular event
                  within a facility."
          ::= { celEvent 2 }
       celEventSeverity OBJECT-TYPE
          SYNTAX INTEGER
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
                   "Severity of the event."
          ::= { celEvent 3 }
       celEventDescr OBJECT-TYPE
          SYNTAX DisplayString
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
                   "text description of the event."
          ::= { celEvent 4 }
     
----------------------------
--
--     Trap definitions
--
----------------------------
       celReboot TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of a Data Mover
                    Reboots. The trap message includes the facility, event id,
                    serverity and a text description of the event."
          ::= 1
       celMasterCtlFault TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of Master Control
                    serious fault.
                    unexpected daemon exit or control station heartbeat
                    missing."
          ::= 2
       celHWFailure TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of celerra hardware
                    failure."
          ::= 3
       celSlotStale TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of celerra stale
                    reason code."
          ::= 4
       celSlotPanicked TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of panicked
                    slot."
          ::= 5
       celIntfFailure TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of both interfaces
                    failure."
          ::= 6
       celAAF TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of AAF."
          ::= 7
       celCSStart TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of Control Station started."
          ::= 8
       celJServer TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of a JServer alert."
          ::= 9
       celWebGUI TRAP-TYPE
          ENTERPRISE emcCelerra
          VARIABLES { celEvent }
          DESCRIPTION
                   "Trap message will be sent in the event of a Web GUI notification request."
          ::= 10
END



Nos vamos a Centreon y seleccionamos Configuration  Services  Manufacturer y hacemos click en Add . Añadiremos EMC como nuevo fabricante.  Luego iremos a Configuration  Services  MIBs y seleccionaremos nuestro fabricante "EMC" y buscaremos nuestro fichero. 

Si todo hay ido bien nuestras MIBS estarán dentro de la base de datos de Centreon.


Para que se distribuya está información de la MIBS a snmptt, se ha de ir a Configuration  Nagios  Snmp traps y hacer click en Generate.

Creamos las respectivas alarmas y les asignamos sus respectivas MIBs. Con esto ya tendriamos configuradas las alertas  y traps.

Podeis ver más captura y detalles en el siguiente link:

Troubleshooting

Aquí es donde hay que empezar ha hacer un seguimiento del mensaje y comprobar donde se rompe la cadena. 

Crearemos un nuevo host y copiaremos las alertas de servicio para poder hacer pruebas desde nuestro PC. Al lanzar las traps de SNMP desde mi equipo funcionan.

Llegan al SNMPD y SNMPTRAP lo envia a SNMPTT:

Mar  7 09:13:31 myserver snmptrapd[17706]: 2013-03-07 09:13:31 PROVA(via UDP: [192.168.1.2]:57566) TRAP, SNMP v1, community public   .1.3.6.1.6.3.1.1.5.2 Cold Start Trap (0) Uptime: 1:06:38.49     .1.3.6.1.4.1 = STRING: "hello"

SNMPTT generá el comando y lo inserta en Centreon.

EXEC command:/usr/share/centreon/bin/centTrapHandler-2.x 192.168.1.2 PROVA .1.3.6.1.4.1.1139.2.0.1 "Trap message will be sent in the event of a Data Mover 'NOK'" "'NOK' "

Funciona!!

Vamos a probar de enviar el trap desde el NAS para ver cual es el resultado:

Llega al SNMPD y SNMPTRAP lo envia a SNMPTT:

Mar  7 15:00:18 mynas snmptrapd[8875]: 2013-03-07 15:00:18 mynas.mycompany.com [192.168.1.3] (via UDP: [192.168.1.3]:39813) TRAP, SNMP v1, community public        .1.3.6.1.4.1.1139.2 Enterprise Specific Trap (2) Uptime: 195 days, 16:36:06.76  .1.3.6.1.4.1.1139.2.1.1.1 = INTEGER: 81 .1.3.6.1.4.1.1139.2.1.1.2 = INTEGER: 6  .1.3.6.1.4.1.1139.2.1.1.3 = INTEGER: 3  .1.3.6.1.4.1.1139.2.1.1.4 = STRING: "Mar  7 14:53:13 2013 VC:3:6 Slot 2: 1362664806: No virus checker server is available. Virus checking is stopped."

SNMPTT generá el comando.... pero no lo inserta en Centreon!!

EXEC command:/usr/share/centreon/bin/centTrapHandler-2.x 192.168.1.2 mynas .1.3.6.1.4.1.1139.2.0.2 "Trap message will be sent in the event of Master Control '81' '6' '3' 'Mar  7 14:53:13 2013 VC:3:6 Slot 2: 1362664806: No virus checker server is available. Virus checking is stopped.'" "'81' '6' '3' 'Mar  7 14:53:13 2013 VC:3:6 Slot 2: 1362664806: No virus checker server is available. Virus checking is stopped.' 
Para ver que problema da, ejecutamos el comando a ver que error nos muestra.

# perl -w /usr/share/centreon/bin/centTrapHandler-2.x 192.168.1.2 mynas .1.3.6.1.4.1.1139.2.0.2 "Trap message will be sent in the event of Master Control '81' '6' '3' 'Mar  7 14:53:13 2013 VC:3:6 Slot 2: 1362664806: No virus checker server is available. Virus checking is stopped.'" "'81' '6' '3' 'Mar  7 14:53:13 2013 VC:3:6 Slot 2: 1362664806: No virus checker server is available. Virus checking is stopped.' "7: -c: line 0: unexpected EOF while looking for matching `"'7: -c: line 1: syntax error: unexpected end of file

Al parecer no está recogiendo correctamente los parámetros. Los espera entre comillas pero se encuentra un espacio en blanco.

Solución

Tras seguir el script de perl para ver que es lo que hacia, decido mirar en los foros de soporte de Centreon para ver si alguien se había encontrado en el mismo caso... y Eureka!!!

Tal y como comentan en el siguiente link, el proceso de snmptrap es complejo y tiene problemas con el tratamiento de las cadenas:
http://forge.centreon.com/issues/3218

La solución que se aporta es sustituir el sistema de snmptt por un script nuevo en perl que controla todas estás excepciones:
http://forge.centreon.com/issues/3546#change-11678

Aunque el nuevo sistema de traps estará por defecto en la versión 2.5 de Centreon, lo implementamos en la versión 2.4 y funciona sin problemas. Aleluya!!

Espero que os haya ayudado!!! Saludos!!

Algunos links de interés

http://en.doc.centreon.com/HowToManageSNMPTraps
http://www.net-snmp.org/wiki/index.php/TUT:snmptrap
http://snmptt.sourceforge.net/docs/snmptt.shtml