| Scroll Ignore | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||
|
Contexte
Afin de pouvoir recevoir des notifications, la source cfg-file-shinken comprend un certain nombre de méthodes de notifications qu'il faudra importer et appliquer sur les utilisateurs à notifier.
- Les méthodes de notifications livrées sont généralistes et ne permettent pas de répondre à tous les besoins.
- Si vous devez modifier un élément ( méthode de notification ou commande ) livré par un pack Shinken pour un besoin spécifique,
- il est important de créer la vôtre,
- car à la prochaine mise à jour de shinken vous proposera de remplacer vos modifications.
Cette page apporte des conseils sur l'utilisation optimale des packs livrés par Shinken.
Cohabiter avec un pack livré Shinken
Pourquoi ne faut-il pas modifier les éléments livrés dans le pack ?
Des différences vous seront proposées après la mise à jour et l'import de la source "cfg-file-shinken", il vous sera donc imposé de faire un choix entre ce que vous avez modifié et les modifications apportées par les mises à jour Shinken.
Création/Copie d'une méthode de notification
Dupliquer l'élément ( méthode de notification ) avec l'action "Cloner" de la liste ( voir la page Actions de masse ( Shinken admin ) ).
Nous vous conseillons de cloner une des méthodes de notifications existantes :
- email ( voir la page email - Méthode de notification )
- email-with-images ( voir la page email-with-images - Méthode de notification )
Ces méthodes utilisent deux commandes de notifications livrées dans le pack shinken,
- il faudra les remplacer par deux nouvelles commandes ( voir la page Créer des commandes de notification spécifique - bonnes pratiques )
Si vous voulez une totale indépendance, vous pouvez aussi cloner le script de notification utilisé ( qui sera différent en fonction du type de notification ).
- Ce n'est pas obligatoire, car nous prenons grand soin à maintenir une compatibilité ascendante,
- mais cela vous donnera une certitude de n'avoir aucun changement lorsque nous faisons évoluer ce script,
- et vous pourrez y apporter vos modifications si besoin, sans risque que nous les écrasions.
- ci-dessous, remplacez :
- TYPE_DE_NOTIFICATION par le type de notification ( EMAIL, SMS, ... )
- SCRIPT_DE_NOTIFICATION par le nom du script de notification ( notify_by_email.py, ... )
- MY_NAME_SCRIPT_DE_NOTIFICATION par le nom de votre script de notification.
- ci-dessous, remplacez :
| Code Block | ||||
|---|---|---|---|---|
| ||||
mkdir /var/lib/shinken-user/libexec/notifications/TYPE_DE_NOTIFICATION
cd /var/lib/shinken-user/libexec/notifications/TYPE_DE_NOTIFICATION
cp |
Contexte
http://doc.shinken-solutions.com/pages/viewpage.action?pageId=283743514Lorsque des objets supervisés changent d'état, et qu'ils sont paramétrés pour réagir à ce changement, alors le daemon Reactionner permet d’exécuter une réaction.
Une réaction est une commande qui est paramétrée dans Shinken.
La réaction peut être :
- une commande de notification
- une commande du gestionnaire d'évènements
Dans cette page, nous allons nous intéresser aux commandes de notification, et comment les personnaliser.
| Info | ||
|---|---|---|
| ||
| Avant de commencer à lire cette page, il est important de comprendre que la commande de notification peut utiliser n'importes quels scripts placés sur votre Reactionner. Donc, potentiellement, la commande peut vous alerter de manière traditionnelle, en vous envoyant un email via une commande "mail", mais pourquoi pas en envoyant un message instantané via votre serveur Jabber, ou encore en faisant clignoter une LED branchée sur votre Raspberry! |
| Panel | |
|---|---|
|
Création d'une commande de notification
Objets à configurer
Le principal objet à configurer est la Commande qui lancera la notification personnalisée.
Elle doit être lancée avec les bons paramètres afin de pouvoir générer une notification détaillée et lisible.
Il faudra ensuite s'assurer de l'utiliser dans une Méthode de notification. Lorsqu'elle sera lancée, elle pourra accéder aux donnés de l'hôte ou du service à l'origine de la notification.
Corps de la commande
Les commandes sont exécutées par le Reactionner lorsque les conditions réunies par la Logique de notification sont réunies.
Elles ont accès spécifiquement à un certain nombre de notations de remplacement dynamique de contenu (VARIABLE).
Ces données dynamiques peuvent venir de différents endroits :
- Une donnée globale
- L'élément à l'origine de la notification.
- Le contact à notifier
- La notification en elle-même, notamment son type.
Toutes les Variables disponibles sur l'élément à l'origine de la notification et le contact à notifier sont disponibles pour la notification.
Notations globales
Ces notations de remplacement dynamique de contenu permettent de paramétrer globalement le comportement des notifications.
Toutes les notations globales peuvent être utilisées indifféremment dans une commande de notifications, mais les notations suivantes leurs sont spécifiques :
$MAILURL$
$SENDER$
$NOTIFPLUGINDIR$
/etc/shinken/resource.d/email.cfg
| Info | ||
|---|---|---|
| ||
Ces trois notations spécifiques sont mises à des valeurs par défaut que vous pouvez retrouver dans le fichier du répertoire resource.d : /etc/shinken/resource.d/email.cfg |
Notations liées à l'élément
Les notations de remplacement dynamique de contenu de l'élément peuvent être appelées dans la notification.
Dans le cas d'une notification d'un host, les notations du host sont disponibles.
Dans le cas d'une notification d'un check, les notations du host et du check sont toutes les deux disponibles.
De la même façon que les notations globales, toutes les notations des éléments peuvent être utilisées, mais les notations suivantes sont spécifiquement utiles :
Hôte : HOSTUUID
Service : HOSTUUID-SERVICEUUID
Service : OK, WARNING, CRITICAL, ou UNKONWN
0 : OK
1 : WARNING
2 : CRITICAL
3 : UNKNOWN
Notations liées au contact
Les notations du contact pouvant être appelées dans la notification.
$CONTACTADDRESS1$,
[ ... ]
$CONTACTADDRESS6$
Notations de notification
Des notations spéciales permettent d'avoir des données concernant la notification en elle-même et la raison pour laquelle elle a été envoyée.
Pour le cas d'un acknowledge, la personne à l'origine de l'acknowledge.
Pour les types de notifications, la liste des valeurs possibles est la suivante :
Le status de l'élément est non-OK.
L'élément avait un problème, mais est de nouveau dans un status OK.
Un utilisateur a envoyé par l'interface web un accusé de réception par rapport à un problème survenu à un hôte ou à un check.
L'élément est entré ou sorti d'un contexte de FLAPPING.
La détection a été désactivée pendant la durée du FLAPPING.
L'élément est entré ou sorti d'une période programmée d'indisponibilité.
La période programmée d'indisponibilité de l'élément a été annulée en cours.
Exemple de personnalisation d'une commande de notification
Nous allons ici vous présenter un exemple de personnalisation de la commande de notification par défaut de Shinken.
Le but ici est de modifier la commande afin que la notification par email utilise un serveur SMTP de votre choix. En effet, par défaut, la commande utilise comme relais SMTP le processus Postfix du serveur qui héberge le daemon Réactionner (serveur localhost).
Méthode de notification "email"
La méthode de notification incluse par défaut dans Shinken est "email". Cette méthode est d'ailleurs protégée contre le renommage et la suppression.
Cette méthode de notification utilise les commandes notify-host-by-email et notify-service-by-email.
| Panel |
|---|
Commande
Voici la ligne de commande utilisée par l'objet commande notify-host-by-email :
| Code Block |
|---|
$NOTIFPLUGINDIR$/notify_by_email.py --title-tpl $NOTIFPLUGINDIR$/host_alert_title_template.tpl --content-tpl $NOTIFPLUGINDIR$/host_alert_content_template.tpl -F "$SENDER$" -r "$CONTACTEMAIL$" -n $NOTIFICATIONTYPE$ -H "$HOSTNAME$" --address "$HOSTADDRESS$" --url $MAILURL$ --huuid $_HOSTID$ --state $HOSTSTATE$ --last-state $LASTHOSTSTATEID$ --last-change $LASTHOSTSTATECHANGE$ --last-check "$DATE$ $TIME$" --output "$HOSTOUTPUT$" --long-output "$LONGHOSTOUTPUT$" --ack-author "$ACKAUTHOR$" --ack-data "$ACKDATA$" |
Cette commande est localisée dans le répertoire par défaut /var/lib/shinken/libexec/notifications/ ($NOTIFPLUGINDIR$).
Le script utilisé est un script Python qui prend un certain nombre d'arguments. Comme vous pouvez le constater, la ligne de commande fait référence à de nombreuses notations de remplacement dynamique de contenu afin d'envoyer les valeurs représentatives à l'instant T de la notification liée à l'hôte supervisé.
| Panel |
|---|
Personnalisation
Ce script Python notify_by_email.py peut utiliser un argument --SMTP ou -S qui permet alors de passer en paramètre l'IP ou l'adresse d'un serveur SMTP pour l'envoi de l'email.
Admettons par exemple que votre serveur SMTP est le serveur 192.168.1.200, il suffit donc de rajouter l'information --SMTP 192.168.1.200 dans votre ligne de commande :
| Code Block |
|---|
$NOTIFPLUGINDIR$/notify_by_email.py --title-tpl $NOTIFPLUGINDIR$/host_alert_title_template.tpl --content-tpl $NOTIFPLUGINDIR$/host_alert_content_template.tpl -F "$SENDER$" -r "$CONTACTEMAIL$" -n $NOTIFICATIONTYPE$ -H "$HOSTNAME$" --address "$HOSTADDRESS$" --url $MAILURL$ --huuid $_HOSTID$ --state $HOSTSTATE$ --last-state $LASTHOSTSTATEID$ --last-change $LASTHOSTSTATECHANGE$ --last-check "$DATE$ $TIME$" --output "$HOSTOUTPUT$" --long-output "$LONGHOSTOUTPUT$" --ack-author "$ACKAUTHOR$" --ack-data "$ACKDATA$" --SMTP 192.168.1.200 |
| Info | ||
|---|---|---|
| ||
Au lieu de rajouter l'adresse en dur dans la ligne de commande, pour pourriez également utiliser une notation de remplacement dynamique de contenu, référant à une donnée de l'hôte par exemple, comme : $_HOSTIPSMTPSERVEUR$ |
Troubleshooting
Tester votre commande
Si vous souhaitez envoyer une commande depuis votre Reactionner afin de vérifier le bon envoi de l'email, loguez vous en shinken via :
| Code Block |
|---|
su - shinken
|
puis envoyer votre commande, par exemple :
| Code Block |
|---|
/var/lib/shinken/libexec/notifications/notify_by_email.py --title-tpl /var/lib/shinken/libexec/notifications/service_alert_title_template.tpl --content-tpl /var/lib/shinken/libexec/notifications/serviceSCRIPT_alert_content_template.tpl -F "ENVOYEUR@DOMAIN.COM" -r "RECEVEUR@DOMAIN.COM" -n PROBLEM -H "mon-serveur" --address "172.16.0.10" --url http://172.16.0.10:7767 --huuid 7b0513f631a011e889e9080027da5b5c --check "Memory" --state CRITICAL --last-state 0 --last-change 1525338011.76 --last-check "03-05-2018 11:00:56" --output "Critical : memory consumption is too high 66%" --long-output "" --ack-author "" --ack-data "" |
Vous devriez alors recevoir :
| Code Block |
|---|
DATE,426:INFO: Mail sent successfully |
Et vous devriez recevoir l'email dans votre boite email.
Logs
Si vous avez des difficultés, veuillez vérifier les logs :
- du Réactionner dans /var/log/shinken/
- de votre serveur mail linux (postfix/smtp) dans /var/log/maillog
Configuration avancée (relais SMTP)
DE_NOTIFICATION MY_NAME_SCRIPT_DE_NOTIFICATION.py
chown -R shinken:shinken . |
- Vos commandes devront pointer vers ce script :
| Code Block | ||||
|---|---|---|---|---|
| ||||
/var/lib/shinken-user/libexec/notifications/TYPE_DE_NOTIFICATION/MY_NAME_SCRIPT_DE_NOTIFICATION ... |
Si votre serveur SMTP principal est un serveur connu et généralisé dans votre architecture, vous pouvez aussi modifier votre configuration afin de relayer n'importe quel email vers ce serveur :
Redémarrer postfix
- service postfix restart

