Nagios-提供高效能和高準確性的網路監控軟體
【前言】
[Nagios]是個功能非常強大的網路監控軟體,不僅可以監控主機(本地端或遠端)及服務更加入許多非常人性化的觀念進去,且還可自行依需求來撰寫當監控主機或服務發生問題時的反應動作,總之是個非常強大的監控軟體,建議可以購買[網路與伺服器監視軟體-Nagios入門與應用]這本書來看裡面有非常詳細的介紹。
[Nagios 官網 Screenshots]
名詞及觀念:在開始玩 Nagios 以前有些名詞跟觀念若是先了解的話對於玩 Nagios 會更有幫助的
* 主機(Host):只要列入 Nagios 監視範圍內都視為主機(ex.Router、Switch、Printer....)
* 服務(Service):看您要針對該主機監視什麼服務(ex.DNS、LDAP、Tomcat...)
* 指令(Command):執行監視或通知聯絡人的動作稱之。(ex.check_ftp、check_http...)
* 聯絡人(Contact):監控的主機或服務發生狀況時要通知誰?
* 群組(Group):因為有群組的概念讓 Nagios 具有更多彈性(ex.連絡人郡組、主機郡組、服務郡組...)
* Plugin:用來定義在 command 設定檔內使 Nagios 來監控主機及服務稱之(ex.check_ftp、check_http...),可以自行視需求開發,當然也可以拿別人寫好現成的來使用。
* 狀態(State):簡單說 Nagios 監控後會回覆我們監控的結果,以便後續的動作
* 監控期間(Time Period):可以定義監控日期及每天(例如上班日)的時間(例如上班時間)
* 繼承(Accede):例如要監控二台主機的 Apache 服務不過不同的只有 IP 而以,這時可利用繼承的觀念讓我們把設定檔內容簡化維護起來也更容易
狀態:Nagios 執行監控動作後會回報監控結果,所以對於監控對象的狀態我們也必須了解一下顯示的訊息所代表的意義
* 主機狀態為
o OK:主機運作正常
o Unreachable:監控的icmp指令傳回無法到達,通常是網路出問題了
o UP:主機啟動了(通常從 Down->UP)
o Down:主機停止運作(通常將監控對象剛加入時會為此狀態)
* 服務狀態為
o OK:服務運作正常
o Warning:服務出現異狀(但是可忽略的)
o Critical:服務出現問題(需要立即處理)
o Unknown:服務狀態不明(偵測不到?)
* 軟狀態(Soft State):若監控動作失敗一次就通知聯絡人(有時可能一次ping不到就通知),那聯絡人應該會忙死所以我們可以設定例如持續執行ping的動作五次都不成功時(這時通常主機有問題了)再通知聯絡人,而這重試(Retry)動作的期間就稱之為軟狀態(Soft State)
* 硬狀態(Hard State):如上例所說當持續執行ping的動作五次都不成功時這時狀態就變成硬狀態(Hard State),這時可能就通知聯絡人或執行你設定的方式(例如監控是tomcat則重新啟動該服務試試)
監控方式:Nagios 預設的監控方式是由 Nagios 主機去向監控對象發出要求,然後被監控對象在回應結果,但其實換個角度想這樣的方式是不是可以反過來,這樣的話 Nagios 的 Loading 就不會那麼大了(如果你監控的機器是一狗票的話)
* NRPE(Nagios Remote Plugin Executor):若要監控遠端主機的磁碟空間而不透過 SNMP 該如何達成? Nagios 使用在遠端機器(client)上安裝 NRPE(Port 5666) 而 Nagios 本身運作 check_nrpe 來達成類似這樣的任務。Nagios --> 遠端主機
* NSCA(Nagios Service Check Acceptor):跟 NRPE 不同的地方是,Nagios 是向遠端主機傳送要求,而 NSCA 則是遠端主機主動回動資訊給 Nagios。遠端主機 --> Nagios
通知:當監控對象發生狀態時(例如 ping 不到已超過十分鐘了)我們當然需要通知(Notify)管理者,不過 Nagios 可不是隨便就執行通知了,而是一步一步的,整個通知的流程如下
* 在nagios.cfg內 enable=notifications=1 才會進行通知的動作
* 監控對象的狀態是否處於 downtime(關機處理)
* 監控對象的狀態是否處於 flapping(一下 UP 一下 Down) 需配合 flap_detection_enabled
* 監控對象的狀態是否符合 notification_options 選項 (w,u,c,r)
* 監控對象的通知時間是否符合 notification_period 設定
* 監控對象的通知是否符合間隔時間 notification_interval 設定
* 聯絡人是否符合被通知的條件
* 執行通知的動作(視您所設定通知方式而定)
【作業環境】
FreeBSD 6.2-RELEASE-p5
nagios-2.9
nagios-plugins-1.4.6,1
【安裝及設定】
Step1.安裝 nagios 套件
安裝時系統會順便新增 nagios 這個 system user account 及 group
#cd /usr/ports/net-mgmt/nagios //切換至安裝路徑
#make install clean //安裝並清除安裝過程中不必要的檔案
幾個重要的路徑如下
/usr/local/libexec/nagios/check_apt //plugins 檔案
/usr/local/etc/nagios //cfg 設定檔
/usr/local/www/nagios //預設監控回報網頁
Step2.設定 nagios 設定檔
預設的狀態下 localhost.cfg 設定檔內容就包含全部設定資訊了,不過若是你要監控的對象有一堆的時候建議還是把每個項目都獨立成一個設定檔,這樣對於你維護上是比較好的作法,以下就是我將各監控項目都獨立成一個設定檔的功能說明(都在 /usr/local/etc/nagios 下有範例檔檔可複製)。
cgi.cfg //指定網頁路徑、身份認證...等
nagios.cfg //主要核心設定檔(指定 Log、要載入的設定檔...等)
localhost.cfg //預設監控本機的設定檔(含所有功能)
contacts.cfg //定義聯絡人資訊
contactgroups.cfg //定義聯絡人郡組
hosts.cfg //定義監控主機資訊
hostgroups.cfg //定義監控主機郡組
commands.cfg //執行哪些指令及參數 (就是執行 plugins)
resource.cfg //使用者自行定義的巨集 CGI 設定檔
services.cfg //定義監控服務設定檔
timeperiods.cfg //定義監控期間設定檔
可參考[官網說明文件]中關於設定檔的說明
[CGI Configuration File Options]
[Authentication And Authorization In The CGIs]
[Main Configuration File Options]
[Object Definitions]
[Nagios Plugins]
[Nagios plug-in development guidelines]
[Starting Nagios]
cgi.cfg 設定檔內容:
我只修改網頁路徑及開啟帳號認證其它都預設值,至於你指令可以執行或查看的帳號是要如何認證呢?這些帳號及密碼就是到時要設定在 Apache .htpasswd 內的帳號及密碼,為何 Bagios 是認 Apache 帳號?因為 Nagios 的 cgi 是由 Apache 來執行的。
main_config_file=/usr/local/etc/nagios/nagios.cfg //定義主要核心設定檔
physical_html_path=/usr/local/www/nagios //定義網頁路徑(預設值)
physical_html_path=/home/web/nagios //修改後
use_authentication=1 //開啟身份認證(預設值)
authorized_for_system_information=weithenn //可查看系統資訊的帳號(extinfo.cgi)
authorized_for_configuration_information=weithenn //可查看設定檔資訊的帳號(view hosts, commands, etc)
authorized_for_system_commands=weithenn //可執行系統指令的帳號(cmd.cgi)
authorized_for_all_services=weithenn //可查看所有服務的帳號
authorized_for_all_hosts=weithenn //可查看所有主機的帳號
authorized_for_all_service_commands=weithenn //可執行服務指令的帳號(cmd.cgi)
authorized_for_all_host_commands=weithenn //可執行主機指令的帳號
使用 Apache Basic Login 登入及登入後 Nagios 顯示認證帳號圖示
http://www.weithenn.idv.tw/oddmuse/imag ... agios2.jpg
http://www.weithenn.idv.tw/oddmuse/imag ... agios3.jpg
其它設定檔內容很難一一說明,其實只要參考 localhost.cfg 內容來修改即可,因為 localhost.cfg 內預設就把 TIME PERIODS、CONTACTS、CONTACT GROUPS、HOSTS、HOST GROUPS、SERVICES 這些內容包含在內了,所以只要複製後出來按您的需求修改即可。不過修改設定檔時注意如下幾點:
* Nagios Service 會先讀 nagios.cfg 然後在去讀裡面指定的設定檔
* 單行註解可以用 # 及 ; 來開頭 (但要注意的是註解符號之間不可有空格,否則執行 nagios 會出現錯誤)
* 修改完設定檔後,要執行檢查/測試設定檔語法是否正確(可使用 reload or restart)就會執行 -v 也就是會 check config
若是覺得用文字模式來設定 Nagios 設定檔很難懂可以使用熱心人士寫出來的編輯 nagios 設定檔的 GUI 工具。
[Nagat - Nagios Admin Toolkit]
[Nagios Control PaneL (NCPL)]
Step3.修改 rc.conf
修改完設定檔後,我們必須修改 /etc/rc.conf 以便系統重開機時能自動啟動 nagios service。
#vi /etc/rc.conf
nagios_enable="YES"
啟動 Nagios service (若屆時有修改設定檔記得執行 reload)
#/usr/local/etc/rc.d/nagios start //啟動 nagios service
Performing sanity check of nagios configuration: OK
Starting nagios.
檢查 Nagios 是否啟動成功
#ps ax |grep nagios
31217 ?? Ss 0:00.02 /usr/local/bin/nagios -d /usr/local/etc/nagios/nagios.cfg
查看 Nagios Log
#tail /var/spool/nagios/nagios.log
[1178169537] Nagios 2.9 starting... (PID=31216)
[1178169537] LOG VERSION: 2.0
[1178169537] Finished daemonizing... (New PID=31217)
【參考】
[Groundwork Fruity : A Nagios Configuration Tool]
[酷!學園 :: 觀看文章 - 使用nagios 配合 twsms 監測系統]
[SourceForge.net: Nagios Popups]
[Nagios: Home]
[Nagios Version 2.x Documentation]
[The Nagios Book]
[Determining Status and Reachability of Network Hosts - 決定網路主機的狀態及是否可到達]
[Network Outages - 網路中斷時的影響]
[Notifications - 狀態通知方式、邏輯]
[Plugin Theory]
[Indirect Host and Service Checks - 間接檢查主機及服務]
[Passive Host and Service Checks - 被動監控主機及服務]
[Volatile Services - 一次性檢查]
[Service and Host Result Freshness Checks - 服務及主機新鮮度檢查]
[Distributed Monitoring - 分散式監控]
[Redundant and Failover Network Monitoring - 建立容錯功能的監控架構]
[Service Check Scheduling - 排程服務檢查]
[State Types - 監控狀態的類型(Soft、Hard)]
[Time Periods - 時間帶(定義通知時間週期)]
[Event Handlers - 監控對象發生問題時的回應方式 (例如:重新啟動該服務)]
[External Commands - 外部命令 (透過 web 傳送 CGI Commands 給 Nagios)]
[Detection and Handling of State Flapping - 當監控對象不穩定時的處理狀況] [Notification Escalations - 逐漸頻繁的狀態通知]
[Monitoring Service and Host Clusters - 監控叢集主機及服務]
[Host and Service Dependencies - 了解主機及服務的依賴關系] [State Stalking - 偵測 RAID 狀態?]
[Performance Data - 偵測 Process Performance Data]
[Scheduled Downtime - 排程停機時間]
[Object Inheritance - 繼承的觀念]
[Securing Nagios - 增強 Nagios 的安全性]
[Using The Nagiostats Utility - 善用 nagiostats 指令]
[Using Macros In Commands - 善用巨集指令]
[Information On The CGIs - Nagios 管理頁面 CGIs 說明]
[Tommy 碎碎念 : 使用 PHP 發送 MSN 訊息]
[Tommy 碎碎念 : 在 shell script 中發送 MSN 訊息]
【Me FAQ】
Q1.登入 Nagios 管理介面後隨便點選 item 出現錯誤訊息?
Error Meaage:
啟動 Nagios 服務後,登入 Nagios 管理介面當我隨便點選一個 item 都會出現如下圖錯誤訊息
http://www.weithenn.idv.tw/oddmuse/imag ... agios1.jpg
Ans:
* 確定您有設定主要環境設定檔了?
o 有可能你還沒設定主要環境 cgi 設定檔(記得把範例檔複製來修改即可)
* 確定您的 web service 能順利處理 .cgi(nagios cgi 不是 perl .cgi 是 binary file)?
o 若是使用 lighttpd 而無法順利使用可以參考我的筆記LigHttpd-輕量級 Web Server裡面有說明 nagios 配合 lighttpd 的一些 FAQ
* 確定 web service 有執行 cgi 的權限(通常是把 apache user 加入nagios group內)?
o 由於 nagios 是以 daemon 執行 plugin 之後得到監控的結果,所以若我們想透過 nagios 監控畫面來看監控結果時,代表 apache 要有能執行 cgi 的權限
Q2.無法使用管理介面的外部指令功能?
Error Meaage:
登入 Nagios 管理介面後,想使用送出外部指令的功能時出現如下圖錯誤訊息
http://www.weithenn.idv.tw/oddmuse/imag ... agios4.jpg
Ans:
圖示訊息很明顯告訴你,Nagios 目前沒有接收外部指令的功能因此送出的外部指令無法執行;因為 Nagios 預設是不開啟接收外部指令的,請修改 nagios.cfg 來開啟接收外部指令功能
#check_external_commands=0 //預設值
check_external_commands=1 //修改後
Q3.送出外部指令後出現錯誤訊息?
Error Meaage:
已確定 nagios.cfg 內有開啟接收外部指令的功能了,但使用管理介面送出外部指令後還是收到錯誤訊息
http://www.weithenn.idv.tw/oddmuse/imag ... agios5.jpg
Ans:
系統說找不到 nagios.cmd 執行檔;因為我修改 nagios.cfg 後忘了 restart nagios service 造成 nagios.cmd 執行檔沒有產生,所以也無法執行外部指令。
#/usr/local/etc/rc.d/nagios restart //重新啟動 nagios service
Performing sanity check of nagios configuration: OK
Stopping nagios.
Performing sanity check of nagios configuration: OK
Starting nagios.
#cd /var/spool/nagios/rw ; ls
nagios.cmd //重新啟動才會生出此檔
執行外部指令成功後可在 /var/spool/nagios/nagios.log 內看到訊息,第一項為送出的外部指令 (DISABLE_HOST_CHECK),第二項為執行外部指令的內容,第三項為外部指令是否執行成功。
* [1178609419] EXTERNAL COMMAND: DISABLE_HOST_CHECK;See
* [1178615357] Warning: Attempting to execute the command "/usr/bin/printf "%b" "***** Nagios 2.9 *****\n\nNotification Type:PROBLEM\nHost: See\nState: DOWN\nAddress: 172.18.1.34\nInfo: CRITICAL - Plugin timed out after 10 seconds\n\nDate/Time: Tue May 8 17:09:17 CST 2007\n" | /bin/mail -s "Host DOWN alert for See!"
weithenn@weithenn.idv.tw" resulted in a return code of 127. Make sure the script or binary you are trying to execute actually exists...
* [1178616557] Auto-save of retention data completed successfully.
執行外部指令成功的圖示如下
http://www.weithenn.idv.tw/oddmuse/imag ... agios6.jpg
Q4.使用通知方式是 Mail 但未何都收不到 contact 通知?
Error Meaage:
使用通知方式是 Mail 但未何都收不到 contact 通知?
Ans:
查看了一下 command.cfg 通知 mail 的指令路徑是 /bin/mail 但本機的 mail 執行路徑是 /usr/bin/mail,更改 command.cfg 內容後在 reload nagios 即可順利收到 contact 通知了。
#whereis mail
mail: /usr/bin/mail /usr/share/man/man1/mail.1.gz /usr/src/usr.bin/mail
【Log】
初稿-2007/07/11