domingo, 23 de agosto de 2009

Monitorando a temperatura e fans com o MRTG

Todo ano quando chega o verão me deparo com uma preocupação: a temperatura do meu computador.

Depois de anos "sofrendo" com isso, conversando com o Alberto recebi uma sugestão simples mas que nunca tinha pensado em utilizar: monitorar a temperatura do micro com o MRTG.

Com essa ideia na cabeça, cheguei em casa e me dedique a implementação.

Para começar, instalei o pacote lm_sensors e configurei o computador para ler os sensores, com o comando sensors-detect. Após responder SIM a todas as perguntas, testei se a leitura dos sensores estava funcionando com o comando sensors. A saída recebida foi:
root@hellboy:/# sensors
it8718-isa-0680
Adapter: ISA adapter
in0: +1.15 V (min = +0.00 V, max = +4.08 V)
in1: +2.13 V (min = +0.00 V, max = +4.08 V)
in2: +3.34 V (min = +0.00 V, max = +4.08 V)
in3: +2.98 V (min = +0.00 V, max = +4.08 V)
in4: +3.06 V (min = +0.00 V, max = +4.08 V)
in5: +1.52 V (min = +0.00 V, max = +4.08 V)
in6: +0.00 V (min = +0.00 V, max = +4.08 V) ALARM
in7: +2.96 V (min = +0.00 V, max = +4.08 V)
in8: +3.23 V
fan1: 1027 RPM (min = 0 RPM)
fan2: 0 RPM (min = 0 RPM)
temp1: +18.0°C (low = -1.0°C, high = +127.0°C) sensor = thermal diode
temp2: +25.0°C (low = -1.0°C, high = +127.0°C) sensor = thermistor
temp3: -128.0°C (low = -1.0°C, high = +127.0°C) sensor = disabled
cpu0_vid: +0.000 V

coretemp-isa-0000
Adapter: ISA adapter
Core 0: +36.0°C (high = +86.0°C, crit = +100.0°C)

coretemp-isa-0001
Adapter: ISA adapter
Core 1: +35.0°C (high = +86.0°C, crit = +100.0°C)
De posse dessa informação, comecei a criar os scripts de leitura das temperaturas dos processadores e da velocidade dos fans.

Como tenho 2 processadores, tenho de ler a temperatura do Core 0 e do Core 1. Para isso estou usando o seguinte script (/usr/local/sbin/cputemp.sh):
#!/bin/bash
echo "`/usr/bin/sensors | grep Core\ 0 | awk '{print " " $3}' | cut -c 3-6 `"
echo "`/usr/bin/sensors | grep Core\ 1 | awk '{print " " $3}' | cut -c 3-6 `"
Exemplo da saída do script:
root@hellboy:/# /usr/local/sbin/cputemp.sh
37.0
36.0
Da mesma maneira, tenho 2 fans. Assim, para ler a rotação dos mesmos estou usando o seguinte script (/usr/local/sbin/fans.sh):
#!/bin/bash
echo "`/usr/bin/sensors | grep fan1 | awk '{print " " $2}' | cut -c 2-5 `"
echo "`/usr/bin/sensors | grep fan2 | awk '{print " " $2}' | cut -c 2-5 `"
Exemplo da saída do script:
root@hellboy:/# /usr/local/sbin/fan.sh
1025
0
Esses scripts não são genéricos, e provavelmente terão de ser adaptados para a realidade de cada computador, pois dependem da versão do lm_sensors instalada e de como seus dispositivos serão detectados.

Depois de verificar que os scripts estão funcionando é hora de instalar o MRTG e o Apache (para poder visualizar os gráficos no browser). No meu caso, como uso Ubuntu, rodar apt-get install mrtg apache2 é o suficiente. Depois de instalados, é necessário criar a pasta /var/www/mrtg.

Edite então o arquivo /etc/mrtg.cfg colocando no mesmo o seguinte conteúdo:
WorkDir: /var/www/mrtg
Language: brazilian

Target[fan]: `/usr/local/sbin/fan.sh`
Title[fan]:"Coolers"
PageTop[fan]:

Coolers


Options[fan]: growright,gauge,noinfo,unknaszero
YLegend[fan]: RPM
ShortLegend[fan]: RPM
MaxBytes[fan]: 8000
Legend1[fan]: Fan1
Legend2[fan]: Fan2
LegendI[fan]: Fan1
LegendO[fan]: Fan2

Target[temp]: `/usr/local/sbin/cputemp.sh`
Title[temp]:"Temperatura da CPU/MB"
PageTop[temp]:

Temperatura CPU/MB


Options[temp]: growright,gauge,noinfo,unknaszero
YLegend[temp]: Graus Celsius
ShortLegend[temp]: Graus
MaxBytes[temp]: 90
Legend1[temp]: Core0
Legend2[temp]: Core1
LegendI[temp]: Core0
LegendO[temp]: Core1

Como uso Ubuntu, o MRTG por padrão já roda no cron a cada 5 minutos. Se não for seu caso, basta criar o arquivo /etc/cron.d/mrtg, com o seguinte conteúdo:
*/5 * * * * root if [ ! -d /var/lock/mrtg ]; then mkdir /var/lock/mrtg; fi; if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg.cfg 2>&1 | tee -a /var/log/mrtg/mrtg.log ; fi
Para finalizar, crie um index.html para sua página, o que irá facilitar a visualização dos gráficos. Para isso rode o comando indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html.

Finalmente, após tudo instalado e configurado, aponte seu browser para http://localhost/mrtg para acompanhar os gráficos.



Boa monitoração. :-)

PS: Baixe os scripts e arquivos de configuração aqui.