9 votes

Alerte Nagios par email pour WARNING et pager pour CRITICAL

Je veux configurer Nagios pour qu'il émette des avertissements (par exemple, une charge ou une utilisation du disque légèrement élevée) par e-mail, mais pour que les éléments critiques soient alertés par pager.

À l'heure actuelle, nous envoyons des notifications par courriel et par téléavertisseur simultanément pour toutes les alertes. Ma définition générique du contact est la suivante :

define contact{
    name                            generic-contact
    service_notification_options    w,u,c,r,f,s
    host_notification_options       d,u,r,f,s
    service_notification_commands   notify-service-by-email,notify-service-by-pager
    host_notification_commands      notify-host-by-email,notify-host-by-pager
    register                        0

    service_notification_period     24x7
    host_notification_period        24x7
}

Comment puis-je faire en sorte que la notification par courriel se produise à la fois pour les avertissements et les critiques, mais que la pagination ne concerne que les critiques ?

0 votes

La question n'est pas exactement la même, mais la réponse est également la bonne pour cette question - vous devez établir plusieurs contacts pour la même personne, puis affecter ces contacts en fonction de la manière dont vous souhaitez recevoir des notifications.

11voto

the-wabbit Points 40039

Vous devriez pouvoir y parvenir en définissant différents contacts - l'un pour la notification par téléavertisseur uniquement, l'autre pour la notification par courrier électronique uniquement - et en attribuant des valeurs différentes aux paramètres suivants host/service_notification_options :

define contact{
    name                            email-contact
    service_notification_options    w,u,c,r,f,s
    host_notification_options       d,u,r,f,s
    service_notification_commands   notify-service-by-email
    host_notification_commands      notify-host-by-email
    register                        0

    service_notification_period     24x7
    host_notification_period        24x7
}

define contact{
    name                            pager-contact
    service_notification_options    c,r
    host_notification_options       d,u,r
    service_notification_commands   notify-service-by-pager
    host_notification_commands      notify-host-by-pager
    register                        0

    service_notification_period     24x7
    host_notification_period        24x7
}

Si vous souhaitez limiter les frais de définition des hôtes et des services, vous devriez les regrouper dans un fichier groupe de contact comme ça :

define contactgroup{

    contactgroup_name       pager-email
    members         pager-contact,email-contact
}

et utiliser le groupe de contacts au lieu des contacts individuels.

0 votes

Mieux encore, belle solution +1

0 votes

Ne fonctionne pas, j'obtiens l'erreur - Error: Could not find any contact matching 'pager-contact-crit' (config file '/usr/local/nagios/etc/objects/contacts.cfg', starting on line 63) Error: Failed to expand contacts for contactgroup 'admins' (config file '/usr/local/nagios/etc/objects/contacts.cfg', starting at line 63)

0 votes

Le "r" signifie-t-il qu'une notification sera envoyée à tout le monde en cas de guérison, quel que soit l'état de la personne ?

4voto

quanta Points 49664

Pour envoyer l'alerte WARNING par email et l'alerte CRITICAL par SMS, j'ai également défini 2 contacts : un pour l'email et un pour le SMS. Cela fonctionne bien mais voici ce que j'ai essayé de faire avec un seul contact.

L'idée est de réécrire le (service|host)_notification_commands pour vérifier le $SERVICESTATE$ macro puis utiliser la méthode correspondante.

command.cfg

define command{
    command_name    notify-service
    command_line    $USER1$/notify.sh $SERVICESTATE$ $LASTSERVICESTATE$ $NOTIFICATIONTYPE$ $SERVICEDESC$ $HOSTALIAS$ $HOSTADDRESS$ "$LONGDATETIME$" "$SERVICEOUTPUT$" "$SERVICENOTESURL$" $CONTACTEMAIL$ $CONTACTPAGER$ $TIME$
    }

notify.sh

#!/bin/bash

SERVICESTATE=$1
LASTSERVICESTATE=$2
NOTIFICATIONTYPE=$3
SERVICEDESC=$4
HOSTALIAS=$5
HOSTADDRESS=$6
LONGDATETIME=$7
SERVICEOUTPUT=$8
SERVICENOTESURL=$9
CONTACTEMAIL=${10}
CONTACTPAGER=${11}
TIME=${12}

send_email() {
    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE\n\nService: $SERVICEDESC\nHost: $HOSTALIAS\nAddress: $HOSTADDRESS\nState: $SERVICESTATE\n\nDate/Time: $LONGDATETIME\n\nAdditional Info: $SERVICEOUTPUT\n\nURL: $SERVICENOTESURL" | /bin/mail -s "** $NOTIFICATIONTYPE Service Alert: $HOSTALIAS/$SERVICEDESC is $SERVICESTATE **" $CONTACTEMAIL
}

send_sms() {
    /usr/bin/wget --user=notifier --password=x "http://ip:port/smsgate/sms?tos=$CONTACTPAGER&content=$NOTIFICATIONTYPE, $SERVICEDESC, $HOSTADDRESS, $SERVICESTATE, $TIME, $SERVICEOUTPUT"

}

if [ $NOTIFICATIONTYPE = "PROBLEM" ]; then
    if [ $SERVICESTATE = "WARNING" ]; then
        send_email
    elif [ $SERVICESTATE = "CRITICAL" ]; then
        send_email
        send_sms
    fi
elif [ $NOTIFICATIONTYPE = "RECOVERY" ]; then
    if [ $LASTSERVICESTATE = "WARNING" ]; then
        send_email
    elif [ $LASTSERVICESTATE = "CRITICAL" ]; then
        send_email
        send_sms
    fi
fi

Remarquez que lorsque le service est OK, je dois vérifier le paramètre $LASTSERVICESTATE$ pour décider de la méthode à utiliser.

contacts.cfg

define contact{
        contact_name                    quanta
        use                             single-contact
        alias                           Quan Tong Anh
        service_notifications_enabled   1
        host_notifications_enabled      1
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    c,w,r
        host_notification_options       d,u,r
        email                           quanta@domain.com
        pager                           0912345678
        }

templates.cfg

define contact{
        name                            single-contact
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r,f,s
        host_notification_options       d,u,r,f,s
        service_notification_commands   notify-service
        host_notification_commands      notify-host
        register                        0
        }

2voto

Lucas Kauffman Points 16740

Je ne sais pas si c'est la meilleure option, mais je n'ai pas souvenir que Nagios puisse mettre en page uniquement sur un drapeau spécial. Ce que vous pouvez faire cependant est de dupliquer le contact avec son nom et quelque chose pour l'identifier comme sms (nom-sms). Cela entraînera des contacts redondants. Cependant, si vous utilisez des groupes, vous pouvez simplement ajouter le contact au groupe.

define contact{
    name                            generic-contact-sms
    service_notification_options    c
    host_notification_options       d,u,r,f,s
    service_notification_commands   notify-service-by-pager
    host_notification_commands      notify-host-by-pager
    register                        0

    service_notification_period     24x7
    host_notification_period        24x7
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X