VMWare 6 VSCA: Monitorización con snmp

En las anteriores versiones de vmware, para hacer una monitorización estándar con snmp, era necesario instalar a través de yast los paquetes de snmp.

https://thwack.solarwinds.com/thread/70271

En la versión 6 hay algunos cambios.

VSCA Snmp en puerto 161

Viene con snmp instalado y corriendo en el puerto 161, pero sólo para envío de traps. No permite hacer llamadas get.

http://pubs.vmware.com/vsphere-60/index.jsp#com.vmware.vsphere.vcsa.doc/GUID-04815BDB-5AF6-4067-A471-28E7F1800C78.html

VSCA Snmp en puerto no estándar

Sin  embargo, se puede poner un segundo servicio de snmp, que sí responde a peticiones Get en cualquier otro puerto:

Command> snmp.set --port 49160
Command> snmp.set --communities mycommunity

Con esto, ya se puede integrar la monitorización en un sistema como nagios.

Crear y probar nuestros modulos de puppet

puppet labs

Crear la arquitectura de nuestro modulo

La arquitectura de nuestro nuevo módulo, siempre va a tener una distribución de archivos parecida a:

manifests
--- init.pp
README.mdtemplates
 --- template.erb
tests
 --- test1.pp
files

Escribir el init.pp y tests

Para escribir los  módulos, proponemos Gepetto sobre Eclipse.

Para verificar la sintáxis de las clases, se puede usar puppet-lint

gem install puppet-lint
 puppet-lint manifests/init.pp

Al escribir los tests, se pueden asociar al nodo default para mantenerlos sencillos

 node default {
 include mymoduleclass
}

Probar en un nodo con puppet instalado en local

Configuramos en puppet.conf de donde se van a leer los módulos

[main]
(..)
 puppetmodulepath=/etc/puppet/modules:/usr/share/puppet/modules

Para verificar la clase:

puppet apply --noop tests/test1.pp

Para aplicar cambios

puppet apply tests/test1.pp

Nagios: Monitorización de servicios de windows

Configuración en windows

Instalación de NSCLient++.

En la instalación, necesitamos especificar desde qué equipos se va a hacer la monitorización (puede ser una subred) y qué clave concertada van a usar tanto cliente como servidor.

Toda la configuración se guarda en un archivo nsclient.ini

[/settings/default]
; ALLOWED HOSTS - A comaseparated list of allowed hosts. You can use netmasks (/ syntax) or * to create ranges.
allowed hosts = 192.168.2.2/25
; PASSWORD - Password used to authenticate against server
password = concerted

Para poder hacer checks sobre servicios, necesitamos además que nsclient acepte argumentos. Para ello, añadimos la sección de nrpe server:

[/settings/NRPE/server]
allow arguments = true

Configuración en Nagios

En nuestro caso, hemos optado por el uso del comando check_nrpe.

El nuevo servicio en services.cfg, quedará algo como esto:

 check_nrpe!checkServiceState -a ShowAll 'My Servicio de Windows'

Nagios: Crear un nuevo check en powershell invocado desde nsclient

NAgios – NSCA check

Desarrollo del nuevo check

Es importante respetar los códigos de salida y la sintáxis de nagios par que nuesrto nuevo chequeo pueda ser visualizado correctamente desde nagios.

En el caso de estar usando también pnp4nagios, o cualquier otro addon capaz de hacer una gráfica , hay que respetar también la sintáxis de performance data.

Para definir los argumentos de entrada a un powershell, en el comienzo del script se define su nombre, posición y si es necesario:

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$True,Position=1)]
   [string]$ApplicationPool
   )

Para definir el código de salida, se ha usado definición de variables:

Set-Variable OK 0 -option Constant
Set-Variable WARNING 1 -option Constant
Set-Variable CRITICAL 2 -option Constant
Set-Variable UNKNOWN 3 -option Constant

(...)
exit $CRITICAL

En mi caso, he desarrollado un plugin para poder conocer el estado de un pool de aplicaciones en un servidor IIS. El código completo está aquí.

Publicarlo a través de NSClient++

Con nuestro nuevo script escrito y funcionando, es momento de configurar nsclient++ para poder acceder desde nuestro nagios.

En primer lugar, en la carpeta de scripts C:\Program Files\NSClient++\scripts copiamos nuestro nuevo check con extensión ps1.

El funcionamiento de NSClient++ para los external scripts, hace que todos ellos se invoquen a través del cmd de windows. Por lo tanto, debemos especificar en la linea, que es powershell quien debe ejecutar nuestro nuevo check.

[/settings/external scripts/scripts]

check_default_app_pool = powershell.exe scripts\check_iis8_app_pool_state.ps1 DefaultAppPool

 

Instalación de NSCLient++.

 

 

Nagios: Compilar e instalar nagios

Descargar nagios-3.5.1.tar.gz

Descomprimir y ejecutar:

./configure
make all
make install
make install-init
make install-commandmode
make install-config
make install-webconf
make install-classicui

Configurar el acceso a apache, en el archivo:

/etc/apache2/conf.d/nagios.conf

Y, probar ya el accceso:

http://nagiosserver/nagios

 

A partir de aquí, podemos instalar ya estilos como nuvola 1.0.3.

Si queremos mantener la autenticación a nivel de Apache, aceptando más usuarios que nagiosadmin, es necesario editar cgi.cfg, añadiendo un usuario por defecto:

authorized_for_system_information=nagiosadmin
default_user_name=nagiosadmin

Si no, tenemos un error al acceder a los cgi:

It appears as though you do not have permission to view information for any of the hosts you requested… If you believe this is an error, check the HTTP server authentication requirements for accessing this CGI and check the authorization options in your CGI configuration file.

Compilar e instalar nrpe

Gracias a Roger.steneteg.org por el tutorial para compilar check_nrpe

Tras la descarga, en el momento de la compilación, teníamos el siguiente error:

checking for SSL libraries... configure: error: Cannot find ssl libraries

Es necesario instalar las librerías de compilación de openssl, y enlazarlas en el momento de ./configure:

apt-get install libssl-dev
# Buscar la ruta de libssl
dpkg -L libssl1.0.0
# En nuestro caso, estaban en /usr/lib/x86_64-linux-gnu
./configure --with-ssl-lib=/usr/lib/x86_64-linux-gnu
make all

Si sólo queremos el script check_nrpe:

make check_nrpe

Problemas comunes con nagios

Problemas con el script de control del servicio:

> service nagios stop
Stopping nagios: kill: uso: kill [-s sigspec | -n signum | -sigspec] pid | jobspec … or kill -l [sigspec]
done.

Sustitución de la función killproc_nagios en /etc/init.d/nagios

killproc_nagios ()
{
pid_nagios
CMD=”kill $2 $NagiosPID”
echo Execute: $CMD
$CMD
}

 

Centreon nagios: Instalación centreon 2.5.0

Ya ha salido la versión estable de centreon 2.5.0. Vamos a usar un fichero answers para que no nos pregunte por todos los datos. El fichero de respuestas, está al final del tutorial.

Estamos desplegando sobre una distribución CentOS release 6.5 (Final)

wget http://download.centreon.com/centreon/centreon-2.5.0.tar.gz
tar -xvzf  centreon-2.5.0.tar.gz
./centreon-2.5.0/install.sh -f answer

Respuestas que faltan:

Where is your monitoring plugins (libexec) directory ?
default to [/usr/lib/nagios/plugins]
> /usr/lib64/nagios/plugins/
(...)
Where is your CentreonTrapd binaries directory
default to [/usr/local/centreon/bin]
/usr/local/centreon/bin

Entramos en el interfaz web:

http://server-ip/centreon/install/upgrade.php

En este caso, debemos hacer unos cambios antes de seguir en el instalador. Estamos usando ndo. Hemos intentado seguir las instrucciones que nos dan en el instalador:

If you are using NDO

  • Stop centstorage
  • Upgrade Centreon (web install)
  • Execute /path/to/centreon/bin/changeRrdDsName.pl
  • Start centstorage

No ha funcionado ninguno de los pasos:

[root@server centreon-2.5.0]# service centstorage stop
Stopping centstorage:                                      [FALLÃ]
[root@server centreon-2.5.0]# find / -name changeRrdDsName.pl
/usr/local/centreon/bin/changeRrdDsName.pl
[root@server centreon-2.5.0]# /usr/local/centreon/bin/changeRrdDsName.pl
Can't call method "prepare" on an undefined value at /usr/local/centreon/bin/changeRrdDsName.pl line 61.

Tras la instalación, hemos tenido un problema con el fichero sudoers:

Central

sudo: no tty present and no askpass program specified

Verificar el fichero sudoers:

[root@servercentreon-2.5.0]# cat /etc/sudoers | grep -i centreon
## BEGIN: CENTREON SUDO
#Add by CENTREON installation script
User_Alias      CENTREON=apache,centreon
Defaults:CENTREON !requiretty
CENTREON   ALL = NOPASSWD: /etc/init.d/nagios* restart
CENTREON   ALL = NOPASSWD: /etc/init.d/nagios restart
CENTREON   ALL = NOPASSWD: /etc/init.d/nagios* reload
CENTREON   ALL = NOPASSWD: /etc/init.d/nagios reload
CENTREON   ALL = NOPASSWD: /etc/init.d/nagios* force-reload
CENTREON   ALL = NOPASSWD: /etc/init.d/nagios force-reload
CENTREON   ALL = NOPASSWD: /usr/sbin/nagios* -v *
CENTREON   ALL = NOPASSWD: /usr/sbin/nagios -v *
CENTREON   ALL = NOPASSWD: /usr/sbin/nagios* -s *
CENTREON   ALL = NOPASSWD: /usr/sbin/nagios -s *
CENTREON   ALL = NOPASSWD: /etc/init.d/snmptrapd restart
# Centreontrapd restart
CENTREON   ALL = NOPASSWD: /etc/init.d/centreontrapd restart
# Centreontrapd reload
CENTREON   ALL = NOPASSWD: /etc/init.d/centreontrapd reload
CENTREON   ALL = NOPASSWD: /etc/init.d/centstorage restart
CENTREON   ALL = NOPASSWD: /etc/init.d/centstorage stop
CENTREON   ALL = NOPASSWD: /etc/init.d/centstorage start
CENTREON   ALL = NOPASSWD: /etc/init.d/ndoutils* restart
CENTREON   ALL = NOPASSWD: /etc/init.d/ndoutils restart
CENTREON   ALL = NOPASSWD: /etc/init.d/ndoutils* reload
CENTREON   ALL = NOPASSWD: /etc/init.d/ndoutils reload
## END: CENTREON SUDO

 

Enlace entre /usr/sbin/nagios y  /usr/bin/nagios

ln -s /usr/sbin/nagios  /usr/bin/nagios

Verificar el usuario de /etc/nagios:

chown -R apache:centreon /etc/nagios/

 

Anexo: Ficheros answers.txt

## CentWeb: Web front Centreon for Nagios
PROCESS_CENTREON_WWW=1
## CentStorage: Log and charts archiving.
PROCESS_CENTSTORAGE=1
## CentCore: Distributed Monitoring engine.
PROCESS_CENTCORE=1
## CentPlugins: Centreon Plugins for nagios
PROCESS_CENTREON_PLUGINS=1
## CentTraps: Centreon Snmp traps process for nagios
PROCESS_CENTREON_SNMP_TRAPS=1
#####################################################################
## Begin: Default variables
#####################################################################
## Your default variables
## $BASE_DIR is the centreon source directory
LOG_DIR=”$BASE_DIR/log”
LOG_FILE=”$LOG_DIR/install_centreon.log”
## Don’t change values above unless you perfectly understand
## what you are doing.
## Centreon temporary directory to work
TMP_DIR=”/tmp/centreon-setup”
## default snmp config directory
SNMP_ETC=”/etc/snmp/”
## a list of pear modules require by Centreon
PEAR_MODULES_LIST=”pear.lst”
PEAR_PATH=”/usr/share/pear”
NAGIOS_PLUGINS=”/usr/lib64/nagios/plugins”
#####################################################################
## End: Default variables
##################################################################
#####################################################################
## Begin: Centreon preferences
#####################################################################
## Above variables are necessary to run a silent install
## Where you want to install Centreon (Centreon root directory)
INSTALL_DIR_CENTREON=”/usr/local/centreon”
## Centreon log files directory
CENTREON_LOG=”/usr/local/centreon/log”
## Centreon config files
CENTREON_ETC=”/etc/centreon”
## Where is your Centreon binaries directory ?
CENTREON_BINDIR=”/usr/local/centreon/bin”
## Where is your Centreon data informations directory ?
CENTREON_DATADIR=”/usr/local/centreon/data”
## Centreon generation config directory
##  filesGeneration and filesUpload
## Where is your Centreon generation_files directory ?
CENTREON_GENDIR=”/usr/local/centreon”
## libraries temporary files directory
## Where is your Centreon variable library directory ?
CENTREON_VARLIB=”/var/lib/centreon”
## Where is your CentPlugins Traps binary?
CENTPLUGINSTRAPS_BINDIR=”/usr/local/centreon/bin”
## Where is the RRD perl module installed [RRDs.pm]
## ATTENTION: ON x64 SYSTEMS THE PATH IS LIB64 INSTEAD OF LIB
##               vv
RRD_PERL=”/usr/lib64/perl5″
## What is the Centreon group ?
CENTREON_GROUP=”centreon”
## What is the Centreon user ?
CENTREON_USER=”centreon”
## What is the Monitoring engine user ?
MONITORINGENGINE_USER=”nagios”
## What is the Monitoring engine group ?
MONITORINGENGINE_GROUP=”nagios”
## What is the Monitoring engine log directory ?
MONITORINGENGINE_LOG=”/var/log/nagios”
## Where is your monitoring plugins (libexec) directory ?
PLUGIN_DIR=”/usr/local/nagios/libexec”
## Path to sudoers file (optional)
## Where is sudo configuration file
SUDO_FILE=”/etc/sudoers”
## What is the Monitoring engine init.d script ?
MONITORINGENGINE_INIT_SCRIPT=”/etc/init.d/nagios”
## What is the Monitoring engine binary ?
MONITORINGENGINE_BINARY=”/usr/sbin/nagios”
## What is the Monitoring engine configuration directory ?
MONITORINGENGINE_ETC=”/etc/nagios”
## Where is the configuration directory for broker module ?
BROKER_ETC=”/etc/nagios”
## Where is the init script for broker module daemon ?
BROKER_INIT_SCRIPT=”/etc/init.d/ndoutils”
## Do you want me to configure your sudo ? (WARNING)
FORCE_SUDO_CONF=1
#####################################################################
## Begin: Apache preferences
#####################################################################
## Apache configuration directory (optional)
#DIR_APACHE=”/etc/apache”
## Apache local specific configuration directory (optional)
## Do you want to update Centreon Apache sub configuration file ?
# DIR_APACHE_CONF=”/etc/apache/conf.d”
## Apache configuration file. Only file name. (optional)
#APACHE_CONF=”apache.conf”
## Apache user (optional)
WEB_USER=”apache”
## Apache group (optional)
WEB_GROUP=”apache”
## Force apache reload (optional): set APACHE_RELOAD to 1
## Do you want to reload your Apache ?
APACHE_RELOAD=1
#####################################################################
## End: Apache preferences
#####################################################################
## Do you want me to install/upgrade your PEAR modules
PEAR_AUTOINST=1
## Centreon run dir (all .pid, .run, .lock)
## Where is your Centreon Run Dir directory?
CENTREON_RUNDIR=”/var/run/centreon”
## path to centstorage binary
## Where is your CentStorage binary directory
CENTSTORAGE_BINDIR=”/usr/local/centreon/bin”
## CentStorage RRDs directory (where .rrd files go)
## Where is your CentStorage RRD directory
CENTSTORAGE_RRD=”/var/lib/centreon”
## Do you want me to install CentStorage init script ?
CENTSTORAGE_INSTALL_INIT=1
## Do you want me to install CentStorage run level ?
CENTSTORAGE_INSTALL_RUNLVL=1
## path to centcore binary
CENTCORE_BINDIR=”usr/local/centreon/bin”
## force install init script (install in init.d)
## Set to “1” to enable
## Do you want me to install CentCore init script ?
CENTCORE_INSTALL_INIT=1
## force install run level for init script (add all link on rcX.d)
## Set to “1” to enable
## Do you want me to install CentCore run level
CENTCORE_INSTALL_RUNLVL=1
## Some plugins require temporary datas to process output.
## These temp datas are store in the CENTPLUGINS_TMP path.
## Where is your CentPlugins lib directory
CENTPLUGINS_TMP=”/var/lib/centreon/centplugins”
## path for snmptt installation
SNMPTT_BINDIR=”/usr/local/centreon/bin/”
## What is the Broker user ? (optional)
BROKER_USER=$MONITORINGENGINE_USER
## Nagios user (optional)
NAGIOS_USER=”nagios”
## Nagios group (optional)
NAGIOS_GROUP=”nagios”
## Centreon Connector PATH
## Mail (optional)
BIN_MAIL=”/bin/mail”
##

 

Centreon 2.4.5 Añadir nuevo poller o satélite (debian 7)

Nagios empieza a tener mucha carga, y queremos usar otros poller desde otras subredes. Por ello, nos hace falta crear nuevas máquinas, y añadirlas para gestionarlas de forma unificada desde Centreon.

Vamos a seguir la arquitectura distribuida de centreon, basándonos en este tutorial de linux.org

AVISO: Aún no lo hemos logrado configurar.

Os recomiendo seguir el foro de centreon, para lograr configurar esto. Y, por supuesto, los comentarios están abiertos para que nos enviéis sugerencias y correcciones.

Configuración en el Satélite (debian 7). Acceso vía SSH

En el nuevo poller, damos un home a los usuarios nagios y centreon, y capacidad de bash

root@poller:~# grep nagios  /etc/passwd
nagios:x:102:121::/var/lib/nagios:/bin/bash

Creamos un usuario centreon con grupo nagios. Es el usuario que

  centreon:x:1001:1001:,,,:/home/centreon:/bin/bash

Configuramos SUDO para nagios y centreon

visudo:

User_Alias CENTREON=nagios,centreon
CENTREON ALL=NOPASSWD: /etc/init.d/nagios restart
CENTREON ALL=NOPASSWD: /etc/init.d/nagios stop
CENTREON ALL=NOPASSWD: /etc/init.d/nagios start
CENTREON ALL=NOPASSWD: /etc/init.d/nagios reload
CENTREON ALL=NOPASSWD: /usr/bin/nagiostats
CENTREON ALL=NOPASSWD: /usr/local/etc/bin/nagios *

Si no creamos este usuario, sale repetitivamente siguiente error de autenticación en /var/log/auth. Según el manual de centreon, es suficiente con tener un usuario nagios en los poller, pero, nuestra experiencia, dice que necesita también el usuario centreon:

Dec 13 08:19:15 poller sshd[14233]: Connection closed by centreon_ip [preauth]
Dec 13 08:21:02 poller sshd[14242]: Invalid user centreon from centreon_ip
Dec 13 08:21:02 poller sshd[14242]: input_userauth_request: invalid user centreon [preauth]

Instalamos centreon broker en el poller, para la comunicación desde Centreon. La instalación del broker, está mucho más detallada en la web de centreon.

apt-get install build-essential cmake
apt-get install librrd-dev
apt-get install libqt4-dev libqt4-sql-mysql
apt-get install libgnutls-dev  libgnutls26
cd centreon-broker/build
cmake \
-DWITH_DAEMONS='central-broker;central-rrd' \
-DWITH_GROUP=centreon-broker \
-DWITH_PREFIX=/usr \
-DWITH_PREFIX_BIN=/usr/sbin \
-DWITH_PREFIX_CONF=/etc/centreon-broker \
-DWITH_PREFIX_INC=/usr/include/centreon-broker \
-DWITH_PREFIX_LIB=/usr/lib/nagios3 \
-DWITH_PREFIX_MODULES=/usr/share/centreon/lib/centreon-broker \
-DWITH_STARTUP_DIR=/etc/init.d \
-DWITH_STARTUP_SCRIPT=auto \
-DWITH_TESTING=0 \
-DWITH_USER=centreon-broker
make install
# Start service:
adduser centreon-broker
service cbd start

Tenemos que agregar el usuario centreon-broker para evitar esto:

service cbd start
[....] Starting cbd_central-broker: cbdstart-stop-daemon: user 'centreon-broker' not found
start-stop-daemon: user 'centreon-broker' not found
failed!

Tiene que iniciar:


root@poller:~/src/centreon-broker/build# service cbd start
[ ok ] Starting cbd_central-broker: cbd.
[ ok ] Starting cbd_central-rrd: cbd.

Verificamos las rutas de centreon broker, para asegurar que está bien instalado:

 

Como nuestro satélite es debian, y por problemas con nagvis, vamos a usar mklivestatus, en vez de ndomod. Recomendamos leer <a href=”http://mathias-kettner.de/checkmk_livestatus.html”>este artículo </a>de Matthias Kettner.

Instalamos mklive  y su socket (en nuestra instalación no se creó de forma automática).

apt-get install check-mk-livestatus
mkfifo /var/log/nagios3/rw/live
chown nagios:nagios /var/log/nagios3/rw/live

Probamos desde nagios, la comunicación con mklivestatus

root@poller:~# grep broker /etc/nagios3/nagios.cfg
broker_module=/usr/lib/check_mk/livestatus.o /var/log/nagios3/rw/live
event_broker_options=-1

En nagios.log

Sin embargo, sí vamos a instalar ndoutils

Centreon. SSH

Creamos para nagios una clave asimétrica y se la pasamos al nuevo poller o satélite:

nagios@centreon:~#  ssh-keygen
nagios@centreon:~#  chmod 600 id_rsa

# Copiamos para nagios y para usuario centreon:
nagios@centreon:~#  ssh-copy-id  -i id_rsa.pub nagios@poller
nagios@centreon:~#  ssh-copy-id  -i id_rsa.pub centreon@poller
# Prueba de la conexión:
nagios@centreon:~#  ssh nagios@poller
nagios@centreon:~#  ssh centreon@poller

Pasamos todos los plugins al satélite:

scp /usr/local/nagios/libexec/* nagios@{IP_ADDRESS}:/usr/local/nagios/libexec/

Centreon GUI

Creamos el poller

Esta es la configuración del poller para debian 7.1

 

Creamos el ndomod, con su ip, y habilitado

Creamos el nuevo nagios.cfg

Es importante verificar todas las rutas de archivos.

En nuestro caso, al ser el satélite Debian 7, necesitamos que todas las rutas hagan referencia a nagios3.

Además, configuramos el broker, para usar mklive.

Cambiamos los permisos de /var/nagios/spool/checkresults, para evitar el errorde permisos durante “Run monitoring engine debug (-v)”

Error Unable to write to check_result_path (‘/var/nagios/spool/checkresults’) – Permission denied.

 

root@central# chmod 777 /var/nagios/spool/checkresults

Vmware powercli: Scripts útiles

Los scripts aquí definidos están para descargar en github.

Activar y desactivar de forma masiva ssh en los hosts

Desde la 4.1, se puede activar ssh, sin necesidad de entrar por las ilos de los servidores.

Es importante el -Confirm $false, por que si no , pregunta 100 veces.

Nos hemos basado en esta utilísima entrada de techshifter

Get-Cluster | Foreach {
$cl=$_
Get-Cluster -name $cl | Get-VMHost | Foreach {
# Start-VMHostService -HostService ($_ | Get-VMHostService | Where { $_.Key -eq "TSM-SSH" } )
# Stop-VMHostService -HostService ($_ | Get-VMHostService | Where { $_.Key -eq "TSM-SSH" } ) -Confirm:$false
}
}

Activar snmp de forma masiva en todos los nodos

Este script es algo más complicado, porque es necesario iniciar sesión contra el servidor vcenter, y depués contra cada uno de los hosts.