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:
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"
Relacionados
Imprimir

4. November 2010 at 10:50 pm :
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.
8. November 2010 at 10:30 am :
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
15. June 2011 at 10:02 am :
Buen aporte, me sirvio
thx!