Nagios alerta por e-mail para AVISO e pager para CRITICAL [duplicado]

7

Eu quero configurar o Nagios para emitir avisos (por exemplo, carregamento moderadamente alto ou uso de disco) via e-mail, mas para itens críticos para alertar por pager.

Agora, notificamos por email e pager simultaneamente para todos os avisos. Minha definição de contato genérico é a seguinte:

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
}

Como posso fazer com que a notificação por e-mail ocorra tanto para os avisos quanto para a crítica, mas a paginação é apenas para crítica?

    
por Will Glass 13.04.2012 / 20:27

3 respostas

9

Você deve conseguir isso definindo diferentes contatos - um somente para notificação de pager, apenas para notificação por e-mail - e atribuindo valores diferentes de 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
}

Se você quiser manter a sobrecarga de definição de host / serviço baixa, você deve agregá-los em um grupo de contatos assim:

define contactgroup{

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

e use o grupo de contatos em vez de contatos individuais.

    
por 13.04.2012 / 20:54
3

Para enviar o alerta de AVISO via e-mail e o alerta CRITICAL via SMS, eu também defini 2 contatos: um para e-mail e outro para SMS. Está funcionando bem, mas abaixo está o que tentei fazer com apenas um contato.

A ideia é reescrever o (service|host)_notification_commands para verificar a macro $SERVICESTATE$ então use o método correspondente.

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

Observe que, quando o serviço está correto, preciso verificar a macro $LASTSERVICESTATE$ para decidir qual método usar.

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                           [email protected]
        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
        }
    
por 20.02.2013 / 10:07
2

Não sei se esta é a melhor opção, mas não me lembro de o Nagios poder fazer a página apenas em uma bandeira especial. O que você pode fazer, no entanto, é duplicar o contato com o nome dele e algo para identificá-lo como sms (nome-sms). Isso causará contatos redundantes. No entanto, se você estiver usando grupos, basta adicionar o contato ao grupo.

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
}
    
por 13.04.2012 / 20:49

Tags