Как установить время простоя для любого конкретного хоста nagios на определенное время из командной строки через curl?

Мне нужно установить время простоя по расписанию для конкретного хоста nagios из командной строки с помощью curl .. как мне это сделать?

вот то, что я уже использую для включения / отключения уведомлений службы / хоста из командной строки.

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

Как и в случае с расписанием простоя, проблема в том, что параметр времени простоя принимает больше параметров, например время начала, время окончания, комментарий и т. Д.

Итак, как мне сделать это с помощью curl из командной строки?

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

который будет включать и выключать уведомление службы / хоста из командной строки. Поэтому я хочу использовать curl таким образом, чтобы обеспечить время простоя для конкретного сервера nagios.

Вышеупомянутый сценарий не работает для него, потому что параметр простоя nagios взял больше параметров, и я попытался добавить их в сценарий ... но это не сработало. Нам также нужно указать время начала, время окончания и значение комментария.

Кроме того, я пробовал использовать параметр curl --form и --form-string с этим скриптом ... не смог пройти.

Идея заключается в том, что вместо перехода к веб-интерфейсу Nagios мы хотим сделать это из командной строки (мы добились успеха для службы / службы хоста и уведомлений).

Надеюсь, теперь я абсолютно ясен.

TIA

Бхаскар


person unixbhaskar    schedule 27.07.2011    source источник


Ответы (4)


Я улучшил ответ Андерса, чтобы предоставить полный сценарий и не требовать использования нового curl, который поддерживает --data-urlencode. Это также автоматически вычисляет время окончания для отправки и проверяет, что запрос был успешно отправлен в 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
person Sarel Botha    schedule 08.02.2012
comment
anonymous, спасибо за совет, который позволяет нам убрать зависимость от Perl. - person Sarel Botha; 04.10.2013
comment
Работает с icinga. Просто не забудьте изменить строку подтверждения grep и, конечно же, URL-адрес. - person Dan Garthwaite; 19.03.2015

Вы можете отправить несколько значений полей формы с 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"
person Anders Lindahl    schedule 31.07.2011
comment
Спасибо, Андерс ... позволь мне попробовать и сообщить тебе о результате. - person unixbhaskar; 04.08.2011
comment
Андрес. Где вы нашли опцию data-urlencode? Я не нашел его в руководстве по завитку .. - person unixbhaskar; 31.08.2011
comment
Вы можете мне посоветовать, как я могу обойтись без URL-кодирования? зажги меня. Я специально использую curl 7.15 на RHEL box ... и не очень хочу сейчас обновляться ... - person unixbhaskar; 31.08.2011
comment
Вы можете обойти это, закодировав значения URL-адресом другими способами. Есть много способов сделать это, посмотрите ответы на этот вопрос: stackoverflow.com/questions/296536/urlencode-from-a-bash-script - person Anders Lindahl; 31.08.2011

Я еще больше расширил ответ Сарелса.

  • заставил его работать с нашим Nagios 3.5.1 (изменен cmd_typ, добавлены дочерние параметры, изменен формат даты).
  • сделал HOST и USER аргументом командной строки
  • с использованием $ 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
person Enno Gröper    schedule 09.04.2015

Чтобы это работало на моем Nagios, мне пришлось добавить дополнительную строку в "data host = $ HOST"

--data "com_author = Автомат + Время простоя" \

Без этого мой Nagios не принял бы простоя.

person Stephan Hughson    schedule 30.09.2014