Nagios功能之監控windows的本地信息
Nagios功能之監控windows的本地信息的操作過程有點煩躁,但是很容易學,來看看!
圖-Nagios
如何監控windows系統的”本地信息”
在nagios2.x系列里面,文檔里面對于windows服務器的監控相關說明較少,剛到nagios主頁上看到3.x的文檔里面有一篇講監控windows的([url]http://nagios.sourceforge.net/docs/3_0/monitoring-windows.html[/url]
),我就仿照過來,對它略作修改來應用到我們當前的nagios2.9上去.(畢竟3.x還是測試版,2.9是最新的穩定版,用起來放心啊)
細心的朋友可能注意到了,在nagios的libexec下有check_nt這個插件,它就是用來檢查windows機器的服務的,其功能類似于上一章講的check_nrpe.不過還需要搭配另外一個軟件NSClient,它則類似于NRPE
NSClient的原理如下圖

可以看到,NSClient與nrpe最大的區別就是:
--被監控機上安裝有nrpe,并且還有插件,最終的監控是由這些插件來進行的.當監控主機將監控請求發給nrpe后,nrpe調用插件來完成監控.
--NSClient則不同,被監控機上只安裝NSClient,沒有任何的插件.當監控主機將監控請求發給NSClient后,NSClient直接完成監控,所有的監控是由NSClient完成的.
這也說明了NSClient的一個很大的問題,不靈活,沒有可擴展性.它只能完成自己本身包含的監控操作,不能由一些插件來擴展.好在NSClient已經做的不錯了,基本上可以完全滿足我們的監控需要.
#p#
安裝NSClient
從[url]http://sourceforge.net/projects/nscplus[/url]下載NSClient++-0.2.7.zip
解壓為C:\NSClient++
打開cmd 切換到C:\NSClient++
執行nsclient++ /install進行安裝
執行nsclient++ SysTray 注意大小寫,這一步是安裝系統托盤,時間稍微有點長
在運行里面輸入services.msc打開”服務”

看到下圖就說明NSClient服務已經安裝上了
雙擊打開,點”登錄”標簽,在”允許服務與桌面交互”前打勾

編輯C:\NSClient++下的NSC.ini文件
將 [modules]部分的所有模塊前面的注釋都去掉,除了CheckWMI.dll and RemoteConfiguration.dll這兩個
在[Settings]部分設置'password'選項來設置密碼,作用是在nagios連接過來時要求提供密碼.這一步是可選的,我這里方便起見跳過它,不要密碼.
將[Settings]部分'allowed_hosts'選項的注釋去掉,并且加上運行nagios的監控主機的IP.我改為如下這樣allowed_hosts=127.0.0.1/32,192.168.0.111 以逗號相隔.這個地方是支持子網的,如果寫成192.168.0.0/24則表示該子網內的所有機器都可以訪問.如果這個地方是空白則表示所有的主機都可以連接上來.注意是[Settings]部分的,因為[NSClient]部分也有這個選項.
必須保證[NSClient]的'port'選項并沒有被注釋,并且它的值是'12489',這是NSClient的默認監聽端口
在CMD中執行nsclient++ /start啟動服務,注意所在目錄是C:\NSClient++

這時在桌面右下角的系統托盤處會出現一個黃色的M字樣的圖標
查看服務
已經正常啟動了.注意服務默認設的是”自動”,也就是說是開機自動啟動的.
在cmd里面執行netstat –an可以看到已經開始監聽tcp的12489端口了
這樣外部就可以訪問了嗎?錯!防火墻也要打開tcp的12489端口,否則nagios檢查此服務的時候會報socket 超時錯誤.是critical哦!后果很十分嚴重啊.我就犯了這個錯誤,所以特別強調一下.
這樣被監控機的配置就搞定了,它就等待nagios發出某個監控請求,然后它執行請求將監控的結果發回到nagios監控主機上.
#p#
對監控主機的配置
接下來就是要配置監控主機了.與之前的nrpe的過程類似,在監控主機上做的就3件事情
1.安裝監控windows的插件(已經默認安裝了,check_nt)
2.定義命令
3.定義要監控的項目
定義命令
vi /usr/local/nagios/etc/commands.cfg
增加下面的內容
- #
- # 2007.9.6 add by yahoon
- # CHECK_NT
- # check windows hosts info
- #
- define command{
- command_name check_nt
- command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -v $ARG1$ $ARG2$
- }
如果NSClient設置了連接需要密碼,則應寫成如下格式
$USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s PASSWORD -v $ARG1$ $ARG2$
具體含義參考check_nt命令的用法
增加監控項目
vi /usr/local/nagios/etc/services.cfg
下面這個服務是監控NSClient的版本
- define service{
- host_name yahoon
- service_description check-version
- check_command check_nt!CLIENTVERSION
- max_check_attempts 5
- normal_check_interval 3
- retry_check_interval 2
- check_period 24x7
- notification_interval 10
- notification_period 24x7
- notification_options w,u,c,r
- contact_groups sagroup
- }
同樣的可以增加如下服務(為了篇幅,我只給出最關鍵的check_command這一項)
1)監控windows服務器運行的時間
check_command check_nt!UPTIME
2)監控Windows服務器的CPU負載,如果5分鐘超過80%則是warning,如果5分鐘超過90%則是critical
check_command check_nt!CPULOAD!-l 5,80,90
3)監控Windows服務器的內存使用情況,如果超過了80%則是warning,如果超過90%則是critical.
check_command check_nt!MEMUSE!-w 80 -c 90
4)監控Windows服務器C:\盤的使用情況,如果超過80%已經使用則是warning,超過90%則是critical
check_command check_nt!USEDDISKSPACE!-l c -w 80 -c 90
注:-l后面接的參數用來指定盤符
5)監控Windows服務器D:\盤的使用情況,如果超過80%已經使用則是warning,超過90%則是critical
check_command check_nt!USEDDISKSPACE!-l d -w 80 -c 90
6)監控Windows服務器的W3SVC服務的狀態,如果服務停止了,則是critical
check_command check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
7)監控Windows服務器的Explorer.exe進程的狀態,如果進程停止了,則是critical
check_command check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe
#p#
重啟nagios服務來生效,等一會就可以查看頁面了

(紅色的錯誤是因為我剛把ftp給關了,等會啟動就好了)發現有三個服務的顏色是深黃色,狀態是UNKNOWN,后面的信息是NSClient - ERROR: PDH Collection thread not running
這問題有點莫明其妙,因為大部分的新增服務都已經可以正常運行了,不要緊,把這句話放到goole里面一看,原來是由于操作系統語言的問題,好像NSClient默認支持的語言并不多.具體信息參考下面這兩個頁面
- [url]http://trac.nakednuns.org/nscp/ticket/54[/url]
- [url]http://www.meulie.net/portal_plugins/forum/forum_viewtopic.php?8636[/url]
查看NSClient的日志C:\NSClient++下的nsclient.log,里面信息如下
- 2007-09-06 10:38:35: error:.\PDHCollector.cpp:69: Getting counter info...
- 2007-09-06 10:38:35: error:.\PDHCollector.cpp:97: Detected language: 0x0804 but it could not be found in: counters.defs
- 2007-09-06 10:38:35: error:.\PDHCollector.cpp:98: You need to manually configure performance counters!
注意紅色部分,說是需要我手動配置.按照它的說明打開counters.defs文件,查看一下里面的內容,很容易就知道該怎么改了.結合上面的錯誤信息知道0x0804是當前系統語言”簡體中文”的代碼,推測系統文件和變量應該與原始的英文版都一樣,復制文件里面"English US"那部分內容,再做修改就行.我在counters.defs的最后加上了如下的內容:
- [0x0804]
- Description = "Chinese"
- NT4_SystemTotalProcessorTime = "\System\% Total Processor Time"
- NT4_SystemSystemUpTime = "\System\System Up Time"
- NT4_MemoryCommitLimit = "\Memory\Commit Limit"
- NT4_MemoryCommitByte = "\Memory\Committed Bytes"
- W2K_SystemTotalProcessorTime = "\Processor(_total)\% Processor Time"
- W2K_SystemSystemUpTime = "\System\System Up Time"
- W2K_MemoryCommitLimit = "\Memory\Commit Limit"
- W2K_MemoryCommitByte = "\Memory\Committed Bytes"
OK,再等一會看頁面,發現沒變化,看來這樣依樣畫葫蘆不行啊…不甘心,看看日志,再次打開nsclient.log發現里面的內容沒變.新修改的那部分根本就沒起作用?至少也應該像之前那樣報個ERROR才對啊?修改配置文件之后要干嘛???重啟服務!!!!
在mmc里面重啟NSClient服務,如下圖右擊對應的服務選”重新啟動”

查看日志,內容如下
- 2007-09-06 12:32:37: error:.\PDHCollector.cpp:69: Getting counter info...
- 2007-09-06 12:32:37: error:.\PDHCollector.cpp:119: Attempting to open counter...
- 2007-09-06 12:32:38: error:.\PDHCollector.cpp:122: Counters opend...
看起來沒什么問題(里面的error是引導符,開發這個程序的人下次該換換,正確了就不該是erorr了嘛),這邊看起來沒問題了,可還是要等頁面正常才放心.耐心的等一會,得到了下面的頁面.

一切搞定.我寫的累,大家也看的累吧.不過希望大家都能有收獲
整個nagios的配置過程也在此作結.多謝捧場.
#p#
后記:
羅唆一句,官方文檔是最好的教程.大家可以看到我的所有操作,大部分都是按照官方文檔一步步配置的.而且按照它配置出來的也就基本滿足需要了.了解了整個過程和原理,就可以自己加加減減做修改滿足自己的個性需求,出了問題不要緊,查文檔,用google,達到活學活用也不是難事.
還是那句話,知道了原理,一切就都簡單了.
最后針對nagios提煉幾個要點
對于插件要注意使用方法,多用”命令名 –h”看看
修改了配置文件要重啟服務生效
碰到問題google一下,別忘記了查看日志
通過文章的詳細描述,我們把nagios在windows上的監控都學會了,希望你們能真真掌握!
【編輯推薦】


















