2010年11月5日 星期五

MRTG 監控 CPU溫度

在很早之前我有寫過一篇MRTG監控流量的教學

因為最近機房冷氣常常發生問題,所以要來做監控溫度的系統

SERVER OS : RedHat 5.5 or CentOS 5.5 (SUSE 也是差不多的作法)

1. 首先用 yum 下載 lm_sensors

#yum install lm_sensors

2. 使用 sensors-detect 檢查所支援的晶片

#sensors-detect

出現輸入 "Yes" "No" 的選項時,我都是直接按 "Y"
掃描結束之後,如有掃描到支援的晶片就會出現以下訊息

..
..
..
..
#----cut here----
# I2C module options
alias char-major-89 i2c-dev
#----cut here----

To load everything that is needed, add this to some /etc/rc* file:

#----cut here----
# I2C adapter drivers
modprobe i2c-isa
# I2C chip drivers
modprobe bmcsensors
# sleep 2 # optional
/usr/bin/sensors -s # recommended
#----cut here----

PS:在某些主機上不會出現以上訊息,大部份為 SERVER ,下面會在說明如何安裝

3. 使用 lsmod 查詢剛剛掃描的晶片是否已經有載入進系統中

#lsmod | grep i2c-isa
#lsmod | grep bmcsensors

如沒有訊息出現代表沒有載入此模組
直接執行以下指令載入模組

#modprobe i2c-isa
#modprobe bmcsensors


SERVER 部份處裡

如沒出現第2步驟的訊息,請查詢 /etc/sysconfig/lm_sensors

#cat /etc/sysconfig/lm_sensors

在最底下會發現 "MODULE_0=coretemp" 在我安裝的SERVER上,都是出現這訊息

這時用 modprobe 載入 "coretemp" 時會出現錯誤訊息,因為 CentOS 跟 RedHat 皆不支援此模組

我們需要下面網站,下載所需的RPM套件

http://elrepo.org/tiki/tiki-index.php


照網站上指示,執行以下指令
#rpm -Uvh http://elrepo.org/elrepo-release-0.1-1.el5.elrepo.noarch.rpm
#rpm --import
http://elrepo.org/RPM-GPG-KEY-elrepo.org
因 CentOS 上面 lm_sensors 版本為 2.10.7-9,而 kmod-coretemp 需要 2.10.8 以上,所以可將原本安裝好的 lm_sensors 移除,用以下指令安裝新版
#yum --enablerepo=elrepo install kmod-coretemp

安裝完成後執行
#modprobe coretemp

最後將 lm_sensors 服務啟動並加入 init.d 的列表中
#service lm_sensors start
#chkconfig lm_sensors on

即可成功

4. 執行 sensors 指令查詢目前各硬體溫度

#sensors

coretemp-isa-0000
Adapter: ISA adapter
Core 0: +38°C (high = +100°C)

coretemp-isa-0001
Adapter: ISA adapter
Core 1: +38°C (high = +100°C)

各主機出現的數值不一定會一樣,有些會因為有主機版的模組而可監測到主機板溫度

5. 我目前有做一個 log server 專門監控網頁狀態及硬體狀態,所以在裝有 lm_sensors 的主機上用NFS 的方式掛載 log server 的資料夾,讓 log server 上的 mrtg 可以讀取到各主機狀態

將 sensors 所顯示的資料擷取並匯入文字檔內,擷取後並加入 crontab 內每分鐘執行一次

#crontab -e
..
..
* * * * * echo `/usr/bin/sensors > /mnt/log_data/temp/"$HOSTNAME"_temp.txt`

6. 在 log server 上用 yum 安裝 mrtg

#yum install mrtg

7. 在 log server 上從其他主機上的 log 檔中擷取數值部份

#vi lab_temp.sh

#!/bin/bash
cat /mnt/log_data/temp/lab_temp.txt |grep Core |awk '{print $3}' |cut -c 2-3 |tail -n 2

說明:因主機上有兩顆 Duo Core 的CPU ,所以我取出兩顆 CPU 的溫度

8. 在 RedHat 跟 CentOS 的系統安裝 mrtg 預設在 /etc 中會有 mrtg 的目錄,在 /etc/mrtg 中建立 xxx.cfg.cpu,並輸入以下內容

#vi /etc/mrtg/lab_mrtg.cfg.cpu

可從這裡下載 lab_mrtg.cfg.cpu

9. 使用 mrtg 指令產生圖檔

#env LANG=C /usr/bin/mrtg /etc/mrtg/lab_mrtg.cfg.cpu

請執行三次,直到沒有訊息出現

10. 將上述指令加入 crontab 中,並讓指令每五分鐘執行一次

#crontab -e

*/5 * * * * env LANG=C /usr/bin/mrtg /etc/mrtg/lab_mrtg.cfg.cpu

如有多台 SERVER 需同時取出數值,可將各台 SERVER 指令寫成一個 shell script 並加入 crontab 中即可

11. 產生 index.html 檔,才可以同時監控多台 server

#indexmaker -title 'SERVERS CPU TEMP' -output /var/www/html/mrtg/index.html /etc/mrtg/csb2_mrtg.cfg.cpu /etc/mrtg/lab_mrtg.cfg.cpu /etc/mrtg/mrtg_mrtg.cfg.cpu

產生後瀏覽時可能會發現都是空白的,這時就需要編輯 index.html 檔,將路徑修改正確即可完成