【发布时间】:2023-03-11 14:00:01
【问题描述】:
我编写了一个 python 脚本,它访问我的应用程序的 URL,该应用程序位于 HAPROXY 后面并返回应用程序的版本。
我想将此脚本/插件与我的 nagios 服务器集成并在 nagios 上显示版本信息。它将解决两个目的,即检查可用性并显示版本信息。
感谢任何帮助。
谢谢, Ankit
【问题讨论】:
标签: python linux ubuntu-14.04 haproxy nagios
我编写了一个 python 脚本,它访问我的应用程序的 URL,该应用程序位于 HAPROXY 后面并返回应用程序的版本。
我想将此脚本/插件与我的 nagios 服务器集成并在 nagios 上显示版本信息。它将解决两个目的,即检查可用性并显示版本信息。
感谢任何帮助。
谢谢, Ankit
【问题讨论】:
标签: python linux ubuntu-14.04 haproxy nagios
已编辑以解决 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”服务的服务详细信息时,您的站点版本应该是可见的。
【讨论】: