nagios自寫外掛程式監控某個程式使用實體記憶體情況

來源:互聯網
上載者:User

標籤: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自寫外掛程式監控某個程式使用實體記憶體情況

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.