Monitorizando espacio en disco con Nagios y Perl

Imagen de vfmBOFH

Holas.

Me aburro. Así que voy a compartir con vosotros la primera mierda que se me ha pasado por la cabeza. Y con lenguaje florido y pedante. Soy así de estupendo, yo.

Hallábame yo tocándome las $BALLS at two hands cuando notificóseme vía nagios que ciertos servidores hallábanse con un problema de espacio en disco. Tal problema consistía que tenían ocupado un 210% de su espacio disponible. Teniendo en cuenta que dicho espacio correspondía a una monstruosidad aberrante de varios TB que no debería tener ocupado más del 20%, creo que coincidireis conmigo en calificar dicha notificación como una patada en el ojete. Con bota de punta de hierro.

Después de ahogar el alarido que tal patada ojetera me puso en disposición de exhalar, conecté por ssh a los servidores en cuestión, y corroboré que el punto de montaje en cuestión no tenía más del 14% ocupado. Ello hizo que mis gónadas recuperaran tanto su posición anatómicamente correcta, como su habitual aspecto lozano, viril y peludo. Ello también hizo que sospechara automáticamente del check que nagios lanzaba contra los susodichos servidores.

Después de tirar un par de snmpwalks (a ciegas. Viva grep y LMQLP) el Masmola observó que la combinación HOST-RESOURCES-MIB y el check cutre que nagios trae por defecto (que consulta los valores en crudo basándose en las OID de dicha MIB), leía los valores de espacio en disco en las variables de 32 bits que la MIB maneja. Así que en cuanto los servidores le escupían la barbaridad monstruosa (en bytes) que tenían de capacidad, la zorra de la MIB le quitaba como dos o tres dígitos a la cifra -ahora no lo recuerdo muy bien- y el mamón del check cascaba como los mirlos al comparar con el espacio usado, que aparentaba ser superior.

Una vez diagnosticado el problema, nos pusimos con la solución, la cual acabó siendo un check mierder codeado en Perl (Perl Rocks) el cual usa otra MIB, la UCD-SNMP-MIB. Ésta tiene unas OID muy chulas que te muestran el porcentaje de uso de cada punto de montaje del sistema de ficheros. Y éste check es el que voy a compartir con vosotros. Huelga decir que para que la mierda ésta funcione, tanto el host nagios como el host a monitorizar deben tener cargada la UCD-SNMP-MIB. Si no sabeis cómo hacerlo, no sé que coño haceis leyendo esto. Bueno, ahí va:

Editado: He añadido un par de líneas al código para control de errores. Devolverá UNKNOWN si hay errores de sesión SNMP (timeouts y tal) y CRITICAL si no se encuentra el punto de montaje especificado. Gracias a dvastazion por la idea.

#!/usr/bin/perl ##################################################################### 
# Licencia HLQTSDLH 
# Check chorra para los puntos de montaje de gran tamaño 
# Como SNMP muestra los tamaños de los discos usando 32 bits 
# casca como los mirlos con grandes volúmenes 
# Aquí usaremos el porcentaje 
##################################################################### 
# Parámetros 1: Host, 2: community, 3: punto de montaje 4: warn 5: crit 
use strict; use SNMP; use lib "/usr/lib/nagios/plugins"; 
use utils qw(%ERRORS); 
my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3); my $warning = $ARGV[3] + 0; 
my $critical = $ARGV[4] + 0; 
my $session = new SNMP::Session(DestHost => $ARGV[0], Community => $ARGV[1], Version => 2 ); 
if (!defined($session)) { 
printf"ERROR Abriendo sesión SNMP: $SNMP::Session::ErrorStr\n"; exit $ERRORS{"UNKNOWN"}; 
} 
#Preparamos la variable donde almacenaremos las duplas punto-montaje/porcentaje 
my $vars = new SNMP::VarList(['dskPath'], ['dskPercent']); 
#chivato para control de errores con el punto de montaje 
my $chivato = undef; 
# Primera colecta de datos my ($mp,$perc) = $session->getnext($vars); 
if ($session->{ErrorStr}) { 
printf"ERROR de sesión: $session->{ErrorStr}.\n"; 
exit $ERRORS{"UNKNOWN"}; 
} 
# bucle para el resto 
while (!$session->{ErrorStr} && $$vars[0]->tag eq "dskPath"){ 
# Buscamos el punto de montaje correcto... 
if ($mp eq $ARGV[2]) { 
$chivato = 1; last; 
} 
else { ($mp,$perc) = $session->getnext($vars); 
} 
}; 
# Evaluamos el porcentaje y mandamos la señal a nagios 
# Si chivato está definido. Si no, es que el punto de montaje no se ha encontrado 
if (defined $chivato){ 
if ($perc < $warning) { 
printf "OK, porcentaje usado: $perc%% sobre un warn de $warning%%\n"; exit $ERRORS{"OK"}; 
} 
elsif ($perc < $critical) { 
printf "WARN, porcentaje usado $perc% sobre un crit de $critical%\n"; exit $ERRORS{"WARNING"}; 
} 
else { 
printf "CRIT, porcentaje usado $perc%% sobre un crit de $critical%%\n"; exit $ERRORS{"CRITICAL"}; 
} 
} 
#Si no se encuentra el punto de montaje, tiramos un Critical 
else { 
printf "CRIT, el punto de montaje no se encuentra\n"; exit $ERRORS{"CRITICAL"}; 
} 

Como podeis ver, no es nada del otro mundo. Pero es útil. Y como me lo he currado yo, ahí lo dejo. Salut.

8 comments

16
Ago

Imagen de vfmBOFH

Que conste que codeo poco, pero cuando lo hago indento el código.

La mierda ésta parece comerse los tabuladores.

Atentamente, La voz ésa del interior de tu cabeza que oyes cuando lees algo.

16
Ago

Imagen de dvastazion

Una observación, que seguro que como estoy de vacas y procesando el vozka de anoche no veo....En el caso de que no consigas ver la cadena SNMP o no llegues a entrar en el bucle, por "error no contemplado" ;)...¿te escupirá un 2 y por tanto te dará un crítical?

Anda, alégrame el día.

16
Ago

Imagen de vfmBOFH

Ya dije que es un check chorra. Falta el control de errores.

- Si no encuentra la cadena del punto de montaje, te da un ok con un % de espacio usado que seguramente será el del último punto de montaje de la tabla SNMP.

- Si da error de sesión, no estoy del todo seguro, pero creo que sí que salta el uknown.

Aquí la gracia era el descubrir la MIB UCD y el juego que da poder manejar porcentajes de uso y no cantidades en bytes.

EDITADO
Para tener bajo control el que no se encuentre el punto de montaje, basta con añadir un $chivato = undef antes de la colecta de datos, darle un valor si se encuentra el punto de montaje, y anidar los condicionales que evalúan el porcentaje dentro de un condicional que evalúe si $chivato está definido o no. Subiré el script modificado cuando tenga un segundo.

Atentamente, La voz ésa del interior de tu cabeza que oyes cuando lees algo.

16
Ago

Me parece cojonudo, la gestión de errores en los check ahorran sustos ;)... la semana pasada a las 3 de la mañana me salto un crítica en 37 FS por una mierda de check rápido que codee el día anterior me tuvo pegado al terminal....luego era una mierda de login failure no contemplado...

14
Sep

Eso te pasa por usar SNMP, que esta obsolético y solo lo quieren usar los "Ciscoboys"

Con lo majo que es el NRPE...

26
Sep

Los que os quejáis de SNMP es porque no lo habéis probado. Basta instalar un snmpd, dar permisos de subred y tirar. Te quitas del tirón la configuración del NRPE, ya que por defecto puedes monitorizar por SNMP la memoria (en check muuuy detallado), load average, ocupación de discos, tráfico de interfaces de red, throughput In/Out en discos... vamos que te quitas el grueso de la configuración de monitorización en cliente.

Yo los únicos check que tengo por NRPE son los de Oracle y los checks de CPU Stats.

Todos los checks con performance data para tener históricos de datos en gráficas.

Me gustaría ver cuánto tardáis en configurar NRPE xP

13
Feb

Hola amigos,

me ha encantado el post, pero tengo una duda y me gustaría comentarla por si podeis ayudarme.

Acabo de comenzar con esto del monitoreo en Nagios y tengo switch gestionables y unos aparatos que se llaman Barix para hacer Streaming que me gustaría monitoizar. 

Ya he sacado los oids con el snmpwalk, pero ya no se que hacer más!! Alguien me ayuda

18
Ene

moncler jackets
canada goose
coach factory outlet
christian louboutin outlet
ugg boots
canada goose jackets uk
yeezy 350 boost
uggs outlet
ray ban sunglasses discount
coach factorty outlet
michael kors outlet
michael kors outlet
pandora charms
michael kors outlet online
canada goose outlet
moncler jackets
coach factory outlet online
canada goose sale
kate spade
polo outlet
coach outlet
hermens bags
pandora jewelry
canada goose outlet
ugg boots
moncler outlet
nike zoom
moncler jackets outlet
the north face
longchamp outlet
coach factory outlet
timberland outlet
coach factory outlet
ralph lauren outlet
michael kors outlet
cheap uggs
adidas yeezy
north face jackets
canada goose outlet
coach outlet online
louis vuitton outlet
cheap ray ban sunglasses
ralph lauren outlet
mulberry uk
cheap ugg boots
nike shoes
hermes handbags
ugg outlet
oakley sunglasses
ugg shoes
ugg outlet store
coach outlet
fitflops sale clearance
jordan retro 11
adidas nmd
moncler outlet
burberry
cheap nfl jerseys
pandora jewelry
pandora jewelry
nike outlet
air max 97
ugg boots
michael kors canada
canada goose jackets
coach factory outlet
christian louboutin outlet
birkenstocks
ugg boots
ralph lauren uk
coach handbags
ugg outlet
nike outlet
north face outlet online
michael kors outlet
coach outlet online
oakley sunglasses
michael kors outlet
burberry outlet store
ugg shoes
coach factorty outlet
moncler outlet
coach canada
coach factory outlet online
cheap jordans for sale
pandora outlet
air max 2018
ralph lauren outlet
ugg boots
nike shoes
ugg ustralia
michael kors outlet store
air jordan shoes
cheap ray bans
nike outlet store
michael kors outlet
ralph lauren sale clearance
michael kors handbags
harden vol 1
uggs outlet
michael kors outlet clearance
nike outlet online
timberland boots
ugg boots
fitflops
coach outlet
kate spade
adidas yeezy boost
pandora charms uk
coach factory outlet
ralph lauren outlet
nike outlet store
yeezy boost
uggs clearance
supreme clothing
michael kors outlet
cheap mlb jerseys china
coach canada
cheap mlb jerseys
nike store
ugg boots canada
pandora charms sale clearance
canada goose
pandora jewelry outlet
nike air max
adidas superstar
cheap uggs
uggs
yeezy boost
ugg outlet
nike shoes
ultra boost
adidas nmd
coach outlet
supreme clothing
moncler outlet
north face outlet
ugg boots
coach outlet
michael kors outlet clearance
canada goose jackets
fitflops
mbt shoes
oakley sunglasses
jordan retro
oakley sunglasses
coach outlet
canada goose
ray ban sunglasses
moncler jackets
pandora
cheap jordans
ferragamo shoes
adidas yeezy
moncler uk
adidas outlet
moncler outlet
north face jackets
adidas nmd
ugg outlet
canadian goose
nmd shoes
coach outlet store
canada goose outlet
michael kors outlet
ralph lauren outlet
adidas nmd
cat boots
air jordan shoes
canada goose
red bottom shoes
canada goose outlet
ralph lauren
louis vuitton
michael kors outlet clearance
polo ralph lauren outlet online
burberry outlet
polo ralph lauren outlet
mbt
air jordans
ugg outlet
canada goose clothing
ralph lauren outlet
coach outlet
yeezy boost
ray ban sunglasses
pandora charms
canada goose outlet
uggs canada
canada goose jackets
kate spade outlet store
cheap nfl jerseys
ralph lauren outlet
canada goose outlet
pandora charms sale clearance
michael kors handbags
hermes handbags
canada goose coats
canada goose uk
canada goose
north face jackets
pandora charms
longchamp uk
cheap jordans
uggs
hermes bags
coach factory outlet
canada goose uk
cheap jordans
ralph lauren outlet
michael kors outlet
salvatore ferragamo shoes
oakley sunglasses
uggs
kate spade outlet store
supreme clothing
ugg outlet
coach outlet
doudoune moncler
ralph lauren
longchamp outlet
columbia sportswear
coach outlet
pandora jewelry
canada goose uk
coach factory outlet
burberry outlet
cheap uggs
christian louboutin
canada goose outlet
ralph lauren outlet
ugg boots
nike shoes for men
ugg outlet
coach outlet store online clearances
pandora charms
canada goose outlet
ugg boots on sale
michael kors outlet
ugg boots for women
ralph lauren outlet
moncler jackets
nfl jerseys wholesale
canada goose outlet
coach outlet
mbt shoes
kate spade outlet
coach factory outlet
oakley sunglasses
cheap jordans
ugg boots
jordan shoes
pandora outlet
pandora charms sale clearance
coach factory outlet
timberland boots
pandora store
canada goose uk
coach outlet
canada goose sale
fred perry polo
air max 97
coach outlet store
polo ralph lauren
michael kors outlet
coach outlet
burberry outlet
yeezy boost
discount oakley sunglasses
pandora charms
canada goose outlet
adidas shoes
uggs canada
michael kors outlet
adidas outlet
coach outlet store
ugg outlet
canada goose sale
ugg outlet
moncler jackets
oakley sunglasses sale
coach factory outlet
pandora charms sale
kate spade handbags
louis vuitton outlet store
canada goose jackets
valentino shoes outlet
adidas yeezy boost
christian louboutin outlet
polo ralph lauren outlet online
polo ralph lauren outlet
burberry sale
kate spade outlet
canada goose outlet
pandora charms sale
coach outlet store
michael kors outlet clearance
adidas shoes
nmd adidas
pandora outlet
coach outlet
adidas yeezy
coach outlet store
mulberry handbags
michael kors
kate spade bags
cheap jordans
moncler coats
hermes birkin
jordans
kate spade outlet
michael kors outlet
coach outlet
ralph lauren uk
red bottoms shoes
adidas outlet
polo ralph lauren outlet
nmd adidas
fitflops sale clearance
polo ralph lauren outlet online
michael kors outlet clearance
ralph lauren uk
mulberry outlet
pandora charms
ugg outlet
louis vuitton outlet online
louboutin shoes
cheap jordans free shipping
tory burch outlet
ralph lauren sale clearance
adidas campus
coach factory outlet
canada goose uk
canada goose jackets
longchamp outlet online
supreme new york
fitflops sale
longchamp handbags
red bottoms
canada goose sale
ralph lauren outlet
coach outlet
coach factory outlet
north face jackets
philipp plein outlet
gucci outlet
nfl jerseys wholesale
canada goose jackets
coach bags
coach outlet store online
air jordans
polo outlet
canada goose outlet
ugg outlet
canada goose
ugg boots
michael kors handbags
canada goose outlet
ugg outlet
polo ralph lauren outlet online
yeezy boost 350
ugg australia
coach outlet
valentino shoes
tory burch outlet store
pandora charms
ralph lauren outlet
ferragamo outlet
canada goose
nike air max
moncler
cheap oakley sunglasses
adidas shoes
ugg outlet
longchamp handbags
jordan shoes
polo ralph lauren outlet online
ralph lauren outlet
coach outlet
ugg boots on sale
fred perry
michael kors outlet
cheap ray ban sunglasses
ugg outlet online
canada goose outlet
moncler outlet
adidas yeezy
adidas shoes
burberry outlet canada
ray ban sunglasses
ugg boots
moncler
adidas yeezy
canada goose jackets
nike outlet
michael kors uk
mulberry bags
ugg outlet
ugg boots
michael kors canada
north face outlet
louboutin shoes
hermes handbags
louis vuitton outlet
cheap nfl jerseys
ray ban sunglasses
christian louboutin
cheap oakley sunglasses
coach outlet
ugg outlet
canada goose outlet
jordan shoes
adidas superstar
pandora charms
michael kors outlet
michael kors outlet
canada goose jackets
birkenstock sandals
canada goose outlet
ugg outlet
gucci handbags
adidas yeezy boost
pandora jewelry
michael kors outlet online
coach outlet
polo ralph lauren outlet
michael kors factory outlet
fitflops
air max 2018
coach outlet
timberland boots outlet
uggs outlet
philipp plein shirt
ugg outlet
michael kors outlet online
polo ralph lauren outlet
adidas
ugg boots
louis vuitton outlet online
ralph lauren uk
ugg outlet
hermes outlet
north face outlet
air max 2017
kate spade handbag
ugg outlet
cheap ray ban sunglasses
coach outlet
salvatore ferragamo
ray ban sunglasses
coach factory outlet
adidas shoes
michael kors outlet store
yeezy boost
1.03linpingping