站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

Nagios-網路監控及告警系統

前言

[Nagios] 為功能非常強大的網路監控軟體,不僅可以監控主機 (本地端或遠端) 及服務更加入許多非常人性化的觀念進去,且還可自行依需求來撰寫當監控主機或服務發生問題時的反應動作,總之是個非常強大的監控軟體,建議可以購買 [網路與伺服器監視軟體-Nagios入門與應用] 這本書來看裡面對於 [Nagios] 有非常詳細的介紹。

[Nagios] 官網監控成果:

名詞及觀念: 在開始玩 Nagios 以前有些名詞跟觀念若是先了解的話對於玩 Nagios 會更有幫助的

主機及服務狀態: Nagios 執行監控動作後會回報監控對象測試結果,所以對於監控對象的狀態我們也必須了解一下顯示的訊息所代表的意義

軟/硬 狀態: 以下將說明何謂軟狀態?何謂硬狀態?

監控方式: Nagios 預設的監控方式是由 Nagios 主機去向監控對象發出要求然後被監控對象回應結果,但其實換個角度想這樣的方式是不是可以反過來,這樣的話 Nagios 的 Loading 就不會那麼大了 (如果你監控的機器有一狗票的話)

通知: 當監控對象發生狀態時 (例如 Ping 不到監控對象超過 10 分鐘) 需要通知 (Notify) 管理者,不過 Nagios 可不是隨便就執行通知了而是一步一步的,整個通知的流程如下

  1. 在 nagios.cfg 內 enable=notifications=1 才會進行通知的動作
  2. 監控對象的狀態是否處於 downtime (關機處理)
  3. 監控對象的狀態是否處於 flapping (一下 UP 一下 Down) 需配合 flap_detection_enabled
  4. 監控對象的狀態是否符合 notification_options 選項 (w,u,c,r)
  5. 監控對象的通知時間是否符合 notification_period 設定
  6. 監控對象的通知是否符合間隔時間 notification_interval 設定
  7. 聯絡人是否符合被通知的條件
  8. 執行通知的動作(視您所設定通知方式而定)

實作環境

安裝及設定

步驟1.安裝 nagios 套件

切換至 Ports Tree 路徑下開始安裝 Nagios 套件,安裝過程中系統會自動建立 nagiso 系統使用者帳號及群組 (屆時用來啟動 Big Sister 服務用)

 #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                                 //預設監控回報網頁

步驟2.修改 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                                       //定義監控期間設定檔

有關詳細設定檔內容可參考 [Nagios 官網說明文件]

cgi.cfg 設定檔內容:

此次實作僅修改網頁路徑及開啟帳號認證其它設定都採預設值,至於指令可以執行或查看的帳號是要如何認證呢? 這些帳號及密碼就是到時要設定在 Apache .htpasswd 內的帳號及密碼,為何 Nagios 採用 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 後顯示認證帳號圖示

Apache Basic Login 登入後 Nagios 顯示認證帳號

其它設定檔內容很難一一說明,其實只要參考 localhost.cfg 內容依個人網路環境進行修改即可,因為 localhost.cfg 內預設將 TIME PERIODS、CONTACTS、CONTACT GROUPS、HOSTS、HOST GROUPS、SERVICES 這些內容包含在內了,所以只要複製後出來按您的需求修改即可。不過修改設定檔時注意如下幾點:

若是覺得用文字模式來設定 Nagios 設定檔很難懂可以使用熱心人士寫出來的編輯 Nagios 設定檔的 GUI 工具。

步驟3.修改 rc.conf

修改完設定檔後請修改 /etc/rc.conf 以便系統重新開機時能自動啟動 Nagios 服務

 #vi /etc/rc.conf
 nagios_enable="YES"

啟動 Nagios 服務 (日後若有再修改設定檔記得執行 reload)

 #/usr/local/etc/rc.d/nagios start                        //啟動 Nagios 服務
 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 都會出現如下圖錯誤訊息

點選 Item 錯誤訊息

Ans:

請依如下步驟檢查

  1. 確定您有設定主要環境設定檔
    1. 有可能你還沒設定主要環境 cgi 設定檔 (記得把範例檔複製來修改即可)
  2. 確定您的 Web Service 能順利處理 .cgi (nagios cgi 不是 perl .cgi 是 binary file)
    1. 若是使用 Web Service 為 Lighttpd 而無法順利使用可以參考站內文章 LigHttpd-輕量級 Web Server 裡面有說明 Lighttpd 配合 Nagios 的一些 FAQ
  3. 確定 Web Service 有執行 CGI 的權限 (通常是把 Apache User 加入 Nagios Group 內)
    1. 由於 Nagios 是以 Daemon 方式執行 Plugin 之後得到監控的結果,所以若我們想透過 Nagios 監控畫面來看監控結果時,代表 Apache 要有執行 CGI 的權限

Q2.無法使用管理介面的外部指令功能?

Error Meaage:

登入 Nagios 管理介面後,想使用送出外部指令的功能時出現如下圖錯誤訊息

執行外部指令錯誤訊息

Ans:

圖示訊息很明顯告訴您 Nagios 目前沒有接收外部指令的功能因此送出的外部指令無法執行, 因為 Nagios 預設是不開啟接收外部指令的請修改 nagios.cfg 來開啟接收外部指令功能

 #check_external_commands=0            //預設值
 check_external_commands=1             //修改後

Q3.送出外部指令後出現錯誤訊息?

Error Meaage:

已確定 nagios.cfg 內有開啟接收外部指令的功能了,但使用管理介面送出外部指令後還是收到錯誤訊息

執行外部指令錯誤訊息

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.org"
 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.

執行外部指令成功的圖示如下

執行外部指令成功

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
Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com