如何将我的 python 插件与 nagios 集成

How to integrate my python plugin with nagios

我编写了一个 python 脚本,它命中 url 我的应用程序,该应用程序位于 HAPROXY 和 returns 应用程序版本之后。

我想把这个script/plugin与我的nagios服务器集成,并在nagios上显示版本信息。它将解决两个目的,即检查可用性并显示版本信息。

感谢任何帮助。

谢谢, 安琪

编辑以解决评论

要将 python 脚本用作自定义 Nagios 插件,您的脚本只需要遵循 Nagios Plugin API。 重要的是您的脚本退出时使用正确的 return 代码来报告状态——这意味着您的 python 脚本需要使用 return 代码 0[=55 退出=] 如果检查报告一切正常 OK。 以 return 代码 2 退出以指示 CRITICAL 状态。 您还应该格式化脚本的输出以符合 Plugin Output Spec

下面是一个例子。请注意,这仅用于 EXAMPLE 目的,可能 不会 适用于您的网站,除非您的网站恰好具有相同的 div id as whosebug.com ;) (已更新以包含可配置的 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 and finally schedule its execution by defining a Nagios Service

使用示例配置编辑

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

/usr/local/nagios/etc/nagios.cfg

define host{
    host_name           Whosebug
    alias               Whosebug
    address             whosebug.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       Whosebug
    service_description check_version
    check_command       check_version!http://whosebug.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$"
}

如果脚本没有错误,你的脚本有 "execute" 权限,并且配置没有错误,你应该可以 运行 在你的主 Nagios 上进行验证检查配置文件:

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

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

service nagios restart

当您查看 "Whosebug" 主机的 "check_version" 服务的服务详细信息时,您的站点版本应该是可见的。