1

我正在尝试在 Nagios 核心 4.x 中安排和取消停机时间。

我可以使用以下 cmd 为主机安排停机时间:

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 不返回生成的停机 id,而只是返回一个 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_NAME 171上提到的以下外部命令

但这在 Nagios 上不起作用并给出消息“对不起,但您无权提交指定的命令。”。

我现在被卡住了,无法前进。有谁知道如何实现这一点?

4

2 回答 2

3

由于很长一段时间我没有得到我的查询的答案,所以我发布了我是如何解决它的。

我在 nagios 客户论坛上问了同样的问题并得到了答复。JSON 查询生成器对于这类事情非常方便(其中 xxxx 是您的核心安装):

xxxx/nagios/jsonquery.html

JSON查询生成器简介:

labs.nagios.com/2014/06/19/expl ... -7-part-1/

如果您想检查主机 yyyy 是否已安排停机时间,您可以尝试以下查询(其中 xxxx 是您的核心安装):

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

如果没有安排停机时间,则 downtimelist 将为空,否则它将包含主机 yyyy 的每个计划停机时间的停机时间 ID

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

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

于 2016-08-30T06:40:25.087 回答
2

我已使用以下命令在我的 Centos 服务器上成功删除/取消了从 251 到 348 的“停机时间 ID”:

for i in `seq 251 348`; do /bin/printf "[%lu] DEL_SVC_DOWNTIME;$i\n" `date +%s` > /var/spool/nagios/cmd/nagios.cmd; done
于 2018-04-19T20:08:46.830 回答