Je tiens à définir des nagios pour émettre des avertissements (par exemple, une utilisation légèrement élevée ou une utilisation de disque) par courrier électronique, mais pour des éléments critiques à alerter par pager.
À l'heure actuelle, nous notifions simultanément par courrier électronique et pager pour tous les avertissements. Ma définition de contact générique 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 le faire pour que la notification par courrier électronique ait lieu pour les avertissements et critiques, mais une pagination pour la critique uniquement?
Vous devriez pouvoir y parvenir en définissant différents contacts - un pour la notification de pager uniquement, une pour la notification par courrier électronique uniquement - et attribuer des valeurs différentes 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
}
Si vous souhaitez conserver la définition d'hôte/service, plus bas, vous devez les regrouper dans un Contactgroup comme ceci:
define contactgroup{
contactgroup_name pager-email
members pager-contact,email-contact
}
et utilisez le groupe de contact au lieu de contacts individuels.
Pour envoyer l'alerte d'avertissement par courrier électronique et l'alerte critique via SMS, j'ai également défini 2 contacts: un pour email et un pour SMS. Cela fonctionne bien mais ci-dessous est ce que j'ai essayé d'accomplir cela avec un seul contact.
L'idée est de ré-écrire le (service|Host)_notification_commands
Pour vérifier le $SERVICESTATE$
Macro puis utilisez 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
Notez que lorsque le service est correct, je dois vérifier le $LASTSERVICESTATE$
Macro pour décider quelle 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 [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
}
Je ne sais pas si c'est la meilleure option, mais je ne me souviens pas de Nagios pouvant être capable de naviguer uniquement sur un drapeau spécial. Ce que vous pouvez faire cependant, c'est dupliquer le contact avec son nom et quelque chose à l'identifier comme SMS (Nom-SMS). Cela causera des contacts redondants. Toutefois, 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
}