6

我需要通过 curl 从命令行为特定的 nagios 主机设置计划停机时间。我该怎么做?

这是我已经用于从命令行启用/禁用服务/主机通知的东西。

curl -d "some input here" url "user:pass" 

就像我需要安排停机时间一样。现在的问题是停机时间选项需要更多选项,即开始时间、结束时间、评论等。

那么如何从命令行通过 curl 完成它呢?

curl -d " some key value pair(hostname,servicename" url "username:passowrd"

这将从命令行打开和关闭服务/主机通知。所以我想以这种方式使用 curl 来为特定的 nagios 服务器提供停机时间。

上面的脚本不起作用,因为 nagios 的停机时间选项需要更多参数,我试图在脚本中注入这些参数..但没有成功。我们也需要提供开始时间、结束时间和注释值。

另外,我已经使用该脚本尝试了名为 --form 和 --form-string 的 curl 选项..无法通过。

最基本的想法是,我们想从命令行完成这件事,而不是去 Nagios Web 界面(我们已经成功完成了服务/主机服务和通知)。

希望我现在完全清楚。

TIA

巴斯卡尔

4

4 回答 4

6

我增强了 Anders answer 以提供完整的脚本,并且不需要使用支持 --data-urlencode 的较新 curl。这还会自动计算发送的结束时间并检查请求是否已成功提交给 Nagios。此外,这会为主机和主机上的所有服务安排停机时间。

#!/bin/bash

function die {
  echo $1;
  exit 1;
}

echo Scheduling downtime on nagios

HOST=monitoredhost
NAGURL=https://nagios.example.com/cgi-bin/nagios3/cmd.cgi
USER=nagiosuser
PASS=nagiospassword
MINUTES=10

export MINUTES

# The following is urlencoded already
STARTDATE=`date "+%Y-%m-%d+%H%%3A%M%%3A%S"`
# This gives us the date/time X minutes from now
ENDDATE=`date "+%Y-%m-%d+%H%%3A%M%%3A%S" -d "$MINUTES min"`
curl --silent --show-error \
    --data cmd_typ=86 \
    --data cmd_mod=2 \
    --data host=$HOST \
    --data "com_data=Updating+application" \
    --data trigger=0 \
    --data "start_time=$STARTDATE" \
    --data "end_time=$ENDDATE" \
    --data fixed=1 \
    --data hours=2 \
    --data minutes=0 \
    --data btnSubmit=Commit \
    --insecure \
    $NAGURL -u "$USER:$PASS" | grep -q "Your command request was successfully submitted to Nagios for processing." || die "Failed to contact nagios";

echo Scheduled downtime on nagios
于 2012-02-08T17:13:58.997 回答
3

curl您只需添加更多--data(-d)参数即可发送多个表单字段值。这应该安排 Nagios 系统上的服务停机时间:

curl \
    --data cmd_typ=56 \
    --data cmd_mod=2 \
    --data host=$HOSTNAME \
    --data-urlencode "service=${SERVICENAME}" \
    --data-urlencode "com_data=${COMMENT}" \
    --data trigger=0 \
    --data-urlencode "start_time=2011-07-31 00:00:00" \
    --data-urlencode "end_time=2011-07-31 01:00:00" \
    --data fixed=1 \
    --data hours=2 \
    --data minutes=0 \
    --data btnSubmit=Commit \
    $NAGIOS-URL "username:password"
于 2011-07-31T10:16:22.780 回答
1

我进一步增强了 Sarels 的回答。

  • 使它与我们的 Nagios 3.5.1 一起工作(更改了 cmd_typ,添加了子选项,更改了日期格式)。
  • madeHOSTUSER命令行 arg
  • 默认使用 $USER(当前用户)
  • 添加密码提示(无硬编码密码)
  • 将作者添加到 nagios 消息

我的版本:

#!/bin/bash

# Bash script to schedule downtime for Host
# source: http://stackoverflow.com/a/9198181
# Author: Sarel Botha http://stackoverflow.com/users/35264/

function die {
  echo $1;
  exit 1;
}

if [ $# -lt 1 ]; then
  echo "$0 <host> [<user>]"
  exit 0;
elif [ $# -ge 2 ]; then
  USER=$2
fi

HOST=$1
NAGURL=https://nagios.example.com/nagios3/cgi-bin/cmd.cgi
MINUTES=30

echo Scheduling downtime on nagios for $HOST

export MINUTES

# read password
read -s  -p "Password for $USER:" PASS
echo ""  # newline after prompt

# The following is urlencoded already
STARTDATE=`date "+%d-%m-%Y+%H%%3A%M%%3A%S"`
# This gives us the date/time X minutes from now
ENDDATE=`date "+%d-%m-%Y+%H%%3A%M%%3A%S" -d "$MINUTES min"`
curl --silent --show-error \
    --data cmd_typ=55 \
    --data cmd_mod=2 \
    --data host=$HOST \
    --data "com_author=$USER" \
    --data "com_data=reboot+due+to+security+updates" \
    --data trigger=0 \
    --data "start_time=$STARTDATE" \
    --data "end_time=$ENDDATE" \
    --data fixed=1 \
    --data hours=2 \
    --data minutes=0 \
    --data childoptions=0 \
    --data btnSubmit=Commit \
    --insecure \
    $NAGURL -u "$USER:$PASS" | grep -q "Your command request was successfully submitted to Nagios for processing." || die "Failed to contact nagios";

echo Scheduled downtime on nagios
于 2015-04-09T07:02:26.610 回答
0

为了在我的 Nagios 上工作,我必须在“data host=$HOST”下添加一个额外的行

--data "com_author=自动+停机时间" \

没有它,我的 Nagios 不会接受停机时间。

于 2014-09-30T11:07:17.930 回答