本文基于Cacti監控軟件,針對在無人值守的情況下,對機房的溫度進行實時的監控和圖形顯示,并容許設定報警溫度,機房超溫發送給機房管理人員。
系統原理
為了實時監控機房的溫度,本文基于Cacti監控軟件,對機房的溫度進行實時的監控和圖形顯示,并容許設定報警溫度,機房超溫則發送報警信息至機房管理人員。
Cacti是一套基于php、mysql、snmp及rrdtool開發的網絡流量監測圖形分析工具,利用Cacti的SNMP信息輪詢機制,實時獲取各種信息,并顯示在Cacti監控界面。Cacti同時具有強大的插件功能,比如具備閾值報警功能的thold插件,可以發送郵件,還可以后臺編程發送短信至網絡管理人員的手機終端。
系統在一臺服務器上采集溫度,在Cacti服務器上使用ftp獲取到該數據,Cacti使用snmp獲取到該數據放入rrd數據庫,最后在Web上圖形顯示。
系統實現
溫度采集
購買一款USB接口的溫度計,該溫度計必須支持將溫度記錄保存至文本文件的功能。
系統每次重啟溫度計監控軟件都會新建一個以創建時間為文件名的日志文件,溫度計監控軟件還會每天新建一個日志文件。日志文件以如下的格式為記錄,每行一條:
1,35.63,2012-4-2 16:13:39
為了使Cacti服務器讀取到最后的溫度記錄,將在Windows服務器上編寫一個計劃任務,該任務定時執行,將日志文件的最后一條溫度記錄讀取到特定的文本文件,以供Cacti服務器采集。該批處理的腳本如下:
@echo off
cd H:\temper
dir/B/OD>H:\filelist.txt
setlocal enabledelayedexpansion
for/f“delims=”%%i in(H:\filelist.txt)do(
seta=%%i
)
cd H:\temper
@copy“%a%”H:\temp.txt
set d=H:\temp.txt
for/f“usebackq delims=”%%i in(%d%)do(
set d=%%i
)
if NOT“%d%”==“H:\temp.txt”(@echo %d%>H:\
ftpfortemper\lastline.txt)
上述腳本的功能大概描述如下:讀取日志文件所在目錄的所有文件,按照日期排序寫入filelist.txt文件,然后讀取filelist.txt文件最后一條記錄,該記錄為溫度計軟件目前在讀寫的日志文件,賦值給變量a,然后讀取該日志文件copy給temp.txt以供讀?。ǚ乐刮募x取的時候溫度計軟件需要進行訪問),最后讀取temp.txt,如果temp.txt文件為空,則將最后一條記錄即溫度計最后讀取到的溫度寫入到lastline.txt。
添加計劃任務,每4分鐘運行一次:
schtasks /create /sc minute/mo 4 /tn “temper”/tr H:\ftpfortemper\filelist.bat
最后,在Windows服務器上開啟ftp服務,設置賬號和密碼,訪問目錄為擁有lastline.txt文件的文件夾。
Cacti監控的實現
1.編寫腳本ftp.sh以便snmp讀取溫度信息。
#!/bin/bash
ftp-i222.201.131.230 2121>/dev/null 2>&1
errorline=‘0’
prevtemper=`tail-n1/home/zqliu/temper/temper_
log`
lastline=`tail-n1/lastline.txt`
if[“$prevtemper”=“$errorline”];then
prevtemper=`tail-n1/home/zqliu/temper/errorline`
fi
if[“$prevtemper”=“$lastline”];then
echo $errorline>>/home/zqliu/temper/temper_log
tail-n1
else
tail-n1/lastline.txt>>/home/zqliu/temper/temper_
log
awk-F“,”‘{print$2}’/lastline.txt
fi
2.設定.netrc文件,使服務器可以不用密碼從溫度采集服務器下載lastline.txt文件。
3.修改snmp配置文件#vi/etc/snmp/snmpd.conf,增加如下一行:
exec.1.3.6.1.4.1.2021.54ftp.sh/bin/bash/root/ftp.sh
重啟snmpd服務。
4.測試新的oid:
#snmpwalk-cpublic-v2c
localhost.1.3.6.1.4.1.2021.54
UCD-SNMP-MIB::ucdavis.54.1.1=INTEGER:1
UCD-SNMP-MIB::ucdavis.54.2.1=STRING:“ftp.
sh”
UCD-SNMP-MIB::ucdavis.54.3.1=STRING:“/bin/
bash/root/ftp.sh”
UCD-SNMP-MIB::ucdavis.54.100.1=INTEGER:0
UCD-SNMP-MIB::ucdavis.54.101.1=STRING:
“31.5”
UCD-SNMP-MIB::ucdavis.54.102.1=INTEGER:0
UCD-SNMP-MIB::ucdavis.54.103.1=““
那么OID.1.3.6.1.4.1.2021.54.101.1,
即為所需要的獲取到的溫度數據。
圖形監控
1.增加數據模板
在Cacti界面中console->Templates->Data Templates,按照步驟逐一添加數據模板。設置完畢以后點擊create,然后下面會多出一些選項,我們只需填寫一項就可以,就是OID那一項,把上面記下來的OID填寫進去,如圖1所示。
2.增加圖形模板在Cacti界面中console->Templates->GraphTemplates,按照步驟逐一添加設置,添加完成后結果,如圖2所示。
3.創建圖形添加完數據和圖形模板后,我們就可以在本地服務器上添加新的圖形了。
在New Graphs中選擇主機然后在GraphTemplates中的下拉表拉選我們添加的模板,點擊create就完成了。最后的監控圖形,如圖3所示。
短信報警
首先安裝thold插件,Cacti插件可以在http://docs.Cacti.net/plugins這個網站下載。并且在Cacti界面中console->Management->Thresholds,按照步驟設置監控圖的上下閾值,
然后找到thold目錄下的thold_functions.php文件,在function thold_mail函數下添加:
file_put_contents(‘/usr/local/apache/htdocs/Cacti/
log/changed.log’,$subject);
exec(”/usr/local/apache/htdocs/Cacti/plugins/thold/
sendsms.sh“);
該代碼的意思是將告警變量(標題)$subject寫入changed.log,然后執行sendsms.sh腳本。sendsms.sh為發短信的腳本。
在這里我們采取兩種方式進行短信報警,一個是使用飛信報警,二是使用短信貓報警。
飛信報警我們使用PHP飛信發送類(PHPFetion)發送短信。按照如下代碼發信:
require‘PHPFetion.php’;
$fetion=new PHPFetion(‘136xx’,‘密碼’);
$fetion->send(‘135xx’,‘Hello Fetion1!’);
使用短信貓報警的時候,需要購置一款usb短信貓,然后在服務器上安裝gnokii.gnokii提供了在不同操作系統下移動電話使用的工具和用戶空間的驅動程序,支持以命令行形式直接向手機發送短信。
if[-s“/usr/local/apache/htdocs/Cacti/log/changed.
log”]
then
cat/usr/local/apache/htdocs/Cacti/log/changed.log|/
usr/bin/gnokii--sendsms188xxx>/dev/null2>&1
rm-f/usr/local/apache/htdocs/Cacti/log/changed.
log>/dev/null2>&1
fi
至此,機房溫度監控和短信報警設置完成。
北京金恒智能系統工程技術有限責任公司 版權所有 Copyright 2007-2020 by Create-china.com.cn Inc. All rights reserved.
法律聲明:未經許可,任何模仿本站模板、轉載本站內容等行為者,本站保留追究其法律責任的權利!
電話:86+10-62104277/2248/4249 傳真:86+10-62104193-819 京ICP備10010038號-2網站XML
智慧機房
在線體驗