nagios3 添加Python编写的插件

Nagios 系统提供了一个插件NRPE。Nagios 通过周期性的运行它来获得远端服务器的各种状态信息。它们之间的关系如下图所示:

http://images.cnitblog.com/blog/370046/201301/30172017-a0cab434c3184ee48163b3c2f86d0299.jpg

Nagios 通过NRPE 来远端管理服务

1. Nagios 执行安装在它里面的check_nrpe 插件,并告诉check_nrpe 去检测哪些服务。

2. 通过SSL,check_nrpe 连接远端机子上的NRPE daemon

3. NRPE 运行本地的各种插件去检测本地的服务和状态(check_disk,..etc)

4. 最后,NRPE 把检测的结果传给主机端的check_nrpe,check_nrpe 再把结果送到Nagios状态队列中。

5. Nagios 依次读取队列中的信息,再把结果显示出来。

其实,我们安装的nagios只是一个框架,至于需要什么样的功能,需要自己写插件来完成补充,具体的语言可以选择c++,shell,Python等,此处我使用的是Python2.7.3,系统是Ubuntu14.04LTS,Nagios3版本是3.5.1

因为原装的nagios并没有检查系统内存使用情况的功能,所以出于需要,我自己用python写了一个检查系统内存的脚本check_mem.py,代码如下

#!/usr/bin/env python

import re
import subprocess
import os
import sys

MEM_WARNING=0.80
MEM_CRITICAL=0.90
#nagios有四种监控状态,0绿色代表OK,1黄色代表WARNING,2红色代表CRITICAL,3褐色代表UNKNOWN
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3

try:
    #此处使用subprocess.Popen时总是报错,所以换用了os.popen来执行shell,我也把这个错误报告给了官方,但是没有得到回复,希望大牛可以帮忙解惑
    #mem_info=subprocess.Popen('free',shell=True,stdout=subprocess.PIPE,
    #                          stderr=(open('/tmp/check_mem_errors.txt','w')))
    #mem_info.stdout.readline()
    #info=mem_info.stdout.readline()

    mem_info=os.popen('free')
    mem_info.readline()
    info=mem_info.readline()
    info=info.strip('\n')
    info_list=re.split('\s+',info)
    mem_total=long(info_list[1])
    mem_free1=long(info_list[3])

    #info=mem_info.stdout.readline()
    info=mem_info.readline()
    info=info.strip('\n')
    info_list=re.split('\s+',info)
    mem_free2=long(info_list[2])

    #in Linux, free memory is freed+cached memory
    mem_free=mem_free1+mem_free2
    mem_used_percentage=1-float("%.2f" % (float(mem_free)/mem_total))
    if mem_used_percentage < MEM_WARNING:
        print "OK: Total memory %ld kB, Free memory %ld kB, used percentage %.2f" % \
              (mem_total,mem_free,mem_used_percentage)
        sys.exit(0)
    elif mem_used_percentage < MEM_CRITICAL:
        print "WARNING: Total memory %ld kB, Free memory %ld kB, used percentage %.2f" % \
              (mem_total,mem_free,mem_used_percentage)
        sys.exit(STATE_WARNING)
    else:
        print "CRITICAL: Total memory %ld kB, Free memory %ld kB, used percentage %.2f" % \
              (mem_total,mem_free,mem_used_percentage)
        sys.exit(STATE_CRITICAL)
except ValueError:
    print "UNKNOWN"
    sys.exit(STATE_UNKNOWN)


结果如下:


具体的配置如下:

1、把这个脚本放到/usr/lib/nagios/plugins目录下

2、在/etc/nagios3/commands.cfg中添加:

define command{
  command_name check_meminfo
  command_line $USER1$/check_mem.py

3、然后在/etc/nagios3/conf.d/services_nagios2.cfg中添加:

define service{
  host_name localhost
  service_description MemoryDetails
  check_command check_meminfo
  use generic-service
  notification_interval 0
}

4、在监控机上,登录127.0.0.1/nagios3/,便可以看到如图的结果了


参考文章:http://www.cnblogs.com/mchina/archive/2013/02/20/2883404.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值