架設網路監控程式Nagios,就能夠利用監控網路服務的方式來掌握相關運作情況,一旦發現異常便立即通知管理者進行處理。若想進一步監控遠端被監控主機的系統資源,則必須透過本文將實作示範的NRPE(Nagios Remote Plugin Executor)機制。
為了能夠掌控網路服務(例如網站伺服器)的運作狀態,管理人員通常會架設網路服務監控系統(如本文所介紹的軟體),利用監控網路服務的方式來掌握相關運作情況,一旦發現異常即通知管理者進行處理。
但此類方式並不能完全地滿足管理的需求,當管理人員想要監控網路服務主機上的系統資源使用狀態,例如磁碟空間的剩餘容量是否還在安全的範圍或CPU運作是否異常,即力有未逮。所幸Nagios提供了NRPE(Nagios Remote Plugin Executor)機制,讓使用者使用此機制就能夠取得遠端被監控主機的系統資源,進而監控主機的系統資源使用情況。
本文實作使用的作業系統為CentOS 8 Stream,採用的軟體如表1所示。
Nagios介紹
Nagios是一個功能強大的網路服務監控軟體,主要是用來監控網路服務及主機的運作情況。
Nagios相關角色
在開始安裝相關機制之前,先簡單說明機制中的相關角色:
‧主機(Host):即Nagios主要監控的角色,包括一般PC、伺服器及網路設備(路由器、列表機)等,都可視為主機的角色。
‧網路服務(Service):附屬於主機的角色,例如一個主機可運作多個網路服務,例如可同時運作網站伺服器、FTP伺服器等多個網路服務。
‧程式指令(Command):設定用來監控主機或網路服務狀態,例如check_http(監控HTTP服務)或通知連絡人(如在發現異常時即寄發Email)的程式指令。
‧聯絡人(Contact):所監控的主機或網路服務發生異常時要通知的聯絡人,可利用電子郵件、簡訊通知等方式。
‧群組(Group):可利用群組的概念來簡化相關設定,例如設定連絡人群組、主機群組等。
‧第三方程式(Plugin):Nagios主程式本身僅提供框架功能來管理相關的監控程式並取得相關監控結果,所以必須利用第三方程式進行監控檢測,因此其提供第三方程式架構規範,讓第三方程式開發者可自行開發監控程式,藉以增強Nagios的監控能力。
監控結果狀態
簡單說明Nagios相關的角色後,接著介紹監控結果狀態(Status),可分為「主機狀態」和「網路服務狀態」。
‧主機狀態:若OK表示被監控主機運作正常,無任何異狀;Unreachable表示無法連線至被監控主機,常見的原因有網路斷線或被監控主機關閉ICMP的回應;UP表示被監控主機重新啟動的狀態,通常會發生在被監控主機從關閉(Down)再重新啟動;Down代表被監控主機已停止運作的狀態(有時剛加入被監控主機時也會暫時呈現此狀態)。
‧網路服務狀態:OK表示被監控網路服務運作正常,無任何異狀;Warning表示被監控網路服務運作發生輕微的錯誤,但暫時尚不致於影響網路服務的運作;Critical表示被監控網路服務運作發生嚴重的錯誤,通常此時網路服務應該已停止服務;Unknown表示被監控網路服務運作狀態不明。
除了上述針對主機或網路服務檢測的狀態外,另外Nagios也針對監控結果分為「軟狀態(Soft State)」與「硬狀態(Hard State)」。
軟狀態表示尚在容忍範圍次數以內,以監控主機為例,有時可能是因為網路的關係,而導致被監控主機無法在時限內回覆訊息而被誤判為已停止服務(Down),為避免此類的困擾,會設定一個適當的容忍範圍,例如超過5次未回覆才會判定主機已停止服務。此時若未回覆次數在5次以內,即稱為軟狀態。累計超過5次後,才會進入硬狀態。這時候,才是真的確認被監控主機的狀況並執行相關的程式指令。
安裝Nagios
了解Nagios相關資訊後,進行安裝作業,以如下指令安裝Nagios主程式(其中#為註解符號):
adduser Nagios #新增執行Nagios 所需要的一般使用者帳號
接著,到Nagios官方網站下載最新版本的Nagios程式(在此使用4.5.4版本)。解壓縮後,以如下指令安裝:
configure --prefix=/usr/local/ nagios #組態並設定安裝於/usr/ local/Nagios目錄 make all #進行編譯 make install #在編譯成功後進行安裝
安裝完成後,就會提供一個名稱為「nagios」的主程式,至此就完成安裝Nagios主程式。
安裝監控程式nagios-plugins
接著,安裝監控程式nagios-plugins,在此安裝的版本為2.4.11。
先下載並解壓縮原始碼,再執行以下的指令進行編譯及安裝:
./configure --prefix=/usr/local/ nagios make all #編譯所有的第三方程式 make install
安裝完成後,即可檢查在「/usr/local/nagios/plugins/libexec/」目錄下是否有相關的檢查監控程式。
Nagios相關組態檔說明
安裝完成後,說明Nagios主程式相關的組態檔,如圖1所示。
nagios.cfg組態檔
nagios.cfg為主要組態設定檔,其常用的組態設定說明如下:
1. 設定儲存被監控的主機或網路服務等資訊的檔案位置:
cfg_file=/usr/local/nagios/etc/ localhost.cfg
2. 設定儲存監控程式相關資訊(如參數)的檔案位置:
cfg_file=/usr/local/nagios/etc/ commands.cfg
3. 設定儲存聯絡人相關資訊(如電子郵件、簡訊資訊等等)的檔案位置:
cfg_file=/usr/local/nagios/etc/ contacts.cfg
4. 設定定義有效監控時間等相關資訊的檔案位置:
cfg_file=/usr/local/nagios/etc/ timeperiods.cfg
5. 設定定義樣版設定等相關資訊的檔案位置:
cfg_file=/usr/local/nagios/etc/ templates.cfg
6. 設定儲存Nagios監控結果的檔案位置,在本方案中所使用的Web程式就是透過解析這個檔案來取得相關的結果並顯示在網頁上:
status_file=/usr/local/nagios/log/ status.dat
7. 設定Nagios監控結果狀態更新的時間區隔(以秒為單位),以下例子為每10秒就重新更新:
status_update_interval=10
8. 設定Nagios執行時所使用的使用者身分:
nagios_user=nagios nagios_group=nagios
templates.cfg組態檔
為簡化組態檔的設定,Nagios提供樣版(Template)形式的設定,讓使用能夠更方便地設定欲監控的主機或網路服務的相關組態:
主機樣版的設定內容,如下所示:
define host{ #定義此為設定主機監控 的樣版 name linux-server #樣版的名稱 use generic-host #繼承樣版名稱 為generic-host的設定 check_period 24x7 #設定監 控的時間區間,其中24x7為定義在 timeperiods.cfg中的樣版(為24小 時,全天候監控) check_interval 5 #設定重新檢查 的時間間隔時間(單位為分鐘), 此例表示每5分鐘即重新檢查一次 #設定監控主機所使用的檢查程式名稱, Nagios會使用此程式進行檢查 check_command check-host-alive notification_options d,u,r #設定須 通知管理者的主機狀態,d表示主機為關機 狀態、u表示無法連線到主機時、r表示主 機重新啟動成功、f表示主機啟動或停止、 n是不管任何狀態都不會通知管理者 contact_groups admins #設定要通知的管理者相關資訊 }
網路服務樣版設定的內容,如下所示:
define service{ #定義網路服務的樣版 name generic-service #此樣版的名稱 #設定是否啓用被監控主機作業系統 (OS)檢測功能 obsess_over_service 1 #設定是否在網路服務發生異常時通 知管理者 notifications_enabled 1 #設定管理者的資訊 contact_groups admins #設定欲監控的時段 check_period 24x7 #設定可容忍的次數,超過次數後才會 判定網路服務已異常 max_check_attempts 2 #設定監控檢查的時間間隔(單位為分) normal_check_interval 10 #設定重新檢查的時間區隔(單位為分) retry_check_interval 2 notification_options w,u,c #設定要 發通知告知管理者的事件等級,w為警告 (Warning)等級、u是未知(Unknown) 等級、c為嚴重(Critical)等級 }
localhost.cfg組態檔
localhost.cfg用來設定欲監控的主機及網路服務等資訊,相關說明如下:
以下內容可設定欲監控的主機:
define host{ #表示設定主機 use linux-server #採用名稱為 linux-sever的樣版設定 host name xxx-xxx-xxx #設定主機名稱 alias machine #設定別名 address [ip] #設定此主機的IP }
以下為設定欲監控的網路服務:
define service{ #表示設定網路服務 use local-service #採用名稱 local-service的樣版設定 #設定相依的主機名稱,必須與host的 名稱(Name)設定一致,表示此網 路服務運作與該主機之上 host_name xxx-xxx-xxx #描述網路服務的說明文字 service_description 描述文字 #設定監控所使用的程式名稱 check_command check_http #設定當發現網路服務異常時,須通知 管理者 notifications_enabled 1 #設定監控的時段 check_period 24*7 }
commands.cfg組態檔
commands.cfg用於設定監控程式命令的相關參數:
define command{ #表示設定監控程式命令 command_name check_http #監控程式的名稱 #設定程式指令所使用的參數等資訊 command_line $USER1$/check_ http -I $HOSTADDRESS$ $ARG1$ }
contacts.cfg組態檔
contacts.cfg可設定當發現異常時所要通知的相關聯絡人資訊:
define contact{ contact_name nagiosadmin #設定聯絡人名稱 use generic-contact ; email xxx@xxx.xxx.xxx #定義聯絡人的Email }
timeperiods.cfg組態檔
timeperiods.cfg用來設定監控時段的樣版資訊:
define timeperiod{ timeperiod_name 24x7 #樣版的名稱 alias 24 Hours A Day,7 Days A Week #樣版別名 #定義星期一至星期日的監控有效時間 sunday 00:00-24:00 monday 00:00-24:00 tuesday 00:00-24:00 wednesday 00:00-24:00 thursday 00:00-24:00 friday 00:00-24:00 saturday 00:00-24:00 }
簡單說明過Nagios的架構後,接下來介紹何謂NRPE。
認識NRPE架構
為了能夠有效地取得被監控主機上的系統資源運作情況,Nagios提供了NRPE機制,利用在被監控主機上運作NRPE程式來取得主機上的系統資源資訊,而後Nagios伺服器再利用check_nrpe(Plugin程式)詢問NRPE,然後取得相關監控結果資料,相關的架構如圖2所示。
在本文中,將利用check_disk(監控主機上的磁碟使用狀況)與check_load(監控主機上的負載情況)實作一個監控遠端主機上的磁碟及負載狀態的系統。首先,說明check_disk與check_load。
check_disk
check_disk是用來監控主機上磁碟容量使用情況,在磁碟容量使用已超過所設定的門檻值時就會發出警示,其常用的參數如下所述:
可使用百分比或數字,如「-w 30%」表示磁碟容量使用超過30%即發出警示,或「-w 300MB」代表磁碟容量使用超過300MB即發出警告:
-w <警告(warn)門檻值>
就如同-w參數一樣,一旦磁碟容量使用超過所設定的門檻值時,就會發出嚴重的警告:
-c <嚴重(critical)警告門檻值>
設定所要監控的磁碟目錄的磁碟使用狀況,是否超出原先所設定的門檻值,如圖3所示:
-p <磁碟目錄>
check_load
check_load是用來監控系統平均負載(1分鐘、5分鐘、15分鐘)的狀況。常用的參數如下所述:
設定警告狀態的門檻值,須設定(1分鐘、5分鐘、15分鐘)的平均系統負載,一旦負戴超過相關的門檻值即會發出警告:
-w <警告(warn)門檻值>
就如同-w參數,一旦系統負載超過所設定的門檻值時就會發出嚴重警告,如圖4所示:
-c <嚴重(critical)警告門檻值>
安裝NRPE
接下來,在監控主機上安裝NRPE(使用4.0.2版本)。先下載原始碼,再利用以下的指令進行安裝:
./configure --prefix=/usr/local/ nagios --enable-ssl make all make install-plugin make install-daemon make install-config
完裝完成後,便會產生名稱為「nrpe」的主程式及主組態檔(nrpe.cfg)。
接著,說明nrpe.cfg常用的組態,基本上延續原先的預設,僅須設定可允許的連線來源(allowed_hosts)即可,如下為常用的組態說明:
server_port=5666 #設定NRPE運作時 所使用的通訊埠,須注意防火牆等資安 設備,不要限制此通訊埠的使用 nrpe_user=nagios #NRPE執行時所使 用的使用者名稱 nrpe_group=nagios allowed_hosts =127.0.0.1,::1 #允 許連線NRPE的來源IP,在此僅允許本機 可連線
在完成相關設定後,即可以如下指令啟動NRPE:
nrpe -d -c /usr/local/nagios/etc/ nrpe.cfg
在啟動完成後,就能夠利用下列指令來確認NRPE是否啟動成功:
check_nrpe -H localhost #會回覆版 本資訊(如NRPE v4.1.1)
由於被監控主機上必須使用check_disk、check_load等監控程式來取得資訊,因此在被監控主機上也同樣需要安裝nagios-plugin(在此不多加贅述)。
實作NRPE
為了簡化說明起見,這裡會將Nagios伺服器和被監控主機均設定於同一台主機上,並利用相關的Plugin程式(check_disk和check_load)來監控磁碟使用狀態與系統的運作狀態,最後再提供一個前端介面(nagios.php)讓使用者透過此程式來取得相關資訊,相關實作架構請參考圖2。
首先,設定Nagios主伺服器上的組態,確認commands.cfg中已設定check_nrpe相關組態,如圖5所示。
接著,確認localhost.cfg內已設定欲監控的主機與服務相關組態,如圖6所示。
最後,確認NRPE組態檔已經被適當地設定:
server_port=5666 nrpe_user=nagios nrpe_group=nagios allowed_hosts =127.0.0.1,::1
在設定完成後,即可依序地啟動Nagios伺服器及被監控主機上的NRPE程式,執行以下指令:
nagios -d /usr/local/nagios/etc/ nagios.cfg nrpe -d -c /usr/local/nagios/etc/ nrpe.cfg
在相關程式均啟動成功後,可利用Nagios所提供的前端程式(nagios.php,需PHP執行環境)來取得相關的監控資訊,在使用nagios.php之前,須先確認該程式讀取到正確的Nagios結果檔:
$file = fopen("/usr/local/nagios/ var/status.dat", "r")
一切就緒後,最後就能夠透過瀏覽器來取得NRPE所回傳的資訊,如圖7所示,即可利用NRPE機制來監控系統資源的使用情況。
<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>