Nagios:企业级系统监控方案
在大多數情況下Cacti + RRDtool已經實現對系統各種參數的監測。但很多企業可能不滿足于僅僅監測系統基本參數的需求,而是需要監測除基本參數之外的各種應用程序的運行狀況。很顯然在這種情況下對于一些系統或者是自定義的程序Cacti + RRDtool的局限性就顯示出來了。而此時就輪到了另外一種監測系統的登場。這就是我們現在要介紹的Nagios。
Nagios是一個功能非常強大的開源的系統網絡監測程序,通過訪問http://www.nagios.org可以了解其基本特性。Nagios不但能夠實現對系統CPU,磁盤、網絡等方面參數的基本系統監測,而且還能夠監測包括SMTP,POP3,HTTP,NNTP等各種基本的服務類型。另外通過一些插件的安裝和監測腳本自定義用戶可以針對自己的應用程序實現監測,并針對大量的監測主機和多個對象部署層次化的監測架構。而且在監測信息統計方面,Nagios也能夠和例如Cacti等程序結合來提供動態統計圖表。除此之外Nagios擁有強大的日志管理系統,可以實現詳細的日志記錄以及回卷。針對架構的擴展和服務器數量的增加可以方便地實現監測區域擴展。最難能可貴的是Nagios提供了優秀的事件報警功能,能夠將一些突發的事件以電子郵件的形式通知管理員并能夠針對出現的問題提供一些主動的解決建議和方案,并支持冗余監視。
相對于Mrtg以及RRDtool + Cacti而言Nagios最大的特點之一是其設計者將Nagios設計成監測的管理中心盡管其功能是監測服務和主機,但是他自身并不包括這部分功能的代碼,所有的監測、監測功能都是由相關插件來完成的,包括報警功能。Nagios自身也沒有報警部分的代碼和插件,而是交給用戶或者其他相關開源項目組去完成。對于Nagios這個監測中心來說,細致的工作必然是交給其他的軟件來實現。
下面我們就開始實施Nagios的基本安裝和配置。
我的操作環境是:
監測主機:IP:192.168.1.10 操作系統:RHEL 5u8
被監測主機:IP:192.168.1.220 操作系統:RHEL 5u8
Nagios的所有軟件包可以從其官方網站獲得http://www.nagios.org/download/。這里無論是基本軟件包還是插件我都使用的最新版本。因為我使用的操作系統是Red Hat最新版本,原則上對于較新的操作系統版本通常我們都選擇配合最新版本的第三方軟件以避免兼容性問題。
首先在監測主機也就是192.168.1.10上安裝Nagios的基本軟件包,在安裝Nagios之前首先需要保證系統中有下面這些軟件包:Apache,gcc,gd,gd-devel,glibc,glibc-devel。可以用rpm –qa | grep的方式去逐一檢查。
如果確認上面這些包都安裝之后需要先建立Nagios的用戶和nagcmd組:
# useradd -m nagios [ Enter ] # passwd nagios [ Enter ] 并將nagios以及apache用戶加入到nagcmd組中 # groupadd nagcmd [ Enter ] # usermod -G nagcmd nagios [ Enter ] # usermod -G nagcmd apache [ Enter ]完成之后將下載的nagios壓縮包拷貝到/usr/local目錄中,并且執行下面的步驟進行編譯和安裝:
# tar -zxf nagios-3.0.3.tar.gz [ Enter ] # cd nagios-3.0.3 [ Enter ]首先初始化和建立編譯的環境
# ./configure --with-command-group=nagcmd [ Enter ]如果能看到下面的基本配置信息則說明初始的環境已經成功配置完成:
*** Configuration summary for nagios 3.0.3 06-25-2008 ***:General Options:-------------------------Nagios executable: nagiosNagios user/group: nagios,nagiosCommand user/group: nagios,nagcmdEmbedded Perl: noEvent Broker: yesInstall ${prefix}: /usr/local/nagiosLock file: ${prefix}/var/nagios.lockCheck result directory: ${prefix}/var/spool/checkresultsInit directory: /etc/rc.d/init.dApache conf.d directory: /etc/httpd/conf.dMail program: /bin/mailHost OS: linux-gnuWeb Interface Options:------------------------HTML URL: http://localhost/nagios/CGI URL: http://localhost/nagios/cgi-bin/Traceroute (used by WAP): /bin/tracerouteReview the options above for accuracy. If they look okay, type 'make all' to compile the main program and CGIs.之后按照提示執行命令來進行編譯:
# make all [ Enter ]如果編譯過程順利完成,則需要執行下面的命令:
# make install [ Enter ] # make install-init [ Enter ] # make install-config [ Enter ] # make install-commandmode [ Enter ]分別用于安裝二進制文件、初始化腳本、示例配置文件和設置目錄權限。
# ls /usr/local/nagios [ Enter ]安裝完成之后,在/usr/local/nagios目錄下如果能夠看到這些目錄:bin etc sbin share var就表示Naigos安裝成功了。
不過在完成之后還不能啟動Nagios,因為還有一些操作需要執行。
Nagios的樣例配置文件默認安裝在/usr/local/nagios/etc目錄下,這些樣例文件可以配置Nagios使之正常運行,只需要做一個簡單的修改。用你擅長的編輯器軟件來編輯這個/usr/local/nagios/etc/objects/contacts.cfg配置文件,更改email部分,在nagiosadmin的聯系人定義信息中的EMail信息為你的EMail信息以接收報警內容。
# vi /usr/local/nagios/etc/objects/contacts.cfg [ Enter ]之后執行下面的命令來安裝Nagios的WEB配置文件到Apache的conf.d目錄下:
# make install-webconf [ Enter ]在Apache中使用基本認證的方式創建一個nagiosadmin的用戶用于Nagios的WEB界面登錄。記下你所設置的登錄口令。該用戶登錄口令和賬號信息會存儲到/usr/local/nagios/etc/passwd.users文件中:
# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin [ Enter ]在Nagios主程序安裝之后會自動將相關apache配置文件放到/etc/http/conf.d目錄下,文件名是nagios.conf。文件內容如下:
# cat /etc/httpd/conf.d/nagios.conf [ Enter ] ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"<Directory "/usr/local/nagios/sbin">Options ExecCGIAllowOverride NoneOrder allow,denyAllow from allAuthName "Nagios Access"AuthType BasicAuthUserFile /usr/local/nagios/etc/htpasswd.usersRequire valid-user </Directory>Alias /nagios "/usr/local/nagios/share"<Directory "/usr/local/nagios/share">Options NoneAllowOverride NoneOrder allow,denyAllow from allAuthName "Nagios Access"AuthType BasicAuthUserFile /usr/local/nagios/etc/htpasswd.usersRequire valid-user這就意味著只有通過認證用戶才可以通過http訪問/usr/loca/nagios/share以及/usr/local/nagios/sbin目錄下內容。而這個能夠通過認證的用戶也就是nagiosadmin,之后可以重啟apache來應用配置:
# service httpd restart [ Enter ] # chkconfig --level 345 httpd on [ Enter ]剛才已經提到Nagios主程序只是一個控制中心,而能夠起到服務監測和系統監測等功能的是眾多Nagios的插件,沒有插件的Nagios系統其實只是一個空殼。因此在安裝了Nagios平臺之后我們還需要安裝插件。
Nagios插件同樣是在其官方網站下載,目前版本是1.4.12。我將下載的源碼包放到/usr/local目錄下,按照下面的步驟進行解壓,編譯和安裝:
# tar -zxf nagios-plugins-1.4.12.tar.gz [ Enter ] # cd nagios-plugins-1.4.12 [ Enter ] # ./configure --with-nagios-user=nagios --with-nagios-group=nagios [ Enter ] # make [ Enter ] # make install [ Enter ]然后把Nagios加入到服務列表中以使之在系統啟動時自動啟動:
# chkconfig --add nagios [ Enter ] # chkconfig nagios on [ Enter ]執行下面的命令來驗證Nagios的樣例配置文件:
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg [ Enter ]如果最后的結果類似下面而沒有報錯,可以啟動Nagios服務:
Total Warnings: 0 Total Errors: 0Things look okay - No serious problems were detected during the pre-flight check # service nagios start之后可以在瀏覽器上訪問鏈接http://192.168.1.10/nagios,如果能夠正常看到頁面,證明主程序和插件都安裝和配置成功(如圖pic32.png所示)!點擊“Service Detail”的鏈接來查看你本機的監視詳情。此時可能需要給點時間讓Nagios來檢測你機器上所依賴的服務(如圖pic33.png-pic34.png所示)。
實際上在裝完Nagios之后此時網絡監測工作只是剛剛開始而已,毫無疑問用戶的需求不是只監測本地系統,而是大量的遠程服務器上的系統狀況以及服務運行狀況。
有幾種不同方式來監測遠程Linux/UNIX服務器的服務與屬性。
其中之一是應用共享式SSH密鑰,即運行check_by_ssh插件來執行對遠程主機的檢測。這種方法會導致安裝有Nagios的監測服務器產生很高的系統負荷,尤其是要同時監測成百個主機中的上千個服務時,這是因為要建立大量的SSH連接的總開銷會很高。
另一種方法是使用NRPE外部構件監測遠程主機。NRPE外部構件可以在遠程的Linux/Unix主機上執行插件程序。如果是要象監測本地主機一樣對遠程主機的磁盤利用率、CPU負荷和內存占用率等情況下,NRPE外部構件將非常有用。
提到“外部構件”這個概念的時候需要說明一下,Nagios有許多"外部構件"軟件包可供使用。外部構件可以擴展Nagios的應用并使之與其他軟件集成,而且能夠通過WEB接口來實現管理配置文件,監測遠程主機(*NIX,Windows等),對遠程主機的強制監測,減化并擴展告警邏輯等功能。
NRPE是一個可在遠程Linux/Unix主機上執行的插件的外部構件包。如果你需要監測遠程的主機上的本地資源或屬性,如磁盤利用率、CPU負荷、內存利用率等時是很有用的。最終效果和用check_by_ssh插件來實現的功能一樣,但是他不需要占用更多的監測主機的CPU負荷,所以當你需要監測大量的主機時這個構件將起到很重要的作用(如圖pic35.png所示)。
通過該圖可以看出,我們需要在被監測主機上部署NRPE,他相當于一個守護進程負責監聽。而監測主機使用check_nrpe并通過SSL連接訪問這個daemon,然后調用被監測方的check_disk,check_load等腳本獲取信息并將結果傳遞到監測主機。同時這些腳本也有能力監測到其他主機的相關信息。
NRPE的使用環境有direct check和indirect check兩種,direct check指的是NRPE運行在被監測主機的本地,而indirect check意味著運行NRPE的服務器只是一個中間人,他會繼續通過剛才所提及的腳本來監測其他更多遠程主機上的服務和系統信息。層次化的監測就是通過這種方式來實現。
為了簡單說明問題,我們將部署的是基于direct check的環境部署NRPE。所以下面的操作將會在被監測主機192.168.1.220上進行。
首先要建立Nagios賬號,這里我使用同樣的密碼:
# useradd nagios [ Enter ] # passwd nagios [ Enter ]之后按照和上面相同的步驟來編譯和安裝nagios-plugin軟件:
# tar -zxf nagios-plugins-1.4.12.tar.gz [ Enter ] # cd nagios-plugins-1.4.12 [ Enter ] # ./configure [ Enter ] # make [ Enter ] # make install [ Enter ]然后對相關的目錄設置權限和所屬用戶組:
# chown nagios.nagios /usr/local/nagios [ Enter ] # chown –R nagios.nagios /usr/local/nagios/libexec [ Enter ]接著NRPE包放到/usr/local目錄下,按照下面的步驟解壓縮,并且編譯和安裝:
# tar -zxf nrpe-2.12.tar.gz [ Enter ] # cd nrpe-2.12 [ Enter ] # ./configure [ Enter ] # make all [ Enter ] # make install-plugin [ Enter ] # make install-daemon [ Enter ] # make install-daemon-config [ Enter ]同時安裝NRPE的插件、進程以及進程范例配置文件。
接著執行命令將nrpe安裝為依賴xinetd超級進程的非獨立服務,那么前提是必須安裝xinetd。不過一般系統都會自動安裝該服務。 最后執行下面的命令將NRPE安裝為xinetd超級進程所管理的進程之一。
# make install-xinetd [ Enter ]完成之后需要編輯/etc/xinetd.d目錄下的nrpe文件,并且在最后添加允許實施監測的主機IP地址,這里是192.168.1.10,那么整個配置文件全文如下:
# cat /etc/xinetd.d/nrpe [ Enter ] service nrpe {flags = REUSEsocket_type = stream port = 5666 wait = nouser = nagiosgroup = nagiosserver = /usr/local/nagios/bin/nrpeserver_args = -c /usr/local/nagios/etc/nrpe.cfg --inetdlog_on_failure += USERIDdisable = noonly_from = 192.168.1.10 }然后修改/etc/services檔,并添加下面的內容:
nrpe 5666/tcp # nrpe重啟服務:
# /etc/init.d/xinetd restart [ Enter ]此時檢查nrpe服務啟動狀況如下:
# netstat -nl | grep 5666 [ Enter ] tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN # lsof -i:5666 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME xinetd 9949 root 5u IPv4 28764 TCP *:nrpe (LISTEN)現在最關鍵的一步是確保安裝的NRPE進程能夠正常工作,所以要使用check_nrpe插件進行測試。在監測主機192.168.1.10上執行命令:
# /usr/local/nagios/libexec/check_nrpe -H 192.168.1.220 [ Enter ]如果能夠出現如下的版本號顯示,則證明在被監測主機上配置的NRPE已經正常工作,并且監測主機能夠通過SSL與被監測主機上的NRPE正常通信。 NRPE v2.12
但是如果出現一些error信息,則需要檢查配置,檢查的內容包括主要有下面幾項:
NRPE的配置文件/usr/local/nagios/etc/nrpe.cfg中實際上已經包含了一些對系統進行監測的命令。由于NRPE安裝在本地,這些命令可以直接協助NRPE從被監測主機獲取系統和服務運行狀況,而且都是在剛才通過nagios-plugin安裝的。
如果從監測主機上運行這些命令進行監測,一切正確可以看到下面的效果。那么不難看出其中的奧妙,即實際上完全可以利用在/usr/local/nagios/libexec/中的各種腳本并添加各項參數來定制自己的監測內容。(如圖pic36.png所示)
那么到此為止我們就完成了在遠程被監測主機上安裝和配置RNPE的任務。現在需要在監測主機,也即是192.168.1.10上面安裝和配置check_nrpe插件。
步驟大概分為:
第一,安裝check_nrpe插件;
第二,為使用check_nrpe插件建立Nagios命令定義;
第三,建立Nagios host以及服務定義
由于我們剛才已經在安裝Nagios之后安裝了nrpe,所以實際上第一個步驟已經完成。
現在開始執行第二步驟——建立命令定義:
這里需要花點時間特別說明一下Nagios利用命令定義進行監測的原理:
在安裝nagios成功之后可以看到在/usr/local/nagios/libexec目錄下有很多可執行監測程序或者腳本,其名稱類似check_icmp這樣的格式。Nagios并沒有提供針對這些監測程序的腳本的說明文檔,想了解這些腳本如何工作,需要通過–h參數,顯示其使用方法和參數,并會給出一些實際的例子。例如:./check-disk –h。
那么我們可以嘗試按照其中一個例子執行該腳本,執行和顯示的結果如下:
# ./check_disk -w 10% -c 5% -p /tmp -p /var -C -w 100000 -c 50000 -p /dev/sda3 [ Enter ] DISK OK - free space: / 2124 MB (41% inode=90%);| /=2955MB;4820;5088;0;5356可以看到狀態值“OK”,以及一些詳細的數據信息。
上述操作說明這些插件都是可以獨立使用。Nagios有很多個cfg配置文件用來定義各式各樣的信息,其中template.cfg是用來定義主機和服務信息的模板文件,在目錄/usr/local/nagios/etc/objects下。我們將按照這些模板來建立新的配置文件,例如同樣目錄下的server.cfg來定義監測內容,那么這些插件就會從server.cfg中調用。例如要定義一個需要監測的SSH服務,名稱為TestSSH:
按照其格式:
define service { host_name x.x.x.x service_description check_ssh …… check_command check_ssh }host_name項說明該服務所在的主機名,service_description項為服務的說明信息,這項內容會顯示在nagios頁面中。check_command項說明要使用的命令,這個例子中的命令check_ssh就是一個插件了。這個服務定義明確了nagios在需要監測的內容和監測的手段,即使用check_ssh插件來監測主機x.x.x.x上的ssh服務情況。
除了直接使用插件來做check_command項的參數以外,還可以使用自己定義的命令來做check_command參數。例如,定義一個需要監測的主機,名字是localhost.localdomain:
define host { host_name localhost.localdomain alias remotehost01 address 192.168.0.1 …… check_command check-host-alive …… }在此例中,check_command項的參數“check-host-alive”并非一個插件,而是在commands.cfg檔中定義的一個命令。那么在相同目錄的command.cfg中對該命令又被定義為:
# 'check-host-alive' command definition define command{ command_name check-host-alive command_line $USER1$/check_ping -H 192.168.1.220 -w 300.0,80% -c 500.0,100% -p 1 }首先,$USER1$這個參數在resource.cfg中定義,這個值會指向插件的目錄(如:/usr/local/nagios/libexec)。“-H 192.168.1.220”定義目標主機的地址,-w說明后面的一對值對應的是“WARNING”狀態,“80%”是其臨界值。“-c 500.0,100%” 其中“-c”說明后面的一對值對應的是" CRITICAL",“100%”是其臨界值。“-p 1”說明每次探測發送一個包。
所以歸根結底就是說通過ping這種方式來證明某臺主機處于alive狀態。
而至于如何監聽非默認端口的服務。下面我也舉例說明一下這個問題:
例如:現需檢查的一個運行在8080埠上的http服務。那么我們可以對commands.cfg檔中對關于check_http的聲明做如下修改。
# 'check_http' command definition define command{ command_name check_http command_line $USER1$/check_http -H 192.168.1.220 -p $ARG1$ }其中$ARG1$是指在調用這個命令的時候,命令后面的第一個參數。
再把services.cfg中,對應服務的檢測命令后面加一個參數:
define service { host_name ... ... check_command check_http!8080 }這樣就可以對8080埠的http服務進行監測了。如果要添加多個參數的時候,也可以類似操作。 綜上所述,插件的安裝和調用方法也就舉例介紹完畢了,大家在使用中也可以使用自己寫的檢測腳本來完成比較特殊的檢測功能。
所以按照上面所敘述的原理,我們開始第二步和第三步的配置,為使用check_nrpe插件建立Nagios命令定義以及服務定義:
修改配置文件/usr/local/nagios/etc/objects/command.cfg并增加下面的內容:
define command{ command_name check_nrpe command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ }然后針對要監測的目標主機建立主機定義,主機定義的項目和內容有很多,所以定義的項目如下:
host_name host_name # 簡短的主機名 alias alias # 別名,可以更詳細的說明主機 address address # ip地址,當然如果DNS服務可用也可以寫名稱。如果你不定義該值,nagios 將會用host_name去尋找主機。 parents host_names # 上一節點的名稱,也就是指從nagios服務器到被監測主機之間經過的節點,可以是路由器、交換機、主機等等。這個節點也要定義并且要被nagios監測。 hostgroups # 簡短的主機組名稱 check_command # 檢查命令的簡短名稱,如果此項留空,nagios將不會去判斷該主機是否alive。 max_check_attempts # 當檢查命令的返回值不是“OK”時,重試的次數 check_interval # 循環檢查的間隔時間。 active_checks_enabled # 是否啟用“active_checks” passive_checks_enabled # 是否啟用“passive_checks”,及“被動檢查” check_period # 檢測時間段簡短名稱,此處只是名稱,具體的時間段要寫在其他的配置文件 obsess_over_host # 是否啟用主機操作系統探測。 check_freshness # 是否啟用freshness測試。freshness測試是對于啟用被動測試模式的主機而言 的,其作用是定期檢查該主機報告的狀態信息,如果該狀態信息已經過期, freshness將會強制作主機檢查。 freshness_threshold # fressness的臨界值,單位為秒。 如果定義為0,則為自動定義。 event_handler # 當主機發生狀態改變時,采用的處理命令的簡短的名字 (可以在commands.cfg中對其定義) event_handler_enabled # 是否啟用event_handler low_flap_threshold # 抖動的下限值。所謂抖動,主要定義了這樣一種現象:在一段時間內,主機(或服務)的狀態值頻繁發生變化,類似一個問題風暴或者一個網絡問題。 high_flap_threshold # 抖動的上限值 flap_detection_enabled # 是否啟用抖動檢測 process_perf_data # 是否啟用processing of performance data retain_status_information # 程序重啟時,是否保持主機狀態相關的信息 retain_nonstatus_information # 程序重啟時,是否保持主機狀態無關的信息 contact_groups # 聯系人組(這個組會在contactgroup.cfg文件中定義),在此組中的聯系人都會受到該主機的告警提醒信息。 notification_interval # 告警臨界值。達到此次數之后,才會發送該機的報警提醒信息。 notification_period # 告警時間段 notification_options # 告警包括的狀態變化結果 notifications_enabled # 是否啟用告警提醒功能 stalking_options [o,d,u] # 持續狀態檢測參數,o = 持續的UP狀態, d = 持續的DOWN狀態,and u = 持續的UNREACHABLE狀態.當然在企業的監測環境中很多項目可能都不一定能夠用上,這里我只是通過一個簡單的例子說明其用法就好了。所以修改/usr/local/nagios/etc/objects/localhost.cfg文件,于該文件的“HOST DEFINITION”部分,在原來的基礎上增加自己的主機定義內容:
define host{use linux-box ; Inherit default values from a templatehost_name localhost ; The name we're giving to this serveralias RHEL5u2 ; A longer name for the serveraddress 192.168.1.220 ; IP address of the server}同時在“HOST GROUP DEFINITION”部分,將192.168.1.220這臺主機加入到linux-servers這個hostgroup中。如果有多臺主機都屬于這個hostgroup,可以用逗號將其隔開。以下是我添加的內容:
define hostgroup{hostgroup_name linux-servers ; The name of the hostgroupalias Linux Servers ; Long name of the groupmembers 192.168.1.220 ; Comma separated list of hosts that belong to this group}而在最后的“SERVICE DEFINITION”部分,所有未注釋的部分實際上是關于對localhost也就是本機所要監測的內容。其格式和語法就是我在提到Nagios監測原理方面舉例說明的內容。對于localhost來說不需要修改了,但是可以把他的內容復制到自定義的cfg檔中并照葫蘆畫瓢修改成對192.168.1.220這臺 主機的命令定義。我們下面就來做這樣的操作:
在/usr/local/nagios/etc/objects目錄下針對監測的服務建立服務定義,建立一個新的文件remotehosts.cfg,加入下面內容:
下面是自定義的:
define service{ use generic-service host_name localhost service_description CPU Load check_command check_nrpe!check_load }表示監測遠程主機的CPU負載。
如果要監測當前在遠程主機的磁盤空間,則加入:
define service{ use generic-service host_name localhost service_description /dev/sda3 Free Space check_command check_nrpe!check_disk /dev/sda3 }如果要監測當前遠程主機的僵死進程數,則加入:
define service{ use generic-service host_name localhost service_description Zombie Processes check_command check_nrpe!check_zombie_procs }同時使用vi編輯器末行模式的r功能讀取當前目錄下的localhost.cfg檔,刪除“HOST DEFINITION”和“HOST GROUP DEFINITION”部分。只保留“SERVICE DEFINITION”部分并修改為下面的內容:
第一個命令定義:
通過check_ping腳本確保監測主機和被監測主機的連通性,如果網絡丟包率到達20%則產生warning警告,到達60%則產生critical警告:
define service{use local-service ; Name of service template to usehost_name 192.168.1.220service_description PING REMOTE HOSTcheck_command check_ping!100.0,20%!500.0,60%}第二個命令定義:
監測遠程主機根分區磁盤狀況,如果根分區可用空間低于20%會產生Warning警告,如果可用空間低于10%則產生Critical警告:
define service{use local-service ; Name of service template to usehost_name 192.168.1.220service_description Root Partition of Remote Servercheck_command check_local_disk!20%!10%!/}第三個命令定義:
監測遠程主機當前的登錄用戶數量,如果登錄數量大于20用戶則產生warning警告,如果大于50則產生critical警告:
define service{use local-service ; Name of service template to usehost_name 192.168.1.220service_description Current Users of Remote Servercheck_command check_local_users!20!50}第四個命令定義:
監測遠程主機當前的進程總數,如果大于250進程則產生warning警告,如果大于400進程則產生critical警告:
define service{use local-service ; Name of service template to usehost_name 192.168.1.220service_description Total Processes of Remote Machinecheck_command check_local_procs!250!400!RSZDT}第五個命令定義:
監測遠程主機當前的本地負載量:
define service{use local-service ; Name of service template to usehost_name 192.168.1.220service_description Current Load of Remote Machinecheck_command check_local_load!5.0,4.0,3.0!10.0,6.0,4.0}第六個命令定義:
監測遠程主機swap文件系統使用量,如果swap可用空間低于20%則產生warning警告,低于10%則產生critical警告:
define service{use local-service ; Name of service template to usehost_name 192.168.1.220service_description Swap Usage of Remote Servercheck_command check_local_swap!20!10}第七個命令定義:
監測SSH連接可用性,但消息通知功能默認被關閉,因為并不是所有用戶都有權限SSH。
define service{use local-service ; Name of service template to usehost_name 192.168.1.220service_description SSH of Remote Machinecheck_command check_sshnotifications_enabled 0}# Define a service to check HTTP on the remote machine. # Disable notifications for this service by default, as not all users may have HTTP enabled.第八個命令定義:
監測遠程主機上的HTTP服務,但類似于SSH,該服務的消息通知功能默認關閉。
define service{use local-service ; Name of service template to usehost_name 192.168.1.220service_description HTTP of Remote Machinecheck_command check_httpnotifications_enabled 0}保存該檔后,按照其他cfg文件的權限和屬性為該文件指定所屬用戶和組:
# chown nagios.nagios /usr/local/nagios/etc/objects/remotehosts.cfg [ Enter ]至于想定義的其他內容,我就不再向該文件中添加了,我想大家應該已經掌握了這種命令定義的方法了。
最后不要忘了一步關鍵的操作——在主配置文件中定義Nagios啟動之后讀取剛才修改的這些配置,也就是確保剛才修改的配置文件在nagios主配置文件/usr/local/nagios/etc/nagios.cfg中都有正確指定,信息如下:
cfg_file=/usr/local/nagios/etc/objects/commands.cfg cfg_file=/usr/local/nagios/etc/objects/remotehosts.cfg cfg_file=/usr/local/nagios/etc/objects/localhost.cfg最后校驗配置文件正確性:
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg [ Enter ]如果校驗完全通過,則重啟Nagios服務:
# chkconfig --level 345 nagios on [ Enter ] # service nagios restart [ Enter ]此時如果再通過瀏覽器訪問http://192.168.1.10/nagios,我們就可以看到被監測主機192.168.1.220上所反應出來的內容信息。下面是幾個效果圖:(如圖pic37.png-pic39.png所示)
到此為止,Nagios的基本原理和強大的功能就基本介紹完了。而事實上Nagios不但能在現有的功能基礎上實現功能擴展,而且還能夠實現和第三方軟件的結合,例如和前面所介紹的MRTG和Cacti聯用來構建動態顯示圖標;同時按照前面所說明的內容可以配置各種事件級別的郵件通知功能。但因為篇幅的限制我們會在下次有機會的時候向大家介紹。盡管在配置的難度上顯得比較高,但是其強大的功能和靈活性卻給我們留下了極深的印象。因此這也是在一些中型甚至是大型企業中所推崇并逐步采用的一種監測方案。
各種系統監測優缺點比較和總結:
通過該文章的介紹,我們大致了解了多張不同但都比較常用的系統監測解決方案。下面可以簡單比較幾種不同監測方法的特點。
在大多數監測環境中,采用SNMP都是公用的標準和協議。所以除了Nagios之外,基本上所有的監測環境也是圍繞SNMP協議部署,對SNMP協議的支持是目前市面上眾多網管軟件的最基本要求。
通過SNMP 結合閉源商業軟件的部署監測的方案:
擁有配置簡單且功能也相對強大的優點,但是缺點是要受到閉源商業軟件在功能和靈活性上的限制,而且意味著企業需要為這種類型的監測支付高昂的軟件使用成本;
通過SNMP 結合MRTG實現部署監測方案:
優點是費用方面的支出基本為零,但缺點是配置過程要顯得相當復雜和繁瑣,而且由于MRTG本身的一些限制功能比較單一。
通過SNMP 結合 Cacti和RRDtool實現部署監測方案:
優點是同樣不需要支付高昂的費用,而且相對于單純使用Mrtg而言功能方面大大增強,顯示的效果方面也要比Mrtg好很多,同時在監測內容和靈活性方面也有了很大的改善,相信這種方案能夠被很多中小型企業所接受。但最大的問題是在部署的難度增加,對操作管理人員技術方面的要求也大大增加。因此這種方案也能夠作為一種折中的選擇。
通過Nagios實現監測方案:
這是幾種不同方案中唯一可以不使用SNMP的,但是功能上絲毫不比傳統的使用SNMP協議的監測軟件遜色,甚至實現了更多實用的特性,更何況結合插件也能支持SNMP。另外Nagios的部署和定義非常靈活,和其他軟件的兼容性方面也表現出很多創造性的優勢。顯然在幾種監測方案中,這種監測方案無疑是比較優秀的!但缺點自然也不言而喻,強大的功能是以更為繁瑣和更高的技術要求作為代價,如果針對一個大型網絡要將Nagios所有的功能都一一實現,顯然對用戶的技術水準方面要求會比較高。
總之,在企業系統和應用監測的領域中,盡管有各種不同類型的監測要求,盡管也相應地也提供了各種不同類型的監測部署方案。但不管是利用基本的SNMP實現簡單和單一的監測,還是利用像Cacti + RRDtool甚至Nagios這樣的軟件實現功能更加強大的監測部署;不管是全部利用開源軟件本身實現所有監測功能,還是和像Whatsup和Solawins等這種閉源商業軟件結合部署監測環境——各種開源軟件以及開源項目上都表現出了極強的共通性和兼容性,而且在功能上絲毫沒有遜色。完全能夠支撐和滿足企業級的監測部署環境要求!
通過本文筆者希望能夠為更多中小企業甚至大型企業用戶在部署監測環境方面提供一些有用參考和幫助。希望他們能夠藉助開源方案量體裁衣地打造適合于自己的企業級監測系統。
關于作者
王基立,現工作于紅帽軟件(北京)有限公司,具備多年的售前解決方案規劃與售后技術支持經驗,熟悉紅帽所有平臺類產品和解決方案。現常駐深圳任紅帽軟件華南區解決方案架構師一職,主要負責紅帽解決方案在華為、中興等大型電信企業用戶環境中的設計、規劃、應用以及相關售前工作。同時也為包括各高級分銷商以及金融、政府、教育等各方面在內的管道和區域用戶提供相關解決方案、技術咨詢、技術培訓、現場實施、技術支持等服務。
原文地址:http://www.infoq.com/cn/articles/nagios-enterprise-level-system-monitor?
???????????? https://github.com/mconigliaro/NagiosPluginsNT?
???????????? https://github.com/robertmircea/nagios-nsca-client
轉載于:https://www.cnblogs.com/shanyou/archive/2012/08/07/2627219.html
總結
以上是生活随笔為你收集整理的Nagios:企业级系统监控方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 调用方法mssql_fetch_row、
- 下一篇: Holedox Moving