如何将我的python插件与nagios

时间:2015-07-31 09:59:20

标签: python linux ubuntu-14.04 haproxy nagios

我编写了一个python脚本,它打到了我的应用程序的URL,这是HAPROXY的后面并返回应用程序的版本。

我想将此脚本/插件与我的nagios服务器集成,并在nagios上显示版本信息。它将解决两个目的,它将检查可用性并显示版本信息。

感谢任何帮助。

谢谢, ANKIT

1 个答案:

答案 0 :(得分:1)

已编辑以发表评论

要将python脚本用作自定义Nagios插件,您的脚本只需要遵循Nagios Plugin API。 重要的是,您的脚本退出时会返回正确的报告状态 - 如果检查报告所有内容都是<,则表示您的python脚本需要以返回代码0 退出强>确定。 退出返回代码2 以指示 CRITICAL 状态。 您还应该格式化脚本的输出以符合Plugin Output Spec

以下是一个例子。请注意,这仅适用于示例目的,并且可能不会适用于您的网站,除非您的网站恰好具有与stackoverflow.com相同的div ID;)< em>(已更新,包含可配置的URL参数。)

<强> check_version.py

#!/usr/bin/env python
import re, sys, subprocess, shlex
from bs4 import BeautifulSoup
from optparse import OptionParser

def main():
    usage = "usage: %prog [options]"
    parser = OptionParser(usage)
    parser.add_option("-u", "--url",
                      action="store", dest="url",
                      help="URL of host to check version number of.")
    (options, args) = parser.parse_args()
    # Make warning and critical command line arguments mandatory.
    if options.url is None:
        print "Incorrect usage. URL is mandatory."
        parser.print_help()
        sys.exit(3)
    try:
        url = options.url
        curl_command = '/usr/bin/curl {url}'.format(url=url)
        args = shlex.split(curl_command)
        curl = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
        (html_doc, err) = curl.communicate()
        if err:
            print "CRITICAL - ERROR connecting to url: %s | 'rev'='NA';;;;" % (str(err))
            sys.exit(2)
        soup = BeautifulSoup(html_doc, 'html.parser')
        soup_svnrev = soup.find(id='svnrev')
        if soup_svnrev is None:
            print "CRITICAL - ERROR - Revision number could not be found on site! | 'rev'='NA';;;;"
            sys.exit(2)
        svnrev = soup_svnrev.get_text().strip()
        rev_num = svnrev.split()[1]
        print "OK. revision number = {rev_num} | 'rev_num'={rev_num};;;;".format(rev_num=rev_num)
        sys.exit(0)
    except Exception, e:
        print "CRITICAL - Unexpected error: %s | 'rev'='NA';;;;" % (str(e))
        sys.exit(2)

if __name__ == '__main__':
    main()

使用有效的Nagios插件脚本,您只需将其添加为Nagios Command,最后通过为其定义Nagios Service来安排执行。

使用示例配置进行编辑

当然,您需要使用Nagios执行检查所需的一切来配置Nagios。 这意味着至少您需要在Nagios安装知道的某些Nagios配置文件中定义主机,服务,命令定义。 每个Nagios安装可能会有所不同,所以我在这里使用/usr/local/nagios/etc/nagios.cfg作为 示例 ,添加以下内容:

<强> /usr/local/nagios/etc/nagios.cfg

define host{
    host_name           stackoverflow
    alias               stackoverflow
    address             stackoverflow.com
    check_command           check-host-alive
    check_interval          5
    retry_interval          1
    max_check_attempts      5
    check_period            24x7
    process_perf_data       0
    retain_nonstatus_information    0
    contacts            nagiosadmin
    notification_interval       30
    notification_period     24x7
    notification_options        d,u,r
}

define service{
    host_name       stackoverflow
    service_description check_version
    check_command       check_version!http://stackoverflow.com
    max_check_attempts  5
    check_interval  5
    retry_interval  3
    check_period        24x7
    notification_interval   30
    notification_period 24x7
    notification_options    w,c,r
    contacts        nagiosadmin
}

define command{
    command_name    check_version
    command_line    /path/to/check_version.py -u "$ARG1$"
}

如果脚本中没有错误,您的脚本会执行&#34;执行&#34;权限,配置中没有错误,您应该能够对主Nagios配置文件运行验证检查:

nagios -v /usr/local/nagios/etc/nagios.cfg

重新启动Nagios服务器以重新加载配置:

service nagios restart

当您查看&#34; check_version&#34;的服务详情时,您的网站版本应该是可见的。 &#34; stackoverflow&#34;的服务主机。