在 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 是您的核心安装):

http://x.x.x.x/nagios/cgi-bin/statusjson.cgi?query=downtimelist&formatoptions=whitespace&hostname=y.y.y.y&downtimeobjecttypes=host&downtimetimefield=starttime

如果没有计划的停机时间,停机时间列表将为空,否则它将包含主机 y.y.y.y 的每个计划停机时间的停机时间 ID。

此外,如果您想要图形响应,请从您的脚本中删除 json 运行:

http://x.x.x.x/nagios/cgi-bin/status.cgi?query=downtimelist&formatoptions=whitespace&hostname=y.y.y.y&downtimeobjecttypes=host&downtimetimefield=starttime

我已经在我的 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