【问题标题】:How to integrate my python plugin with nagios如何将我的 python 插件与 nagios 集成
【发布时间】:2023-03-11 14:00:01
【问题描述】:

我编写了一个 python 脚本,它访问我的应用程序的 URL,该应用程序位于 HAPROXY 后面并返回应用程序的版本。

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

感谢任何帮助。

谢谢, Ankit

【问题讨论】:

    标签: python linux ubuntu-14.04 haproxy nagios


    【解决方案1】:

    已编辑以解决 cmets

    要将 python 脚本用作自定义 Nagios 插件,您的脚本只需遵循 Nagios Plugin API。 重要的是,您的脚本以正确的返回码退出它所报告的状态——这意味着如果检查报告一切正常,则您的 python 脚本需要以 return code 0 退出/强>。 使用 返回码 2 退出以指示 CRITICAL 状态。 您还应该格式化脚本的输出以符合Plugin Output Spec

    下面是一个例子。请注意,这仅用于示例目的,可能不会适用于您的网站,除非您的网站恰好与 stackoverflow.com 具有相同的 div id ;) (更新为包含可配置的 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$"
    }
    

    如果脚本中没有错误,您的脚本具有“执行”权限,并且配置中没有错误,您应该能够对您的主要 Nagios 配置文件运行验证检查:

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

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

    service nagios restart
    

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

    【讨论】:

    • 我的 python 脚本和你的一样,但是它以 url 作为输入,因为我需要根据 url 检查 HAPROXY 后面不同实例上不同应用程序的状态(例如abc-prod.mydomain.com/APP/aboutme) .脚本返回应用程序版本信息。实例位于 VPC (AWS) 中,HAPROXY 是来自外部的唯一途径,因此我无法使用实例的直接 IP 从 nagios 服务器进行监控。所以我需要 nagios: 1. 将 URL 作为参数提供给我的 python 脚本。 2、在nagios的dashboard上显示版本信息。
    • 编辑示例脚本以包含 url 参数。
    • 完美解释,它按我的意愿工作!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    相关资源
    最近更新 更多