6 votes

Comment définir le temps d'arrêt d'un hôte nagios spécifique pour un certain temps à partir de la ligne de commande via curl ?

J'ai besoin de définir un horaire d'indisponibilité pour un hôte nagios spécifique à partir de la ligne de commande par curl. Comment puis-je le faire ?

Voici quelque chose que j'utilise déjà pour activer/désactiver les notifications de services/hôtes depuis la ligne de commande.

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

Le problème est que l'option de temps d'arrêt prend plus d'options, c'est-à-dire heure de début, heure de fin, commentaire, etc.

Alors comment puis-je le faire par curl depuis la ligne de commande ?

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

qui permet d'activer et de désactiver la notification de service/hôte à partir de la ligne de commande. Je veux donc utiliser curl de cette manière pour fournir des temps d'arrêt pour un serveur nagios spécifique.

Le script ci-dessus ne fonctionne pas pour lui parce que l'option downtime de nagios a pris plus de paramètres et j'ai essayé de les infuser dans le script..mais cela n'a pas fonctionné de cette façon.Nous devons fournir starttime,endtime et la valeur du commentaire aussi.

De plus, j'ai essayé l'option de curl appelée --form et --form-string avec ce script..sans pouvoir passer.

L'idée de base est qu'au lieu d'aller dans l'interface web de Nagios, nous voulons faire cette chose à partir de la ligne de commande (nous avons réussi pour le service/le service hôte et la notification).

J'espère que je suis parfaitement clair maintenant.

TIA

Bhaskar

6voto

Sarel Botha Points 5911

J'ai amélioré la réponse d'Anders pour fournir un script complet et pour ne pas nécessiter l'utilisation d'un curl plus récent qui supporte --data-urlencode. Cela calcule également automatiquement l'heure de fin d'envoi et vérifie que la requête a été soumise avec succès à Nagios. De plus, cela planifie les temps d'arrêt de l'hôte et de tous les services sur l'hôte.

#!/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

3voto

Anders Lindahl Points 17380

Vous pouvez envoyer plusieurs valeurs de champs de formulaire avec curl simplement en ajoutant plus --data(-d) arguments. Ceci devrait planifier l'arrêt du service sur un système 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"

1voto

Enno Gröper Points 550

J'ai renforcé la réponse de Sarel.

  • l'a fait fonctionner avec notre Nagios 3.5.1 (changement de cmd_typ, ajout d'options enfant, changement de format de date).
  • sur HOST y USER une ligne de commande arg
  • en utilisant $USER (utilisateur actuel) comme valeur par défaut
  • ajout d'une demande de mot de passe (pas de mot de passe codé en dur)
  • ajout d'un auteur au message de nagios

Ma version :

#!/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

0voto

Pour que cela fonctionne sur mon Nagios, j'ai dû ajouter une ligne supplémentaire sous "data host=$HOST".

--data "com_author=Automatic+Downtime" \

Sans cela, mon Nagios n'accepterait pas le temps d'arrêt.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X