在 Nagios 中自动安排和取消停机时间
Automate schedule and Cancel downtime in Nagios
我正在尝试在 Nagios 核心 4.x 中安排和取消停机时间 4.x。
我可以使用以下命令为主机安排停机时间:
curl --silent --show-error --data cmd_typ=55 --data cmd_mod=2 --data host=automichost1 --data "com_data=Updating+application" --data trigger=0 --data "start_time=05-15-2016 19:00:00" --data "end_time=05-15-2016 19:15:00" --data fixed=1 --data btnSubmit=Commit --insecure http://localhost:80/nagios/cgi-bin/cmd.cgi -u "nagiosadmin:XXXXXX"
此 cmd 不会 return 生成 停机 ID ,只是 return 一个 html 文件。
但要取消计划停机时间,我需要使用以下内容
curl --silent --show-error --data cmd_typ=78 --data cmd_mod=2 --data down_id=2 --data "com_data=Updating+application" --data btnSubmit=Commit --insecure http://localhost:80/nagios/cgi-bin/cmd.cgi -u "nagiosadmin:xxxxxxx"
这里我需要down_id取消停机时间。在自动化脚本中,无法从任何 nagios 外部命令获取此停机时间 ID。我还尝试了 http://docs.icinga.org/latest/en/cgiparams.html 中提到的以下外部命令
CMD_DEL_DOWNTIME_BY_HOST_NAME171
但这不适用于 Nagios 并给出消息 "Sorry, but you are not authorized to commit the specified command."。
我现在卡住了,无法前进。有谁知道如何实现这个?
由于很长一段时间我都没有得到我的查询的答案,所以我发布了我是如何解决它的。
我在nagios客户论坛上问了同样的问题,得到了回复。 JSON 查询生成器对于这类事情非常方便(其中 x.x.x.x 是您的核心安装):
x.x.x.x/nagios/jsonquery.html
JSON 查询生成器的简要介绍:
labs.nagios.com/2014/06/19/expl ...-7-part-1/
如果您想检查主机 y.y.y.y 是否已计划停机,您可以尝试以下查询(其中 x.x.x.x 是您的核心安装):
如果没有计划的停机时间,停机时间列表将为空,否则它将包含主机 y.y.y.y 的每个计划停机时间的停机时间 ID。
此外,如果您想要图形响应,请从您的脚本中删除 json 运行:
我已经在我的 Centos 服务器上使用以下命令成功 deleted/canceled "downtime id" 从 251 到 348:
for i in `seq 251 348`; do /bin/printf "[%lu] DEL_SVC_DOWNTIME;$i\n" `date +%s` > /var/spool/nagios/cmd/nagios.cmd; done
我正在尝试在 Nagios 核心 4.x 中安排和取消停机时间 4.x。
我可以使用以下命令为主机安排停机时间:
curl --silent --show-error --data cmd_typ=55 --data cmd_mod=2 --data host=automichost1 --data "com_data=Updating+application" --data trigger=0 --data "start_time=05-15-2016 19:00:00" --data "end_time=05-15-2016 19:15:00" --data fixed=1 --data btnSubmit=Commit --insecure http://localhost:80/nagios/cgi-bin/cmd.cgi -u "nagiosadmin:XXXXXX"
此 cmd 不会 return 生成 停机 ID ,只是 return 一个 html 文件。
但要取消计划停机时间,我需要使用以下内容
curl --silent --show-error --data cmd_typ=78 --data cmd_mod=2 --data down_id=2 --data "com_data=Updating+application" --data btnSubmit=Commit --insecure http://localhost:80/nagios/cgi-bin/cmd.cgi -u "nagiosadmin:xxxxxxx"
这里我需要down_id取消停机时间。在自动化脚本中,无法从任何 nagios 外部命令获取此停机时间 ID。我还尝试了 http://docs.icinga.org/latest/en/cgiparams.html 中提到的以下外部命令 CMD_DEL_DOWNTIME_BY_HOST_NAME171
但这不适用于 Nagios 并给出消息 "Sorry, but you are not authorized to commit the specified command."。
我现在卡住了,无法前进。有谁知道如何实现这个?
由于很长一段时间我都没有得到我的查询的答案,所以我发布了我是如何解决它的。
我在nagios客户论坛上问了同样的问题,得到了回复。 JSON 查询生成器对于这类事情非常方便(其中 x.x.x.x 是您的核心安装):
x.x.x.x/nagios/jsonquery.html
JSON 查询生成器的简要介绍:
labs.nagios.com/2014/06/19/expl ...-7-part-1/
如果您想检查主机 y.y.y.y 是否已计划停机,您可以尝试以下查询(其中 x.x.x.x 是您的核心安装):
如果没有计划的停机时间,停机时间列表将为空,否则它将包含主机 y.y.y.y 的每个计划停机时间的停机时间 ID。
此外,如果您想要图形响应,请从您的脚本中删除 json 运行:
我已经在我的 Centos 服务器上使用以下命令成功 deleted/canceled "downtime id" 从 251 到 348:
for i in `seq 251 348`; do /bin/printf "[%lu] DEL_SVC_DOWNTIME;$i\n" `date +%s` > /var/spool/nagios/cmd/nagios.cmd; done