本文由秀依林楓提供友情贊助,首發于爛泥行天下
在前兩篇文章中,我們介紹了有關nagios的安裝與配置,文章為《爛泥:學習Nagios(一):Nagios安裝》、《爛泥:學習Nagios(二):Nagios配置》,這篇我們來介紹下NRPE的相關知識。
有關NRPE的介紹,我們主要分以下幾個步驟:
1、 什麼是NRPE
2、 NRPE的工作過程
3、 安裝及配置NRPE
4、 通過NRPE監控主機
5、 給NRPE傳遞參數
6、 NRPE監控注意事項
一、什麼是NRPENRPE是Nagios Remote Plugin Executor的簡稱,它是nagios的一個擴充工具,用在被監控主機上。通過它可以向nagios監控伺服器提供該主機的一些本地資訊。例如:cpu負載、記憶體使用情況、磁盤容量、登陸使用者數、總程序數、僵屍程序數、swap分區使用情況等等。
注意:NRPE方式的監控,隻能監控主機本地的資訊,并不能監控資料庫。NRPE可以稱為nagios的for linux用戶端。而為什麼要使用這個用戶端呢?
有以下兩個原因:
1、nagios隻能監控自己所在的伺服器,而對其他主機的監控則無能為力。畢竟沒得到被監控主機的适當權限是不可能得到這些資訊的。為了解決這個問題,我們就可以通過NRPE來完成對遠端主機本地資訊的監控。
2、在nagios的監控插件中,有一個名為check_ssh的插件,它也可以實作對遠端主機本地資訊的監控。但是,相對NRPE而言,check_ssh占用的系統資源就略多一點。監控少量的服務時可能還不會察覺,但是如果監控對象比較多的話,那麼兩者的差距就非常明顯了。
同時還有一點要說明, 由于NRPE的監控過程并不需要遠端主機上的系統賬号資訊以及不登入到系統中等操作,是以其安全性也就高于check_ssh的監控方式。
二、NRPE的工作過程在上一章中,我們介紹了什麼是NRPE,這一章我們來介紹下NRPE的工作過程。
NRPE總共由兩部分組成:check_nrpe插件和NRPE daemon。
其中check_nrpe插件,存在于nagios監控伺服器和被監控主機上。而NRPE daemon隻運作在被監控主機上。
當nagios需要監控某個遠端主機的服務或資源時,NRPE工作過程如下:
1、nagios監控伺服器會運作本地check_nrpe插件,告訴它要檢查哪些服務或資源。
2、nagios監控伺服器上的check_nrpe插件會連接配接到遠端主機上的NRPE daemon。
3、遠端主機上的NRPE daemon會運作本地的各種nagios插件去監測本地的服務或資源。
4、NRPE daemon将檢查的結果傳回給nagios伺服器上的check_nrpe插件,然後該插件再把結果送到nagios狀态隊列中。
5、nagios依次讀取隊列中的資訊,最後把結果顯示出來。
以上就是整個NRPE的工作過程,相關示意圖如下:

在第二章中,我們介紹了NRPE的工作過程,通過介紹我們知道。要使nagios通過NRPE方式監控遠端主機,我們需要在nagios伺服器和被監控主機上都要安裝NRPE,同時我們還需要在被監控的主機上安裝nagios插件。
注意:被監控主機一定要安裝nagios插件,否則NRPE daemon不能做任何監控。因為NRPE daemon監控的資料都是要通過nagios插件獲得。
3.1 被監控主機安裝NRPE要在被監控的主機上安裝NRPE,我們首先要在被監控主機上安裝nagios插件,至于為什麼要安裝nagios插件,到下面我們講解NRPE的配置檔案時會進行介紹。下載下傳nagios插件,如下:
wget http://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz
在所需要的軟體包都下載下傳完畢後,我們現在來建立NRPE daemon運作時所需要的使用者。NRPE daemon運作預設使用nagios使用者,是以我們先來建立該使用者。如下:
useradd -M -s /sbin/nologin nagios
grep nagios /etc/passwd
現在我們開始安裝nagios插件,nagios插件的安裝很簡單,按照平時安裝軟體的方法即可。如下:
tar -xf nagios-plugins-2.0.3.tar.gz
cd nagios-plugins-2.0.3
配置nagios插件,如下:
./configure
編譯與安裝nagios插件,如下:
make && make install
檢視nagios插件安裝後的目錄,如下:
ll /usr/local/nagios/
檢視所安裝的插件,如下:
ll /usr/local/nagios/libexec/
通過上圖,可以很明顯的看出nagios插件中已經包含check_nrpe插件。
3.1.3 安裝NRPEnagios插件安裝完畢後,我們現在來下載下傳NRPE的軟體包,如下:
http://exchange.nagios.org/directory/Addons/Monitoring-Agents/NRPE--2D-Nagios-Remote-Plugin-Executor/detail
s
http://sourceforge.net/projects/nagios/files/nrpe-2.x/
wget http://sourceforge.net/projects/nagios/files/nrpe-2.x/nrpe-2.15/nrpe-2.15.tar.gz
NRPE軟體包下載下傳完畢後,我們現在開始安裝NRPE,如下:
tar -xf nrpe-2.15.tar.gz
cd nrpe-2.15
配置NRPE,如下:
./configure --enable-command-args
編譯NRPE,如下:
make all
安裝NRPE插件check_nrpe,如下:
make install-plugin
通過上圖,我們可以很明顯的看到check_nrep已經安裝到/usr/local/nagios/libexec/目錄下。
安裝NRPE指令,如下:
make install-daemon
安裝NRPE配置檔案,如下:
make install-daemon-config
有關NRPE的具體安裝步驟,在NRPE軟體包的doc目錄下也是有安裝文檔的。如下:
在nagios伺服器上安裝NRPE和在被監控主機上安裝差不多,隻是步驟沒有在被監控主機上安裝多而已。
下載下傳nrpe插件,如下:
wget http://sourceforge.net/projects/nagios/files/nrpe-2.x/nrpe-2.15/nrpe-2.15.tar.gz
解壓NRPE軟體包,如下:
tar -xf nrpe-2.15.tar.gz
cd nrpe-2.15
配置NRPE,如下:
./configure
編譯NRPE,如下:
make all
安裝NRPE插件check_nrpe,如下:
make install-plugin
檢視check_nrpe插件,如下:
ll /usr/local/nagios/libexec/ |grep check_nrpe
NRPE安裝完畢後,我們來測試下check_nrpe插件。如下:
/usr/local/nagios/libexec/check_nrpe -H 192.168.1.248
通過上圖,我們可以很明顯的看出, nagios伺服器上的check_nrpe已經被正常安裝,同時被監控主機192.168.1.248上的NRPE也已經正常工作,并且NRPE的版本号為2.15。這個和我們通過check_nrpe插件得到版本号是一緻的。
3.3 NRPE 幫助指令NRPE指令的使用方式,我們可以通過檢視其幫助得到。如下:
/usr/local/nagios/bin/nrpe –h
通過檢視NRPE的幫助指令,我們知道NRPE運作的方法,如下:
nrpe -c NRPE配置檔案路徑 運作模式
注意:NRPE指令隻存在被監控主機上。NRPE相關參數說明,如下:
-n表示不使用SSL方式傳輸資料,預設使用SSL方式傳輸資料。
<config_file>指定NRPE配置檔案路徑,這個配置檔案就是nrpe.cfg檔案。
<mode>指定NRPE的運作方式,NRPE一共有2種運作方式:
-i以超級守護程序inetd或xinetd方式運作NRPE,要通過這種方式運作的話還要安裝和配置xinetd,一般不用。
-d獨立守護程序方式運作NRPE,一般常用這種運作方式。
3.4 NRPE 配置檔案在啟動NRPE之前,我們來看看NRPE的配置檔案nrpe.cfg。該檔案預設在/usr/local/nagios/etc/目錄下。如下:
ll /usr/local/nagios/etc/
現在我們來編輯該檔案,如下:
egrep -v "^#|^$" /usr/local/nagios/etc/nrpe.cfg
pid_file=/var/run/nrpe.pid 定義NRPE的PID檔案。
server_port=5666定義NRPE daemon使用的端口。
nrpe_user=nagios nrpe_group=nagios
定義NRPE運作時,所使用的使用者及使用者組,預設為nagios使用者及nagios使用者組。
allowed_hosts=127.0.0.1
定義允許連接配接到該主機的nagios伺服器。如果是多個伺服器的話,可以使用逗号隔開。如果是允許一個網段的話,格式如下:192.168.1.0/24。
command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
定義NRPE執行check_users指令時,所要運作的擴充插件指令。
注意:根據以上格式,我們可以看出NRPE在執行相關指令時,是要先執行本地的nagios插件,然後把執行的結果回報給NRPE。 這個也就是為什麼我們要在NRPE上安裝nagios插件的原因。在此NRPE給出一些列子,用于監控本地主機。如下:
command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200
以上就是NRPE預設擴充插件指令,這是非常至關重要的地方。當被監控主機運作NRPE守護程序時,同時就運作這些在NRPE配置檔案中定義的NRPE擴充插件指令。
并且通過上述例子,我們可以很明顯的看出這些擴充指令都已經指定了好了指令名、插件路徑以及選項參數。格式如下:
command[NRPE指令名]=插件路徑/插件 選項1 參數1 選項2 參數2 ...
注意:如果要指定該被監控主機需要被監控的服務的話,就必須在這裡都配置好NRPE指令并運作在NRPE守護程序裡。如果這裡沒有配置的NRPE指令的話,那麼nagios伺服器是無法監控到的。
當然以上指令格式,nrpe.cfg配置檔案也給出了使用格式,如下:
command[<command_name>]=<command_line>
NRPE安裝完畢後,我們切換到被監控主機上來啟動NRPE,如下:
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
ps aux|grep nrpe
檢視NRPE的端口,如下:
netstat -tunlp |grep nrpe
通過上圖,我們很明顯的看到NRPE使用的是TCP的5666端口。
四、通過NRPE監控主機NRPE在被監控主機和nagios伺服器安裝完畢後,我們就可以通過NRPE監控主機了。
但是在正式開始監控之前,我們還需要做幾點工作。
注意:以下所有的操作都是nagios伺服器上完成。 4.1 定義check_nrpe指令要使用NRPE監控主機,我們需要把check_nrpe指令在commands.cfg檔案中進行定義。如下:
vi /usr/local/nagios/etc/objects/commands.cfg
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ }
在check_nrpe指令定義完畢後,我們還需再來定義一個host和service模版在templates.cfg檔案中,用于以後的主機和服務的引用。
當然,這個定義我們也可以不在templates.cfg中進行,可以再單獨定義一個cfg檔案,但是這個單獨的cfg檔案需要在nagios.cfg檔案中引用才能正常使用。
除此之外,如果我們不想自定義host的話,也可以直接使用templates.cfg檔案中已經定義好的host。
注意:在nagios中已經定義好的host、service等其他對象,都是可以通過use指令被直接引用的。在此我們定義一個host和service,先來定義一個名稱為ilannihost 的host,如下:
vi /usr/local/nagios/etc/objects/templates.cfg
define host{
name ilannihost
use generic-host
check_period 24x7
check_interval 5
retry_interval 1
max_check_attempts 10
check_command check-host-alive
notification_period workhours
notification_interval 120
notification_options d,u,r
contact_groups admins
register 0
}
其中:
name ilannihost表示該定義host的名稱為ilannihost。
use generic-host表示引用generic-host這個定義的host。而generic-host這個host的定義也是在templates.cfg檔案中進行定義的。如下:
host定義完畢後,我們再來定義service。定義一個名稱為ilanniservice的service,如下:
vi /usr/local/nagios/etc/objects/templates.cfg
define service{
name ilanniservice
use generic-service
max_check_attempts 4
normal_check_interval 5
retry_check_interval 1
register 0
}
其中:
name ilanniservice表示該定義service的名稱為ilanniservice。
use generic-service表示引用generic-service這個定義的service。而generic-service這個servic的定義也是在templates.cfg檔案中進行定義的。如下:
以上有關check_nrpe、host及service定義完畢後,我們現在開始配置需要監控的主機。
為了能更好的和實際生産環境接近,在此我們不是先一個一個的添加需要監控的主機,然後在nagios.cfg檔案中引用的,而是通過修改nagios.cfg檔案把所所有的主機cfg檔案存放到同一個目錄下,來達到引用的目的。如下:
mkdir /usr/local/nagios/etc/ilanni
vi /usr/local/nagios/etc/nagios.cfg
cfg_dir=/usr/local/nagios/etc/ilanni
現在我們來添加一台需要監控的主機,在/usr/local/nagios/etc/ilanni目錄下建立一個cfg檔案,并填寫相關内容。如下:
vi /usr/local/nagios/etc/ilanni/248.cfg
define host{
use ilannihost
host_name ilanni
alias test_NRPE
address 192.168.1.248
check_command check-host-alive
}
define service{
use ilanniservice
host_name ilanni
service_description nrpe_load
check_command check_nrpe!check_load
}
注意:
host_name要在整個nagios中是唯一的,不能有和其相同的host_name,否則nagios會報錯。
check_command check_nrpe!check_load
其中的check_nrpe就是我們在commands.cfg檔案中定義的check_nrpe指令,!check_load對應該指令中的$ARG1$參數。
是以該配置檔案在nagios伺服器上先執行的指令是:/usr/local/nagios/libexec/check_nrpe -H 192.168.1.248 -c check_load。
該指令執行完畢後,nagios伺服器上的check_nrpe插件就會調用被監控主機上的NRPE daemon。
被監控主機上的NRPE daemon會調用本機的check_load指令,而check_load指令會調用本機的nagios插件check_load,是以在被監控主機上最後的執行指令是:/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20。該指令執行完畢後,再把結果回報到nagios伺服器上。
主機配置檔案修改好後,我們現在來通過nagios指令檢查下該配置檔案是否有問題,如下:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
如果感覺這種方法檢查配置檔案比較麻煩的話,我們也可以通過執行nagios的啟動腳本,來達到目的。如下:
/etc/init.d/nagios configtest
通過上圖,我們很明顯的看到nagios的是以配置檔案都是沒有問題的。
4.4 檢視監控的主機nagios的配置檔案沒有問題,我們現在來啟動nagios,檢視我們剛剛新加的主機。如下:
/etc/init.d/nagios start
nagios正常啟動後,我們現在登入到web界面檢視下剛剛新增加的主機,如下:
通過上面兩張圖檔,我們可以很明顯的看到剛剛新增加的主機ilanni已經被正常監控。
五、給NRPE傳遞參數通過上面的實驗,我們已經成功的通過NRPE指令監控主機。但是還有一點不足的情況,就是我們對監控對象的閥值修改很不容易。現在的情況是,每一次修改閥值都要到被監控主機上修改,很不友善。
其實,我們完全可以通過傳遞參數的形式來達到修改不同監控主機的閥值。
但是要實作以上要求,我們需要在被監控主機和nagios伺服器上進行配置。
5.1 被監控主機配置第一、在安裝配置NRPE時,必須要加上參數--enable-command-args,這個我們在前面安裝配置NRPE時已經加上。如下:
第二、修改nrpe.cfg檔案中參數dont_blame_nrpe=1。如下:
以上兩處修改完畢後,我們現在來開始進行配置一個測監控對象。
修改nrpe.cfg檔案,去掉check_disk前的注釋,并把其命名為check_disk_nrpe,如下:
vi /usr/local/nagios/etc/nrpe.cfg +234其中+234表示顯示第234行。
command[check_disk_nrpe]=/usr/local/nagios/libexec/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
注意:該check_disk_nrpe指令中
$ARG1$、$ARG2$、$ARG3$參數。等會我們在nagios伺服器上傳遞的參數,就是這個進行一一對應。
注意:修改nrpe.cfg檔案後,一定要重新啟動NREP daemon。如下:
pkill nrpe
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
netstat -tunlp |grep nrpe
在被監控主機上修改完畢後,我們現在切換nagios伺服器上進行配置。
在command.cfg檔案中定義一個名為check_disk_ilanni指令,如下:
define command{
command_name check_disk_ilanni
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$ $ARG3$ $ARG4$
}
為了更能形象的說明問題,特意畫了一張圖:
以上定義完畢後,我們現在修改248.cfg檔案為192.168.1.248主機定義此服務。内容如下:
define service{
use local-service,srv-pnp
host_name ilanni
service_description DISK
check_command check_disk_ilanni!check_disk_nrpe!10%!5%!/tmp
}
check_command check_disk_ilanni!check_disk_nrpe!10%!5%!/tmp
表示監控192.168.1.248主機的/tmp分區,當該分區剩餘10%時,就發出報警,當該分區剩餘5%時,就發出緊急告警。
248.cfg檔案配置完畢後,我們再來重新加載nagios程式,如下:
/etc/init.d/nagios reload
現在登入到nagios上看看,實際的監控情況。如下:
通過上圖,我們可以很明顯的看出,我們通過248.cfg的檔案傳遞的參數已經成功的傳遞到被監控主機192.168.1.248上,并且也獲得了正确的資料。
六、NRPE監控注意事項1、通過NRPE方式監控,如果要修改nagios監控的相關閥值,必須在被監控主機的nrpe.cfg檔案中擴充指令中修改。
2、通過NRPE方式監控,如果要新增nagios監控的對象時,必須要先在被監控主機的nrpe.cfg檔案中定義。
3、NRPE daemon是在被監控主機上運作的。