如何将我的 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" 服务的服务详细信息时,您的站点版本应该是可见的。
我编写了一个 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" 服务的服务详细信息时,您的站点版本应该是可见的。