systemadmin.es > Hardware > Obtener la temperatura ambiente de un servidor mediante IPMI

Obtener la temperatura ambiente de un servidor mediante IPMI

Como es lógico los servidores deberían operar dentro de unos ciertos margenes de temperatura para evitar fallos de hardware. Si el servidor soporta IPMI podemos obtener varios valores de temperatura (entre otros): Uno de ellos la temperatura ambiente. Vamos a ver como obtener el valor y un check para el Nagios.

Primero de todo deberemos instalar los paquetes OpenIPMI y OpenIPMI-tool en el caso de CentOS, RHEL, Fedora y similares:

yum install OpenIPMI OpenIPMI-tools -y

A continuación lo arrancamos y lo añadimos al runlevel 3:

/etc/init.d/ipmi start
chkconfig --add ipmi
chkconfig --level 3 ipmi on

A continuación mediante ipmitool podemos obtener valores del servidor local, entre ellos, la temperatura ambiente:

# /usr/bin/ipmitool sdr type Temperature 
Temp             | 01h | ok  |  3.1 | -64 degrees C
Temp             | 02h | ok  |  3.2 | 50 degrees C
Temp             | 05h | ok  | 10.1 | 40 degrees C
Temp             | 06h | ok  | 10.2 | 40 degrees C
Ambient Temp     | 08h | ok  |  7.1 | 21 degrees C
CPU Temp Interf  | 76h | ns  |  7.1 | Disabled

Se puede configurar para obtener dichos valores remotamente, pero en su lugar he preferido usar un script para obtener el valor y integrarlo con el Nagios:

#!/bin/bash

TEMPWARNING="35"
TEMPCRITICAL="40"

while getopts 'w:c:h' OPT; 
do
	case $OPT in
		w)  TEMPWARNING=$OPTARG
		;;
		c)  TEMPCRITICAL=$OPTARG
		;;
		h)  JELP="yes"
		;;
		[?])  WTF="yes"
		;;
	esac
done

if [ -n "$WTF" ];
then
	echo WTF?
	exit 3;
fi

if [ -n "$JELP" ];
then
	echo $0 [-w WARNING] [-c CRITICAL]
	exit 3;
fi


TEMPERATURA=$(/usr/bin/ipmitool sdr type Temperature | grep "Ambient Temp" |awk '{ print $10 }' | grep -v  "na" | sed 's/\..*//g' | head -n1)


if [ -z "$TEMPERATURA"  ];
then
	echo UNKNOWN 
	exit 3
fi

if   [ $TEMPERATURA -ge $TEMPCRITICAL ];
then
	echo "CRITICAL temperatura ${TEMPERATURA}C |temp=$TEMPERATURA;"
	exit 2
elif [ $TEMPERATURA -ge $TEMPWARNING  ];
then
	echo "WARNING temperatura ${TEMPERATURA}C |temp=$TEMPERATURA;"
	exit 1
fi


echo "OK temperatura ${TEMPERATURA}C |temp=$TEMPERATURA;"
exit 0

Se puede ejecutar sin parámetros:

# /usr/local/nagios/libexec/check_ambient_temp
WARNING temperatura 36C |temp=36;

Pero si queremos modificar los valores de WARNING y CRITICAL podemos usar las opciones -w y -c:

# /usr/local/nagios/libexec/check_ambient_temp -w 40 -c 45
OK temperatura 36C |temp=36;

Para ejecutar dicho comando necesitamos ser root, por lo que deberemos añadir un sudo para que el NRPE puede ejecutarlo:

echo "nagios  ALL=(ALL)       NOPASSWD: /usr/local/libexec/check_ambient_temp" >> /etc/sudoers

En el caso que tengamos el n2rrd podemos generar un gráfico con la evolución de la temperatura:

Gráfico de la temperatura ambiente

Gráfico de la temperatura ambiente

Los templates son:

  • rra:
    -s 300 # 5minutes
    DS:temp:GAUGE:600:0:U
    RRA:AVERAGE:0.5:1:57600   #day
    RRA:AVERAGE:0.5:30:336   #week
    RRA:AVERAGE:0.5:120:360  #month
    RRA:AVERAGE:0.5:1440:365 #year
    RRA:MAX:0.5:1:57600   #day
    RRA:MAX:0.5:30:336   #week
    RRA:MAX:0.5:120:360  #month
    RRA:MAX:0.5:1440:365 #year
    RRA:MIN:0.5:1:57600   #day
    RRA:MIN:0.5:30:336   #week
    RRA:MIN:0.5:120:360  #month
    RRA:MIN:0.5:1440:365 #year
    
  • graph:
    --imgformat=PNG
    --lazy
    --title=$HOSTNAME$ - Temperatura ambiente
    --base=1024
    --height=200
    --width=500
    --alt-autoscale-max
    --lower-limit=0
    --vertical-label=numero
    --slope-mode
    #--only-graph
    DEF:a="$RRD_FILENAME$":temp:AVERAGE
    AREA:a#FF3932:"Temperatura ambiente\:"
    GPRINT:a:LAST:"Current \:%8.2lf"
    

3 comments to “Obtener la temperatura ambiente de un servidor mediante IPMI”

  1. Tengo un problema, la cadena TEMPERATURA no se llena cuando el check es remoto pero cuando es local sí funciona. Podrías ayudarme con eso? estoy perdido unpoco con eso, mi correo es lucied21@hotmail.com

    de antemano gracias.

  2. No entiendo que quieres decir con remoto, este check siempre se refiere al server local por lo que al ejecutarlo en remoto debe ser con el NRPE

  3. Buen aporte, me sirvio 😀

    thx!

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>