系統環境說明:
nagios版本:3.4.1
nagios安裝路徑:/usr/local/nagios
nagios服務器IP:192.168.2.180
被監控端IP:192.168.2.182
提示:以下內容基於本人的另外一篇博客《Nagios之安裝篇》,可能系統環境與配置文件路徑等與大家略有不同,如果你發展文中提到的某些文件或命令沒有找到請參考。
一、基於check_nrpe方式
1、nagios服務器端配置
只要在主機的服務定義配置文件中添加相關的定義即可,這裏以一個簡單的自己寫的腳本check_user檢測登錄用戶數爲例:
vi /usr/local/nagios/etc/objects/basic.cfg ==> 添加如下行 (注意我這裏的basic.cfg是自己創建的,大家根據自己的主機配置文件添加就可以了)
define service{
use linux-service
hostgroup_name basic
service_description Current User
check_command check_nrpe!check_user
}
2、遠程被監控端配置
首先要創建check_user腳本,這裏我自己寫個很簡單的:
vi /usr/local/nagios/libexec/check_user ==> 添加以下內容
#!/bin/bash
# for nrpe check user
U=`who | wc -l`
if [ $U -le 3 ];then
echo "OK,current user is:$U"
exit 0
elif [ $U -gt 6 ];then
echo "CRITICAL,current user is:$U"
exit 2
else
echo "WARNING,current user is:$U"
exit 1
fi
給腳本添加執行權限,更改屬主屬組爲nagios
chmod +x /usr/local/nagios/libexec/check_user
chown nagios.nagios /usr/local/nagios/libexec/check_user
接下來這一步應該是最令人困惑的,因爲如果只做到這裏就去嘗試執行check_nrpe -H IP -c check_user時會提示check_user這個命令沒有定義,其實這個命令在nrpe的配置文件中定義的。
vi /usr/local/nagios/nrpe.cfg ==> 添加如下行
commands[check_user]=/usr/local/nagios/libexec/check_user
然後重啓nrpe服務
3、在nagios服務器端測試
/usr/local/nagios/libexec/check_nrpe -H 192.168.2.182 -c check_user
如果順利的話執行成功會返回例如:OK,current user is:2
小結:總體的實現過程就是這樣的,腳本其實寫的非常簡單,大家在工作中可以自由發揮,通過上邊的例子也可以看出來nagios是通過腳本執行的返回值來確定狀態的,0爲正常、1爲警告、2爲緊急,所以exit的退出狀態碼可不要亂寫,另外就是在腳本中判斷好什麼情況下處於那種狀態,當然腳本也可以接受傳遞的參數用於給不同的被監控端設置不同的閥值,最後別忘了重啓nagios使新配置生效。
二、基於check_by_ssh方式
這種方式通過名字就可以看出來是通過ssh連接到被監控端來執行命令的,所以必須配置nagios服務器端能夠通過密鑰無密碼連接到被監控端。先來簡單的說下配置ssh的公鑰訪問,首選切換到nagios用戶,因爲肯定都是以nagios用戶來執行這些腳本的,所以得配置nagios用戶能夠無密碼訪問
1、以下過程均在nagios服務器端配置:
su - nagios
ssh-kengen -t rsa ==> 執行這個命令時爲了省事,一路回車即可
ssh-copy-id -i /home/nagios/.ssh/id_rsa.pub [email protected] ==> 這次要輸入被監控端的nagios用戶的密碼
測試無密碼ssh登錄
ssh [email protected] ==> 順利的話,這次不需要輸入密碼就直接連接到被監控端
創建check_by_ssh命令定義,編輯commands.cfg文件
vi /usr/local/nagios/etc/objects/commands.cfg ==> 添加如下行
define command{
command_name check_by_ssh
command_line $USER1$/check_by_ssh -H $HOSTADDRESS$ -C $ARG1$
}
在主機的服務定義配置文件中添加
vi /usr/local/nagios/etc/objects/basic.cfg ==> 添加如下行
define service{
use linux-service
host_name 192.168.2.182
service_description disk-user
check_command check_by_ssh!/usr/local/nagios/libexec/check_user
}
2、在遠程被監控端配置
創建腳本和賦予權限相關的,與使用nrpe一樣,但是不在需要在nrpe.cfg文件中添加任何內容,這裏不再給出腳本和賦予權限相關的過程,請參考上邊的。
3、在nagios服務端測試
執行以下命令先手動測試一下
/usr/local/nagios/libexec/check_by_ssh -H 192.168.2.182 -C /usr/local/nagios/libexec/check_user ==> 順利的話會看到類似的返回
warnning,curret user is 4
4、重啓nagios服務觀察測試
總結:通過check_by_ssh與check_nrpe實現的方式看起來都差不多,都是在被監控端執行的然後返回結果,但是理論上用check_nrpe的方式可能效率更高一些,因爲check_by_ssh的方式需要每次檢測的時候都要建立和斷開一次ssh的會話,而nrpe則是被監控端一直在處於監聽狀態的一個服務,影響速度和開銷可能會更低一些。以上是自己的一些經驗總結和心得,可能會有理解不正確的地方,僅供大家參考,互相交流。