Как установить время простоя для любого конкретного хоста nagios на определенное время от командной строки до curl? - PullRequest
5 голосов
/ 27 июля 2011

Мне нужно установить время простоя расписания для конкретного хоста 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 мы хотим сделать это из командной строки (мы преуспели для службы / службы хоста и уведомления).

Надеюсь, теперь мне все ясно.

ТИА

Bhaskar

Ответы [ 4 ]

6 голосов
/ 08 февраля 2012

Я улучшил ответ Андерса, чтобы предоставить полный сценарий и не требовать использования более нового 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
2 голосов
/ 31 июля 2011

Вы можете отправить несколько значений полей формы с помощью 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"
1 голос
/ 09 апреля 2015

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

  • заставил работать с нашим Nagios 3.5.1 (изменен cmd_typ, добавлены дочерние опции, изменен формат даты).
  • сделал HOST и USER командную строку 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
0 голосов
/ 30 сентября 2014

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

- данные "com_author = Automatic + Downtime" \

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

...