標籤:nagios sudo
前幾天在工作中遇到了一個問題,nagios自寫外掛程式,單獨測試命令和外掛程式沒有問題,但是通過check_nrpe外掛程式調用自寫外掛程式的時候會出現問題。
下面是我寫的一個外掛程式,主要功能是:輸入一個連接埠號碼,就可以知道監聽該連接埠號碼的程式使用實體記憶體情況。
#!/bin/bashif [ $# -ne 1 ];then echo "Usage:$0 num1" exit 5;fiPORT="$1"LINE=$(sudo netstat -lnutp|awk -F ‘[: ]+‘ ‘{print $5}‘|grep -w ${PORT}|wc -l)if [ $LINE -eq 1 ];then PID=$(sudo netstat -lnutp|awk -F ‘[: ]+‘ ‘$5==‘$PORT‘{print $(NF-1)}‘|awk -F ‘/‘ ‘{print $1}‘) PS_NAME=$(sudo netstat -lnutp|awk -F ‘[: ]+‘ ‘$5==‘$PORT‘{print $(NF-1)}‘|awk -F ‘/‘ ‘{print $2}‘ ) MEM=$(ps -p ${PID} -o rss|grep -v RSS) MEMD=$(expr ${MEM} "*" 1024) echo "OK port-${PORT} ${PS_NAME} use mem ${MEMD}b |MEM=${MEMD}b;5000;10000;0" exit 0else echo "port-${PORT} is not exist" exit 2fi
編寫該外掛程式的時候有兩個細節需要注意
1、nagios帳號執行netstat命令時沒有許可權查看其它帳號啟動的程式。所以需要用sudo ,所以在/etc/sudoers添加如下內容:
nagios ALL=(ALL) NOPASSWD: /bin/netstat
使用nagios帳號免密碼執行/bin/netstat命令。
2、查看某個程式使用實體記憶體情況:
我的80連接埠nginx程式PID是:643
方法一:
ps -p PID -o rss[[email protected] libexec]# ps -p 643 -o rss RSS 2700
方法二:
cat /proc/PID/status[[email protected] libexec]# cat /proc/643/status | grep RSSVmRSS: 2700 kB
測試:
我們用80連接埠測試:
首先我們查看80連接埠是否開啟和監控的程式:
[[email protected] libexec]# netstat -lntp|awk -F ‘[ :]+‘ ‘$5=="80"{print}‘tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 643/nginx
1、測試外掛程式:
[[email protected] libexec]# sh check_ps_mem.sh 80OK port-80 nginx use mem 2764800b |MEM=2764800b;5000;10000;0
由以上結果可知,80連接埠的nginx程式使用的實體記憶體情況外掛程式執行成功。
2、編輯/usr/local/nagios/etc/nrpe.cfg檔案:
command[check_ps_mem]=/usr/local/nagios/libexec/check_ps_mem.sh 80
3、用check_nrpe外掛程式測試:
[[email protected] libexec]# /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_ps_mem port-80 is not exist
用root帳號,通過check_nrpe沒有抓到資料;
4、用nagios帳號執行check_nrpe測試:
[[email protected] libexec]# sudo -u nagios /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_ps_memport-80 is not exist
結果:用nagios帳號也是是沒有抓到資料。如果nagios帳號無法抓取到資料,就算添加到監控也是無法抓到資料。
問題原因:
指令碼裡/bin/netstat 命令是用sudo執行的。sudo無法在後端執行,執行sudo時要開啟tty終端的。用check_nrpe呼叫指令碼時,是在後端執行的sudo 。 好了,問題原因找到了。
解決方案:
把/etc/sudoers檔案裡注釋掉一下內容:
Defaults requiretty
再次測試:
下面注釋掉Defaults requiretty後測試:
[[email protected] libexec]# /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_ps_mem OK port-80 nginx use mem 2764800b |MEM=2764800b;5000;10000;0[[email protected] libexec]# sudo -u nagios /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_ps_memOK port-80 nginx use mem 2764800b |MEM=2764800b;5000;10000;0
本文出自 “為夢想而努力!” 部落格,請務必保留此出處http://815632410.blog.51cto.com/1544685/1602297
nagios自寫外掛程式監控某個程式使用實體記憶體情況