设为首页 收藏本站
查看: 584|回复: 0

nagios自写插件监控某个程序使用物理内存情况

[复制链接]

尚未签到

发表于 2019-1-13 12:59:23 | 显示全部楼层 |阅读模式
  前几天在工作中遇到了一个问题,nagios自写插件,单独测试命令和插件没有问题,但是通过check_nrpe插件调用自写插件的时候会出现问题。

  下面是我写的一个插件,主要功能是:输入一个端口号,就可以知道监听该端口号的程序使用物理内存情况。
#!/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  

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-662763-1-1.html 上篇帖子: 六大Nagios常见问题解决办法 下篇帖子: nagios自定义脚本监控
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表