189 8069 5689

nagios自写插件监控某个程序使用物理内存情况-创新互联

前几天在工作中遇到了一个问题,nagios自写插件,单独测试命令和插件没有问题,但是通过check_nrpe插件调用自写插件的时候会出现问题。

创新互联是一家专业提供富顺企业网站建设,专注与成都网站建设、网站设计、H5响应式网站、小程序制作等业务。10年已为富顺众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。

下面是我写的一个插件,主要功能是:输入一个端口号,就可以知道监听该端口号的程序使用物理内存情况。

#!/bin/bash
if [ $# -ne 1 ];then
    echo "Usage:$0 num1"
    exit 5;
fi

PORT="$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 0
else
   
   echo "port-${PORT} is not  exist"
   exit 2

fi

编写该插件的时候有两个细节需要注意

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

[root@nagios-server libexec]# ps -p 643 -o rss
  RSS
 2700

方法二:

cat /proc/PID/status

[root@nagios-server libexec]# cat /proc/643/status | grep RSS
VmRSS:      2700 kB

测试:

我们用80端口测试:

首先我们查看80端口是否开启和监控的程序:

[root@nagios-server libexec]# netstat -lntp|awk -F '[ :]+' '$5=="80"{print}'
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      643/nginx

1、测试插件:

[root@nagios-server libexec]# sh check_ps_mem.sh 80
OK 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插件测试:

[root@nagios-server 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测试:

[root@nagios-server libexec]# sudo -u nagios /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_ps_mem
port-80 is not  exist

结果:用nagios账号也是是没有抓到数据。如果nagios账号无法抓取到数据,就算添加到监控也是无法抓到数据。

问题原因:

脚本里/bin/netstat 命令是用sudo执行的。sudo无法在后端执行,执行sudo时要开启tty终端的。用check_nrpe调用脚本时,是在后端执行的sudo  。 好了,问题原因找到了。

解决方法:

在/etc/sudoers文件里添加如下内容:

Defaults:nagios !requiretty

再次测试:

添加  Defaults:nagios !requiretty 后测试:

[root@nagios-server 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


[root@nagios-server libexec]# sudo -u nagios /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

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享标题:nagios自写插件监控某个程序使用物理内存情况-创新互联
标题网址:http://jkwzsj.com/article/doehjc.html

其他资讯