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

martes, 5 de febrero de 2013

XenServer - Nagios check usando XAPI

Hola! Este es el nuevo checkeo para XenServer que he estado haciendo. Es basicamente diferentes petiociones que realiza el servidor nagios contra la XAPI directamente. Es decir que no hace falta tener nrpe en los hosts. Simplemente con visibilidad al puerto 80/433 el checkeo es capaz de funcionar. 

Lo puedes descargar usando git en:

Por defecto, recomiendo poner el Master-Host en la definicion del servicio, pero no es mandatorio ya que el scrpt comprueba automáticamente si es el host master o no, y si no es master, se conecta al master. (obey your master, master!)

#!/usr/bin/python
# WTFPL (Do What The Fuck You Want To Public License)
#
#           DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
#                   Version 2, December 2004
#
#Copyright (C) 2013 Ferran Serafini 
#
#Everyone is permitted to copy and distribute verbatim or modified
#copies of this license document, and changing it is allowed as long
#as the name is changed.
#
#           DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
#  TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
#
# 0. You just DO WHAT THE FUCK YOU WANT TO.

import sys, time
import os
import XenAPI

...
Definicón del comando
define command{
        command_name check_xen
        command_line $USER1$/check_xen.py $ARG1$ root $ARG2$ $ARG3$ $ARG4$ $ARG5$
        }

Utilizaremos el mismo command para definir 3 servicios, uno para monitorizar los Hosts del pool, otro para verificar que estos hosts estan conectados a la cabina y otro que verifica el espacio disponible en los SR

Definicion de los servicios
#Cluster Hosts
define service{
        use                             C-XEN_HW
        host_name                       SB-XENBOX
        service_description             SB-XENBOX-CLUSTER_HOSTS
        check_command                   check_xen!Master_Host!passwd!HOSTS!0!0
        }
#Cluster PBDs
define service{
        use                             C-XEN_HW
        host_name                       SB-XENBOX
        service_description             SB-XENBOX-CLUSTER_STORAGE_PBDs
        check_command                   check_xen!Master_Host!passwd!SR!0!0
        }
#Free Storage
define service{
        use                             C-XEN_HW
        host_name                       SB-XENBOX
        service_description             SB-XENBOX-SHARED_STORAGE_FREE
        check_command                   check_xen!Master_Host!passwd!DISK!95!98
        }

Y con esto ya tenemos un nuevo check para Nagios ;)

viernes, 9 de diciembre de 2011

Monitorizar PfSense con Nagios

Si has instalado el paquete nrpe v.2 mediante la GUI de PfSense, quizas te hayas encontrado con el mismo problema que yo. Las definciones de los checkeos están incompletas. Lo puedes ver en /usr/local/etc/nrpe.conf

Mediante la solución encontrada en este post: http://minestron.com.ar/blog/monitorear-un-pfsense-con-nagios se solunciona fácilmente.


Basta con comentar la línea que empieza por: command[{$cmd['name']}. Y substituirla por:
$cmds[] = "command[{$cmd['name']}]={$nagios_check_path}/{$cmd['warning']} -c {$cmd['critical']} {$cmd['extra']}\n";

Monitorizar XAPI XenServer Nagios

Hola! hoy traigo un nuevo script para comprobar que la XAPI de vuestros XenServer están funcionando correctamente. Totalmente probado :) Lo puedes descargar desde github aquí.

A grandes rasgos el script chequea que la XAPI esta operativa tanto a nivel de procesos como a nivel de consultas
check_xapi.sh
#!/bin/bash
#Check que comprueba el estado de la XAPI

#contamos los procesos que hay de xapi
procs=`ps -elf | grep xapi | grep -v grep | wc -l`

#Verificamos que haya algun proc xapi y si no lo hay, critical
if [ -z "$procs" ] ; then
   echo "Critical: No hay procesos de Xapi"
   exit=2

else #Hay procesos, pues lanzamos una peticion para ver si respnde ok

 #Vemos si es capaz de conectar con la Xapi y extramos el numero de hosts del pool
   test_xapi=`sudo xe host-list | grep name-label | wc -l`
 #test_xapi="1" #Fuerza a warning
 if [ $test_xapi -gt 0 ]; then
    ok_test=$(sudo xe host-list name-label=`hostname` params=name-label --minimal)
    echo "OK: XAPI respondiendo en $ok_test "
    exit=0
else
    new_test=$(sudo xe host-list name-label=`hostname` params=name-label --minimal)
    echo "Warning: Hay procs de XAPI pero algo falla $new_test"
    exit=1
 fi
fi

#Salida con el codigo de error para Nagios
exit $exit

viernes, 30 de septiembre de 2011

XenServer Nagios Check

Para los fans de Nagios y Citrix XenServer, hoy he subido en mi github un script en python que interroga la XAPI para ver el estado de los hosts físicos. En el mismo script hay la web donde se expone la versión original, esta es la adaptación para mi entorno. check_XenServer.py
     
Básicamente se conecta al host que le definimos en la  primera línea y si este no es el master, se conecta al master e interroga mediante host_metrics el estado de cada servidor.

Establecemos una política de n+1 es decir, si el numero de hosts "vivos" es inferior al valor de todos los hosts -1 nos aparecerá Critical.
       
Espero que les sea de utilidad :)
Saludos

viernes, 18 de febrero de 2011

Nagios - Check para los SR XenSERVER

Para los que usamos Nagios, podemos monitorizar que ningún SR se quede sin espacio con el este script instalado en cada uno de los domain0 o si prefieres solo en uno. 

Como la información es leída del pool da igual. Lo único que si lo pones solo en uno, simplemente te saltará la altera como si el error fuera de ese dom0 en concreto. Para gustos los colores. Por cierto veras que esta muuuy inacabado, he reutilizado código y cambios sobre la marcha, pero funciona :D 

martes, 26 de octubre de 2010

Nagios nrpe error Could not complete SSL handshake

nrpe[12438]: Error: Could not complete SSL handshake. 1
Solución:
editar el fichero /etc/init.d/nrpe

modificar la linia:
/sbin/startproc $NRPE_BIN -c $NRPE_CONFIG -d
y añadir -n
/sbin/startproc $NRPE_BIN -c $NRPE_CONFIG -d -n

jueves, 22 de abril de 2010

NAGIOS - Monitor EPO

Desde la consola del EPO se puede configurar un report diario de las actualizaciones de las firmas en formato csv. El siguiente script en Python (mi primer script en este lenguaje) interpeta la cantidad de servidores actualizados y desactualizados para monitorizarse en Nagios. 


#!/usr/bin/python
#
# 26/04/2010
import os
import sys
import getopt

STATE=0
STATE_WARNING=1
STATE_OK=0
ARRAY_VERSIONS=[]
ARRAY_NOMS=[]
OLD_MACHINE=[]
OLD_MACHINE_noms=[]
FITXER_CSV="/home/ferran/av_version.csv"
MAX_VERSION=0
i=0

def hello():
print "Script per comprovar l'estat de les EPO de Mcafee."
print "---------------------------------------------------"
print "Principalment analitza el fitxer definit en FITXER_CSV com a punt de montatge cifs (veure fstab). Aquest fitxer es un csv generat de forma automatica on conte diferents dades relatives a la versio de Mcafee (signatures, versio del s.o, etc). Aqui es comprova la versio maxima trobada i la compara amb cada versio de cada client. Si en troba un desactualitzat el sys tornara Warning"

#Verifiquem que el FITXER csv EXISTEIX
#-------------------------------------------------------------------------------
def check_csv_file():
return os.path.isfile(FITXER_CSV)
#-------------------------------------------------------------------------------
def usage():
print "Usage: " + sys.argv[0] + " [ -h | --help ] "
#-------------------------------------------------------------------------------
#Llegim linia a linia el fitxer i afegim la versio de cada linia a ARRAY_VERSIONS.append(versio) i cada nom del server a ARRAY_NOMS.append(nom)
def llegir_linia(FITXER, i,STATE):
for linia in FITXER: #Busquem en les maquines UOC-
if "UOC-" in linia:
UOCSERVER=str.split(linia,",")
versio=UOCSERVER[14]
nom=UOCSERVER[0]
ARRAY_VERSIONS.append(versio)
ARRAY_NOMS.append(nom) # print ARRAY_VERSIONS
while i < len(ARRAY_VERSIONS):
if ARRAY_VERSIONS[i] < max(ARRAY_VERSIONS): #Warning: hi ha equips desactualitzats,busquem quins a partir de la version mes alta numericament"
OLD_MACHINE.append(ARRAY_VERSIONS[i]) # print OLD_MACHINE
OLD_MACHINE_noms.append(ARRAY_NOMS[i]) # print OLD_MACHINE_noms
STATE=STATE_WARNING=1 # print STATE
i=i+1
else:
i=i+1
FITXER.close
return STATE
#-------------------------------------------------------------------------------
try:
optlist, args = getopt.getopt(sys.argv[1:], 'h' , ["help"])
except getopt.GetoptError, err:
print str(err) # will print something like "option -a not recognized"
usage()
sys.exit(2)

for k,v in optlist:
if k in ('-h','--help'):
hello()
sys.exit(0)

if check_csv_file() == True:
STATE=llegir_linia(open(FITXER_CSV,"r"),i,STATE)
if STATE == 1:
# print "Warning: hi ha equips "+ str(len(OLD_MACHINE_noms))+ " desactualitzats," + str(OLD_MACHINE_noms) + str(OLD_MACHINE)
print "WARNING: "+ str(len(OLD_MACHINE_noms))+ " equips desactualitzats, " + " | " .join(str(item)for item in OLD_MACHINE_noms) +" | " + " - " .join(str(item)for item in OLD_MACHINE)
sys.exit(STATE_WARNING)
else:
print "OK: tots els equips actualitzats"
sys.exit(STATE_OK)
else:
print "WARNING: No es pot llegir el FITXER: " + FITXER_CSV
sys.exit(1)



viernes, 9 de abril de 2010

NAGIOS - Documentación Extra con serviceextinfo y hostextinfo

Una de las posibilidades que tiene nagios para documentar cada host, servicio, etc es enlazar cada check con una documentación detallada de cada host/servicio, un howto solucionar esa incidencia, etc. Para ello hay que poner en la definición extendida del servicio donde el campo notes_url tendra el valor la URL donde queremos que enlace este servicio, por ejemplo una entrada de un plone o cualquier otro CMS.


define service{
        use                             generic-service
        host_name                       serveis_wiki
        service_description             wiki
        is_volatile                     0
        check_period                    24x7
        max_check_attempts              3
        normal_check_interval           5
        retry_check_interval            1
        contact_groups                  admins
        notification_interval           120
        notification_period             24x7
        notification_options            w,u,c,r
        check_command                   check_http_url_"/webapps/wiki/check.action"!80!"OK"!web.dom.com
       }

define serviceextinfo{
        host_name               serveis_wiki
        service_description     wiki
        notes_url               http://mycms/docs/servicio1/
       }

miércoles, 17 de marzo de 2010

Monitorizar Xen con Nagios - Dominios Zombies





Para monitorizar que ninguna vm se quede en estado zombie


#!/bin/bash


HIHA_ZOMBIE=`sudo /usr/sbin/xentop -bi1 | awk '{ print $1 }' | grep -wc "Zombie-"`
NOMBRE_TOTAL=`sudo /usr/sbin/xentop -bi1 | awk '{ print $1 }' | grep -wv "NAME" | wc -l `

if [ $HIHA_ZOMBIE -ne 0 ] ; then
CRU=`sudo /usr/sbin/xentop -bi1 | awk '{ print $1 }' | grep "Zombie-"`
PLA=`echo -n $CRU`
TEXTRET="Error. Domain Zombie: $PLA "
RETORN=2
else
TEXTRET="OK. Totes les maquines ($NOMBRE_TOTAL) correctes."
RETORN=0
fi

echo $TEXTRET
exit $RETORN



Monitorizar Xen con Nagios - Memoria Virtual Machines





Otro script del mismo estilo para alertar en caso que la memoria de una maquina virtual llegue a warning/critical.

#!/bin/bash

#" parametres entrada nivell de warning i de critical
if [ $# -ne 2 ] ; then
echo "Error es requereixen 2 parametres, el percentatge de warning i de critical"
exit 2
fi

PECRIT=$2
PEWARN=$1
RETORN=0
TEXTRETORN=""
TEMPFILE=`mktemp`

llistat=`sudo /usr/sbin/xentop -bi1 | awk '{ print $1}' | grep -wv "NAME" | grep -v "Domain-0" `
nombre_dominis=`sudo /usr/sbin/xm list | grep -wv "Name" | wc -l`

sudo /usr/sbin/xentop -bi3 >$TEMPFILE
for ite in $llistat ; do
nivell_cpu=`grep "$ite" $TEMPFILE| awk '{ print $6 }' | tail -1| cut -d'.' -f1`

if [ $nivell_cpu -ge $PECRIT ] ; then
RETORN=2
TEXTRETORN="$TEXTRETORN Crit($ite),"
elif [ $nivell_cpu -ge $PEWARN ] ; then
if [ $RETORN -ne 2 ] ; then
RETORN=1
fi
TEXTRETORN="$TEXTRETORN Warn($ite),"
fi
done
if [ $RETORN -eq 0 ] ; then
TEXTRETORN="OK. Totes maquines ($nombre_dominis) per sota limits memoria."
fi
if [ $RETORN -eq 1 ] ; then
TEXTRETORN="WARNING. $TEXTRETORN"
fi
if [ $RETORN -eq 2 ] ; then
TEXTRETORN="ERROR. $TEXTRETORN"
fi

rm -f $TEMPFILE
echo $TEXTRETORN
exit $RETORN


martes, 16 de marzo de 2010

Monitorizar Xen con Nagios - CPUs





Un pequeño script que comprueba que las cpus de las maquinas virtuales no exceden del warning y critical.

#!/bin/bash

#" parametres entrada nivell de warning i de critical
if [ $# -ne 2 ] ; then
echo "Error es requereixen 2 parametres, el percentatge de warning i de critical"
exit 2
fi

PECRIT=$2
PEWARN=$1
RETORN=0
TEXTRETORN=""
TEMPFILE=`mktemp`

nombre_dominis=`sudo /usr/sbin/xm list | grep -wv "Name" | wc -l`
llistat=`sudo /usr/sbin/xentop -bi1 | awk '{ print $1}' | grep -wv "NAME"`

sudo /usr/sbin/xentop -bi2 >$TEMPFILE
for ite in $llistat ; do
nivell_cpu=`grep "$ite" $TEMPFILE | awk '{ print $4 }' | tail -1 | cut -d'.' -f1`

if [ $nivell_cpu -ge $PECRIT ] ; then
RETORN=2
TEXTRETORN="$TEXTRETORN Crit($ite),"
elif [ $nivell_cpu -ge $PEWARN ] ; then
if [ $RETORN -ne 2 ] ; then
RETORN=1
fi
TEXTRETORN="$TEXTRETORN Warn($ite),"
fi
done
if [ $RETORN -eq 0 ] ; then
TEXTRETORN="OK. Totes maquines ($nombre_dominis) per sota limits CPU."
fi
if [ $RETORN -eq 1 ] ; then
TEXTRETORN="WARNING. $TEXTRETORN"
fi
if [ $RETORN -eq 2 ] ; then
TEXTRETORN="ERROR. $TEXTRETORN"
fi

rm -f $TEMPFILE
echo $TEXTRETORN
exit $RETORN

La salida si todo esta Ok seria:
OK. Totes maquines (5) per sota limits CPU.

Luego hay que añadir el comando para hacer sudo en el usuario nagios para los comandos xentop y xm list

nagios ALL=(ALL) NOPASSWD:/usr/sbin/xm list
nagios ALL=(ALL) NOPASSWD:/usr/sbin/xentop

miércoles, 3 de marzo de 2010

Monitorizar Xen con Nagios






Script check_xenvm

#!/bin/sh
#
# COPYRIGHT : (c) 2006 SUSE Linux GmbH. All rights reserved.
#
# AUTHOR : Axel Schmidt
#
# BELONGS TO : NLPOS/SLEPOS/Xen Nagios Integration
#
# DESCRIPTION : Runs "xm list" and returns the available xen vms
#
# $Revision: 1.0 $
#
# Permission to use, copy, modify, distribute, and sell this software
# and its documentation for any purpose is hereby granted without fee,
# provided that the above copyright notice appear in all copies and that
# both that copyright notice and this permission notice appear in
# supporting documentation.

# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHOR OR SUSE BE LIABLE FOR ANY CLAIM, DAMAGES
# OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
# THE USE OR OTHER DEALINGS IN THE SOFTWARE.

PARM1=$1
WARN=$2
PARM2=$3
CRIT=$4


if [ "$PARM2" != "-c" -o "$CRIT" == "" ]; then
echo "Usage: $0 -w -c "
# Nagios exit code 3 = status UNKNOWN = orange

if [ "$PARM1" != "-h" ]; then
exit 3
else
echo ""
echo " -w = Minimum Number of Xen VMs to activate a warning message."
echo " -c = Number of Xen VMs to activate a critical message."
echo " -h = This help message."
exit 3
fi
fi


RUNNING=$(sudo /usr/sbin/xm list | awk '!/[DN]/ {print $1 }')
NBVMS=$(echo $RUNNING | wc -w)
HNAME=$(hostname)

#echo "Xen Running =" $RUNNING

if [ "$NBVMS" -le "$CRIT" ]; then
echo "Critical Xen VMs Usage - Total NB: $NBVMS - detected VMs: $RUNNING"
# Nagios exit code 2 = status CRITICAL = red
exit 2
else if [ "$NBVMS" -le "$WARN" ]; then
echo "Warning Xen VMs Usage - Total NB: $NBVMS - detected VMs: $RUNNING"
# Nagios exit code 1 = status WARNING = yellow
exit 1
else
echo "OK: Xen Hypervisor \"$HNAME\" is running Xen VMs: $RUNNING"
# Nagios exit code 0 = status OK = green
exit 0
fi
fi
Comando

# added for Xen VM Monitoring

define command{
command_name check_xen_vm
command_line $USER1$/check_xenvm -w $ARG1$ -c $ARG2$
}

Servicio

define service{
use generic-service
host_name localhost
service_description Xen Virtual Machine Monitor
is_volatile 0
check_period 24x7
max_check_attempts 4
normal_check_interval 5
retry_check_interval 1
contact_groups admins
notification_options w,u,c,r
notification_interval 60
notification_period 24x7
check_command check_xen_vm!2!0
}
/etc/sudoers

  • Login as root
  • Execute: visudo1
  • Add the following line:
    nagios ALL=(ALL) NOPASSWD:/usr/sbin/xm list
  • Save changes and exit visudo