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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章