我编写了一个python脚本,它打到了我的应用程序的URL,这是HAPROXY的后面并返回应用程序的版本。
我想将此脚本/插件与我的nagios服务器集成,并在nagios上显示版本信息。它将解决两个目的,它将检查可用性并显示版本信息。
感谢任何帮助。
谢谢, ANKIT
答案 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;的服务主机。