在前兩篇文章中,我們介紹了有關nagios的安裝與配置,文章為《爛泥:學習Nagios(一):Nagios安裝》、《爛泥:學習Nagios(二):Nagios配置》,這篇我們來介紹下NRPE的相關知識。
有關NRPE的介紹,我們主要分以下幾個步驟:
1、 什么是NRPE
2、 NRPE的工作過程
3、 安裝及配置NRPE
4、 通過NRPE監控主機
5、 給NRPE傳遞參數
6、 NRPE監控注意事項
一、什么是NRPE
NRPE是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
在第二章中,我們介紹了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
3.1.1 創建NRPE用戶
在所需要的軟件包都下載完畢后,我們現在來創建NRPE daemon運行時所需要的用戶。NRPE daemon運行默認使用nagios用戶,所以我們先來創建該用戶。如下:
useradd -M -s /sbin/nologin nagios
grep nagios /etc/passwd
3.1.2 安裝nagios插件
現在我們開始安裝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 安裝NRPE
nagios插件安裝完畢后,我們現在來下載NRPE的軟件包,如下:
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
注意:--enable-command-args參數很重要,如果要給NRPE傳遞參數的話,在安裝配置NRPE時一定要加上該參數。
編譯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目錄下也是有安裝文檔的。如下:
3.2 在nagios服務器上安裝NRPE
在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
注意:如果不想在nagios服務器上安裝NRPE插件的話,我們也可以從已經安裝好NRPE插件的被監控主機上,把/usr/local/nagios/libexec目錄下的check_nrpe文件復制一份到nagios服務器的/usr/local/nagios/libexec目錄下,然后修改其用戶屬性為nagios用戶,同時賦予其執行權限即可。
以后自己寫的監控腳本,可以通過這種方式上傳到nagios的插件目錄。
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>
3.5 啟動並查看NRPE端口
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$ }
注意:
command_name check_nrpe表示定義一個名叫check_nrpe的命令,以后我們要使用的話就可以通過use直接引用該命令。
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
表示要執行的命令,其中-c后面只能接被監控主機nrpe.cfg中定義的命令名稱,$ARG1$就是表示被監控主機nrpe.cfg中定義的命令。例如:
4.2 自定義引用的host和service
在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文件中進行定義的。如下:
4.3 配置需要監控的主機
以上有關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時,沒有加上--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
5.2 nagios服務器配置
在被監控主機上修改完畢后,我們現在切換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$
}
注意:
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$ $ARG3$ $ARG4$
命令中$ARG1$參數接收的是被監控主機nrpe.cfg文件中定義的監控命令,在此我們是以check_disk_nrpe命令為例的。
-a表示接收額外的參數,其中$ARG2$參數對應被監控主機check_disk_nrpe命令中的$ARG1$參數,$ARG3$參數對應被監控主機check_disk_nrpe命令中的$ARG2$參數,$ARG4$參數對應被監控主機check_disk_nrpe命令中的$ARG3$參數。
為了更能形象的說明問題,特意畫了一張圖:
以上定義完畢后,我們現在修改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是在被監控主機上運行的。