爛泥:學習Nagios(三): NRPE安裝及配置,nagiosnrpe
本文由秀依林楓提供友情贊助,首發於爛泥行天下
在前兩篇文章中,我們介紹了有關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的軟體包,如下:
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
注意:--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是在被監控主機上啟動並執行。