Muchas veces quedamos con dudas cuando mandamos a reiniciar nuestro
servidor o notamos un bajo rendimiento en nuestra maquinas de prueba cacera esa que tenemos sin monitor (Headless). Una forma de estar un poco mas seguros de que es lo que esta pasando o por lo menos descartar problemas de hardware es registrar voltajes y temperaturas de nuestro servidor.
Ver las temperaturas de nuestro servidor es posible usando el paquete lm_sensors; este paquete lee las temperaturas que registran los sensores de nuestra tarjeta madre así como también los voltajes y revoluciones por minuto de los fan-coolers que tengamos conectados.
Instalación y uso de lm_sensorsEl software de lm_sensors, tal como se indica en su página, contiene un conjunto de herramientas para la monitorización de la salud del hardware del sistema. Para instalarlo, tras descargarlo de aquí, necesitaremos antes instalar I2C.
I2CPodemos descargarlo del mismo lugar en el que podemos encontrar
lm_sensors. El tgz contiene los drivers para los buses o los chips i2c. Son unos drivers más desarrollados que los que podemos encontrar en el propio núcleo. Podemos leer más información acerca de lo que i2c significa y de que drivers incluye el paquete en el siguiente documento.
Tras descargarlo lo descomprimimos de la manera habitual:
| Code: : |
tar -xvzf i2c-2.6.1.tar.gz
cd i2c-2.6.1
|
Consultando el fichero INSTALL, podemos ver que es posible instalar estos drivers de tres formas distintas. Los siguientes pasos indican como hacerlo de tal forma que los drivers queden integrados con el núcleo. Para ello, debemos parchear el núcleo. Dentro del directorio raíz de las fuentes de i2c, tecleamos lo siguiente:
| Code: : |
./mkpatch/mkpatch.pl . /usr/src/linux > i2c-patch (suponiendo que los fuentes del núcleo se encuentren en /usr/src/linux)
cd /usr/src/linux
patch -p1 -E </var/instalacion/i2c-2.6.1/i2c-patch (suponiendo que los fuentes de i2c se hayan descomprimido en /var/instalacion/)
|
Tras esto compilamos el kernel de manera habitual. Podremos observar la pantalla de configuración de I2C bajo el menú Character Devices en menuconfig. Para probar la correcta instalación, podemos, si lo hemos incluido como módulo, teclear lo siguiente:
| Code: : |
modprobe i2c-elv
lsmod
lm_sensors
|
La instalación de lm_sensors también puede ser realizada de dos formas: totalmente independiente del núcleo o parcheando el mismo. Hay que tener en cuenta que al contrario que en el caso anterior, si decidimos realizar un parcheo del núcleo también deberemos compilar el paquete descomprimido para poder usar las utilidades. Vamos a realizar la instalación de tal forma que parcheemos el núcleo. Para ello, dentro de un directorio temporal:
tar -xvzf lm_sensors-2.6.1.tar.gz
cd lm_sensors-2.6.1
./mkpatch/mkpatch.pl . /usr/src/linux > sensors_patch (suponiendo que los fuentes del núcleo se encuentren en /usr/src/linux)
cd /usr/src/linux
patch -p1 -E </var/instalacion/lm_sensors-2.6.1/sensors_patch (suponiendo que los fuentes de lm_sensors se encuentren en /var/instalacion)
Una vez hecho esto configuramos y compilamos el núcleo como es habitual. Podremos ver la configuración de los sensores bajo el menú de Character devices, pero solo estará disponible si se selecciona soporte para I2C. Hay que tener en cuenta que no se puede hacer carga de módulos por demanda. Es decir, se deberá usar de forma explícita modprobe con todos aquellos módulos relacionados con lm_sensors que se quieran utilizar.
En el caso de problemas de compilación del núcleo al utilizar el procedimiento anterior (como le sucede al autor de este documento), podremos realizar la instalación de forma totalmente independiente del código del núcleo. Este segundo método instalará el paquete lm_sensors de forma completa (al contrario que en el caso anterior, que tras parchear el núcleo era necesario instalar el resto de herramientas del paquete). El método consiste básicamente en ejecutar lo siguiente:
| Code: : |
make all
make install
|
Se producirán ciertos mensajes de error por faltar determinados archivos .*d, que se pueden ignorar sin ningún problema. ANTES de compilar puede ser necesario editar el archivo Makefile para cambiar el valor de dererminadas variables, que se listan a continuación junto a su significado:
SHELL: ruta absoluta o completa al shell.
LINUX: la ruta de los fuentes del núcleo
COMPILE_KERNEL: Determina si se desea compilar los módulos correspondientes al núcleo. Por defecto el valor 1 solo instalará los módulos que no se encuentren ya incorporados en el kernel. Si existen ciertos módulos introducidos de antemano en el núcleo, y se tiene una versión posterior del paquete lm_sensors, puede darse el caso de que los módulos nuevos no puedan ser introducidos en el núcleo. Se puede poner a 0 si se ha parcheado el núcleo y solo se desea compilar las herramientas.
I2C_HEADERS: Dónde se encuentran almacenadas las cabeceras de I2C. Si se compiló I2C de forma independiente al núcleo el valor por defecto de esta variable será correcto. En caso contrario pueden darse problemas de compilación. Puede intentarse darle el valor de LINUX_HEADERS.
SMP: Debe valer 1 para núcleos con SMP.
WARN: genera mensajes adicionales de warning. Solo de interés para desarrolladores.
MODVER: Debe ser puesto a 1 si CONFIG_MODVERSIONS está definido.
DEBUG: Algunos drivers darán más información si se pone 1 como valor de esta variable. De nuevo debemos ponerlo a 0 si no somos desarrolladores.
PREFIX: El prefijo de los directorios de instalación.
MODDIR: El directorio donde los módulos del núcleo serán instalados.
ETCDIR: Directorio donde se almacenará el archivo de configuración.
LIBDIR: Directorio donde se instalarán las librerías estáticas
BINDIR: Directorio de instalación de las herramientas útiles para los usuarios.
SBINDIR: Directorio de instalación de las herramientas de administración.
INCLUDEDIR: Directorio de instalación _base_ para los ficheros de cabecera (ver las dos siguientes variables)
SYSINCLUDEDIR: Directorio de instalación para los archivos de cabecera del sistema
LIBINCLUDEDIR: Directorio de instalación para los archivos de cabecera de las librerias de libsensors.
MANDIR: Directorio de instalación de las páginas man.
MANOWN: Dueño de las páginas de manual
MANGRP: Grupo de las páginas de manual.
Una vez hecho esto bastará con ejecutar depmod -a para que los nuevos módulos sean reconocidos. En la mayoría de los sistemas esto se hace en el arranque.
Uso de lm_sensors
¿Qué módulos debo insertar?
Dentro de las herramientas de administración existe una llamada sensors-detect que buscará todos los adaptadores I2C y SMBus para todos los dispositivos conocidos, indicándonos qué módulos deberemos instalar. Si sensors devuelve algún mensaje de error referente a que no puede cargar la librería libsensors, deberemos incluir el directorio donde están instaladas (por defecto /usr/local/lib) a /etc/ld.so.conf y ejecutar ldconfig.
Uso de los sensores
Tras el paso anterior ya deberíamos tener los módulos correspondientes cargados en memoria, con lo que ya podemos usar los programas de sensor instalados para obtener un informe de todos los dispositivos correspondientes. Existe también un manual para este programa (man sensors). Ejecutando sensors -s se usará la configuración indicada en el archivos /etc/sensors.conf. De nuevo, se deberá leer el manual para tener mayor información.
Llevar un registro.
Sensors no lleva un registro de estos datos simplemente los muestra. Para llevar un registro de esto estamos desarrollando un _script_ que esta en pañales aun pero funcional el _script_ o mejor dicho el conjunto de _script_s dispone de 4 _script_s (index.sh _script_.sh showstats.sh stats.sh) que crean 2 archivos uno html y otro *.dat el html es simplemente una interfaz via web para ver las temperaturas sin nsecidad de usar ssh. Nuestro segundo archivo es un archivo con data separada por un asterisco (*) el cual almacena la fecha, hora, temperatura del procesador y la temperatura de la tarjeta madre. Este ultimo es la _base_ para la segunda etapa de nuestro _script_ ( que aun no la he desarrollado – colaboradores bien venidos!!!)
Sin mas que decir aquí les muestro mis _script_ y les doy el _link_ de download.
| Code: : |
localhost ~ # cat index.sh
echo -E "<p> "
echo -E "<br> "
date
echo -E "<br> "
echo -E "<br> "
sensors | grep -E "CPU Temp"
echo -E "<br> "
sensors | grep -E "M/B Temp"
echo -E "<br> "
sensors | grep -E "Temp3"
echo -E "<br> "
sensors | grep -E "fan1"
echo -E "<br> "
sensors | grep -E "fan2"
echo -E "<br> "
sensors | grep -E "fan3"
echo -E "<br> "
sensors | grep -E "VCore 1"
echo -E "<br> "
sensors | grep -E "VCore 2"
echo -E "<br> "
echo -E "<br> "
echo -E "</p> "
|
| Code: : |
localhost ~ # cat script.sh
#!/bin/sh
FECHA_HTML=`date`
FECHA=`date |awk '{print $2 $3 $4 $6}' | sed -e 's/ //g' -e 's/://g'`
CPU_TEMP=`sensors *-i2c-0-* |grep "CPU Temp" |awk '{print $3}' | sed -e 's/+//g' -e 's/°C//g' -e 's/Â//g'`
MB_TEMP=`sensors *-i2c-0-* |grep "M/B Temp" |awk '{print $3}' | sed -e 's/+//g' -e 's/°C//g' -e 's/Â//g'`
echo $FECHA_HTML " "$CPU_TEMP" "$MB_TEMP"<br>"
exit 0
|
| Code: : |
localhost ~ # cat showstats.sh
count=0
total_cpu=1
avg_cpu=0
while read line
3=1
do
total_cpu=$((total_cpu+$3))
cpu= `awk '{FS="*"};{print $3}'`
count=`expr $count + 1`
done < stats.dat
echo "------------------------------------------------"
echo "| Date & Time | CPU | MOBO |"
echo "|-----------------------------------------------|"
more stats.dat | awk '{FS="*"};{print $1"\t|\t"$2"\t|\t"$3"\t|"}'
echo "-------------------------------------------------"
echo Number of lines is $count
echo TOTAL CPU is $total_cpu
|
| Code: : |
localhost ~ # cat stats.sh
#!/bin/sh
FECHA_HTML=`date`
FECHA=`date |awk '{print $2 $3 $4 $6}' | sed -e 's/ //g' -e 's/://g'`
CPU_TEMP=`sensors *-isa-* |grep "CPU Temp" |awk '{print $3}' | sed -e 's/+//g' -e 's/°C//g' -e 's/Â//g'`
MB_TEMP=`sensors *-isa-* |grep "M/B Temp" |awk '{print $3}' | sed -e 's/+//g' -e 's/°C//g' -e 's/Â//g'`
echo $FECHA"*"$CPU_TEMP"*"$MB_TEMP"*" >> stats.dat
|
y aqui esta mi crontab
| Code: : |
localhost ~ # crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.XXXX9Ls7xf installed on Tue Sep 27 08:22:03 2005)
# (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $)
*/10 * * * * /root/index.sh >> /var/www/localhost/htdocs/index.html
*/15 * * * * /root/stats.sh
|
Descarga los _script_s de
AQUI
* la explicacion de la instlacion de lm_sensors es un extracto de http://www.alu.ua.es/p/psp4/Documentacion/Octubre_2001/lm_sensors.htmlPost edited by: orvtech, at: 2005/09/29 18:11