2014年2月26日

網管的好幫手-Nagios 【歷史報表篇】

有了上篇介紹的圖形化管理工具-NagiosQL,是不是覺得設定監控主機及服務時,終於可以擺脫那些怎麼也不知道該怎麼設定的監控檔。

但,登入Nagios的網頁界面後,怎麼發現竟然只有最近一次的數值資料!美美的報表圖表咧!
這樣的話,怎麼做趨勢分析,怎麼去抓正常環境的基礎數值(Baseline)?

沒錯,Nagios Core的設計,主是著重於當次收集的資料並判斷是否符合所設定的Warning, Critial等數值將該服務/主機標示為不同狀態,同時依照預先在監控檔中設定的發報條件進行發報及告警。

不過Nagios Core仍然保留了監控數值資料的標準輸出資料檔(Performance Date,或perfdata),以做為其他套件繪製歷史報表的依據。網路上能找到與Nagios Core配合較多的歷史報表套件有兩個-nagiosgraph, 以及接下來要介紹的主角-pnp4nagios。基本上這兩套都是對Nagios Core的perfdata進行處理後,透過呼叫RRD tool產生報表的套件。但"據說" pnp4nagios的使用上彈性較高,所以最後決定用pnp4nagios,至於nagiosgraph就沒再花時間去研究了。
底下就是來自pnp4nagios官方網頁中的示範報表。


套件安裝的部份其實已在【基礎安裝篇】中完成了,若是忘記的話,在Ubuntu環境下,只要一行指令就能解決!
apt-get install pnp4nagios
而pnp4nagios最核心的程式,就是process_perfdata.pl這隻perl script,它是用來處理Nagios Core所產生的perfdata資料,再轉輸出成RRD資料檔以及產生報表頁面所需的xml檔案。而perfdata與RRD/XML的資料對應關係,則定義在pnp4nagios的Template中。
也就是說只要知道input與output該如何對應,使用者也可以自行開發對應的template進行資料處理及報表產製。同理,若是Nagios的plugin輸出的perfdata,其格式無法對應既有的template時,就會使得pnp4nagios無法產生該Host或Service所對應的xml,導致圖表及網頁存取失敗的錯誤訊息發生。

pnp4nagios官網文件的說明,pnp4nagios支援四種與Nagios取得資料的方式,分別說明如下:
1. Synchronous模式-直接將呼叫process_perfdata.pl的動作定義在Nagios的command中(Nagios.cfg的預設command名稱為process-service-perfdata及process-host-perfdata),而在設定監控service/host設定時,直接觸發上述command進行perfdata處理。(設定簡單,報表即時產生,但系統負載高)
2. Bulk模式 - 將Nagios產生的perfdata放在臨時檔(spool file)中,修改Nagios預設command,並定時呼叫process_perfdata.pl進行spool file的處理。(設定稍複雜,報表批次產生,系統負載低,但需小心資料處理過久的問題)
3. Bulk模式加上NPCD - 與Bulk模式大致相同,但唯一的不同點在於command中只將spool file由Nagios產出的目錄搬運到pnp4nagios的spool file目錄中。再由NPCD (Nagios Performance C Daemon)監視pnp4nagios的spool file,在有新進spool file時進行資料處理。(設定較複雜,報表批次產生,系統負載低,且NPCD可多執行緒進行處理)
4. Bulk模式加上npcdmod - 與Bulk模式加上NPCD大致相同,只是在nagios.cfg設定產生perfdata spool file時,是透過npcdmod執行,而非直接由Nagios主程式產生。(設定最複雜,報表批次產生,系統負載最低,且NPCD可多執行緒進行處理)

評估後,個人是決定用Bulk模式加上NPCD的方式進行資料轉換,以減輕系統負載但又能有接近即時的報表產出。
接下來就開始說明後續的設定,讓我們安裝好的pnp4nagios動起來,並配合Nagios Core呈現圖形資料。

以Ubuntu apt-get安裝的pnp4nagios套件預設是以Synchronous模式安裝,所以要先將NPCD設為可啟動。
vi /etc/default/npcd
RUN="NO" 修改為 "YES"
接下來,Ubuntu的套件安裝時,忘了將pnp4nagios的apache設定檔連結到/etc/apache2/conf-enabled底下,所以要記得幫忙下指令建立設定檔連結。不然之後無論怎麼設定,就是會出現找不到網頁的錯誤訊息....冏rz
ln -s /etc/pnp4nagios/apache.conf /etc/apache2/conf-enabled/pnp4nagios.conf
接下來開始修改nagios.cfg,開啟NagiosQL網頁後,到 Tools => Nagios Config
首先將process_performance_data改為"1",這樣才會有perfdata輸出!
接下來,告訴Nagios將spool file放到pnp4nagios指定路徑下。
host_perfdata_file=/var/spool/pnp4nagios/nagios/host-perfdata
service_perfdata_file=/var/spool/pnp4nagios/nagios/service-perfdata
修改perfdata輸出的格式如下:
service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$
host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$
將perfdata輸出模式修改為spool file。
host_perfdata_file_mode=a
service_perfdata_file_mode=a
修改呼叫perfdata的時間間隔為15秒,並修改呼叫perfdata處理的command名稱。
host_perfdata_file_processing_interval=15 
service_perfdata_file_processing_interval=15 
host_perfdata_file_processing_command=process-host-perfdata-file 
service_perfdata_file_processing_command=process-service-perfdata-file
完成後就可以按下下方的"Save",進行存檔。
接下來到Commands => Definitions => Add 新增剛才在nagios.cfg中修改後的command名稱。
Command*欄位中輸入: process-host-perfdata-file
Command line*欄位中輸入:/bin/mv /var/spool/pnp4nagios/nagios/host-perfdata /var/spool/pnp4nagios/npcd/host-perfdata.$TIMET$
完成後按下Save
加完host的處理命令後,依樣畫葫蘆新增service的處理命令。
Command*欄位中輸入: process-service-perfdata-file
Command line*欄位中輸入:/bin/mv /var/spool/pnp4nagios/nagios/service-perfdata /var/spool/pnp4nagios/npcd/service-perfdata.$TIMET$
Command修改完成,別忘了按下Write config file按鈕,以產生真正的command.cfg。
別忘了要重開Nagios服務,套用新的設定。
pnp4nagios的設定基本上完成,但還有些檢查步驟要到command line底下完成,否則直接啟動npcd服務:
service npcd start
可能會看到 Fail 的錯誤訊息哦!
首先,檢查/var/spool/pnp4nagios的權限是否正確
ls -al /var/spool/
下圖是owner及group有問題,以下列指令更正。
chmod -R nagios.nagios /var/spool/pnp4nagios/
另外,pnp4nagios套件中的htpasswd.users可能會套用到原先Ubuntu nagios3的設定,
建議檢查/etc/apache2/conf-enabled/pnp4nagios.conf
AuthUserFile的正確位址應該是在 /usr/local/nagios/etc/htpasswd.users
若不正確的話,請修改,並在修改完成後,重啟apache2服務
service apache2 reload
最後就是見證奇跡....哦!不! 驗收的時候了!
在網址列輸入 http://[nagios server IP]/pnp4nagios/ ,看看能不能顯示出如下圖的頁面。
那...我們每次要看報表時,都得要手動敲上頭的網址這麼麻煩嗎?
OK,接下來就來告訴大家,怎麼把pnp4nagios的報表嵌到Nagios網頁中。
Nagios的perfdata可分為host以及service兩種,這點由先前的設定中可以清楚的看出來。
接下來以host perfdata為例,示範如何嵌報表到Nagios網頁。

假設每個host都有套用到general-host這個template時,直接修改generic-host這個host template。
Addon settings中,在Action URL中輸入
/pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_
 儲存後記得 Write config file,再將Nagios服務重啟
 回到Nagios網頁,打開Host Detail連結,就可以看見每個Host旁多出一個小圖示。
點選該Host的新增小圖示,就會跳出該Host的歷史報表網頁。右下角Services處亦可切換該Host有被監控的其他服務之報表。
至於Service嵌入Nagios網頁的部份,大致上與Host的動作相同,只須要換成所屬的service或是套用的service template,在Action URL加上底下字串即可!
/pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$

這樣pnp4nagios的歷史報表篇就結束啦!
有興趣了解更多pnp4nagios細節的話,可以到官方網頁的document去看完整的文件。
至於客製pnp4nagios template的部份,小弟沒有仔細研究,就請大家移駕上頭的官方文件網站去查資料囉!


沒有留言:

張貼留言

本部落格版權宣告

創用 CC 授權條款
自由人、自由事Freeman Lee製作,以創用CC 姓名標示 4.0 國際 授權條款釋出。