Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Make by tools (01.00.01) - action=clean_macro_parameter
Scroll Ignore
scroll-pdftrue
scroll-officetrue
scroll-chmtrue
scroll-docbookhtmltruefalse
scroll-eclipsehelpdocbooktrue
scroll-epubeclipsehelptrue
scroll-htmlepubtrue
Panel
titleSommaire

Table of Contents
stylenone

Contexte

 

Afin de pouvoir recevoir des notifications,

 la source cfg-file-shinken

Shinkencomprend un certain nombre de

commande de notifications

commandes qu'il faudra importer et appliquer sur les

méthodes de notifications

utilisateurs à notifier.

  • Les commandes 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
. Celui-ci utilisera le pack livré par Shinken, ce qui évitera de modifier directement l'élément concerné
    • ,
    • 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 surchargé et les modifications apportées par les mises à jour Shinken.

Création d'une commande pour les notifications

Création d'une commande

Vous allez devoir ou créer une nouvelle commande ou copier une existante.

Dans les 2 cas, vous devez définir :

  • Le nom de la commande
  • La ligne de commande
    • Le prochain chapitre vous donne quelques points d'accompagnement à la création de la ligne de commande.
  • Le temps d'exécution maximum :
    • Si la notification prend plus que le temps paramétré, elle sera tuée par le Reactionner et donc ne sera pas envoyé. 
    • Cela évite d'une notification soit trop gourmande et bloque toutes notifications.
  • Le Seuil d'alerte de l'utilisation CPU de la notification
  • Si elle est active
  • Et éventuellement le pack dans lequel vous voulez que la commande se trouve

Vous pouvez faire cela :

Image Added

Corps de la commande

Les commandes sont exécutées par le Reactionner ( voir la page Le Reactionner ) lorsque les conditions définies par la Logique de notification sont  sont réunies.

Elles ont accès spécifiquement à un certain nombre de notations de remplacement dynamique de contenu (VARIABLE).

Ces données dynamiques
  • Il est possible d'utiliser des Variables pour avoir accès aux informations des éléments ( voir la pageLes Variables ( Remplacement dynamique de contenu - Anciennement les Macros ) ).
  • Ces informations concernant Hôtes, Clusters, Check, Utilisateurs 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 et les contacts à notifier sont disponibles pour la notification.

Notations globales

Voir un listing NON exhaustif des informations qui peuvent être pertinents dans une notification, mais la pageLes Variables ( Remplacement dynamique de contenu - Anciennement les Macros ), vous donne la liste complète de ce qui est accessible.

Variables globales

Vous pouvez utiliser dans votre commande des Variables globales.

  • L'intérêt est d'avoir des informations fixes pour toutes vos commandes de notification.
  • Nous vous conseillons de rajouter dans le répertoire /etc/shinken/resource.d votre fichier de définition de variable globale ( Voir la page Données globales ( Répertoire resource.d ) ).
  • Pour information, les variables globales suivantes sont disponibles, pour inspiration, dans les notifications livrées par défaut.

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 leur sont spécifiques :

ExcerptNotationValeurs possiblesUtilisationExemple

$MAILURL$

< une URL >
NotationUtilisationExemple

MAILURL

L'adresse de l'UI de visualisation de Shinken
.
( dans le but par exemple de donner au contact un lien vers l'élément ).$MAILURL$=http://192.168.1.1:7767

$SENDER$

< une adresse émetteur >

SENDER

L'adresse mail de l'envoyeur, pour une notification mail.$SENDER$=notifications@shinken.com

$NOTIFPLUGINDIR$

< un chemin de fichiers >

NOTIFPLUGINDIR

Le répertoire dans lequel se trouve la commande de notification à exécuter.
Défini dans 
/etc
$NOTIFPLUGINDIR$=/var/lib/shinken/
resource.d/email.cfg
libexec/notifications

Info
titleRemarque

Ces trois notations spécifiques sont mises à des valeurs par défaut que vous pouvez retrouver dans le fichier email.cfg du répertoire resource.d : /etc/shinken/resource.d/

  • Inspirez-vous-en, mais ne les utilisez pas, car a la prochaine mise à jour de Shinken, nous remettrons le fichier email.cfg
  • à sa valeur d'origine.
Variables
Notations
liées à l
'élémentLes notations de remplacement dynamique de contenu de l
'élément
peuvent être appelées dans la notification.

Dans le cas d'une notification de l'hôte, les notations de  variables de l'hôte sont disponibles.

  • Dans le cas d'une notification d'un check, les
notations
  • variables l'hôte et du check sont toutes les deux disponibles.
  • De la même façon que les
notations globales
  • variables globales, toutes les
notations des
  • variables des éléments peuvent être utilisées, mais les
notations suivantes
  • variables suivantes sont spécifiquement utiles :
Notation
Valeurs possibles
UtilisationExemple

$HOSTNAME$

< un nom d'hôte >

HOSTNAME

Le nom de l'hôte.

serveur1

$SERVICEDESC$

host france

SERVICEDESC

< un nom de check >

Le nom du

check, dans le cas d'un

check

.

CPU

$HOSTADDRESS$

HOSTADDRESS

< une adresse >

L'adresse de l'hôte.

192.168.1.1

$HOSTUUID$, $SERVICEUUID$

< un id >

HOSTUUID, SERVICEUUID

L'identifiant Shinken de l'élément.

Hôte :

HOSTUUID

007793c6a9b84b9f96cd0663fe502cc9
Service :

HOSTUUID

007793c6a9b84b9f96cd0663fe502cc9-

SERVICEUUID

d9fa4c0096a211e5ae0b0800278b6434

$HOSTSTATE$, $SERVICESTATE$

< un statut, format texte >

HOSTSTATE, SERVICESTATE

Le statut de l'élément.

Hôte :

UP

OK,

DOWN, UNREACHABLE

CRITICAL
Service :

 OK

OK, WARNING, CRITICAL, ou UNKONWN

$HOSTREALM$

< un nom de royaume >

HOSTREALMSERVICECRITICAL

Royaume de l'hôte/check à notifier

All

$HOSTNOTIFICATION_TITLE_PREFIX$

< préfixe >Préfix de l'hôte (non obligatoire)Texte brut

$LASTHOSTSTATEID$, $LASTSERVICESTATEID$

France

LASTHOSTSTATEID, LASTSERVICESTATEID

< un statut, format numérique >

Le statut précédent de l'élément, par code de retour

(0, 1, 2 ou 3)

.

  • 0 : OK
  • 1 : WARNING
  • 2 : CRITICAL
  • 3 : UNKNOWN.

$LASTHOSTSTATECHANGE$, $LASTSERVICESTATECHANGE$

< temps unix, flottant >

0

LASTHOSTSTATECHANGE, LASTSERVICESTATECHANGE

La date du dernier changement de statut de l'élément.

Format timestamp :

 1525338011

1525338011

$DATE$

< date, format dd/mm/yyyy >

DATE

La date du dernier check.

Format date :

 01

01-17-2020

$TIME$

< heure, format hh:mm:ss >

TIME

L'heure du dernier check.

Format date : 14:40:56

$HOSTOUTPUT$, $SERVICEOUTPUT$

< un résultat >

HOSTOUTPUT, SERVICEOUTPUT

La sortie du check à l'origine de la notification.

Texte brut

$LONGHOSTOUTPUT$

LONGHOSTOUTPUT,

$LONGSERVICEOUTPUT$

LONGSERVICEOUTPUT

< un résultat>

La sortie longue du check à l'origine de la notification.

Texte brut

$

_

HOSTMADONNEE1$

HOSTMADONNEE1

< un texte >

La donnée MADONNEE1 de l'hôte.

Donnée de l'hôte

$

_

SERVICEMADONNEE2$

SERVICEMADONNEE2

< un texte >

La donnée MADONNEE2 du check.

Donnée du service

HOSTDOWNTIMECOMMENT, SERVICEDOWNTIMECOMMENT

Le commentaire du contexte "Période de maintenance".


HOSTDOWNTIMEAUTHOR, SERVICEDOWNTIMEAUTHOR

L'auteur du contexte "Période de maintenance"


ACKDATALASTSERVICECRITICAL

Le méssage du contexte "Prise en compte".


ACKAUTHOR

L'auteur du méssage du contexte "Période de maintenance".



Variables
Notations
liées au contact

Les notations du contact pouvant être appelées dans la notification.

Notations 
Valeurs possibles
UtilisationExemple

$CONTACTPAGER$

< un numéro de téléphone >

CONTACTPAGER

Le numéro de téléphone du contact, pour une notification téléphonique.Numéro de téléphone

$CONTACTEMAIL$

< une adresse destinataire >
: 06 17 06 17 06

CONTACTEMAIL

L'adresse mail du destinataire, pour une notification mail.
Adresse mail

$CONTACTADDRESS1$,

[ ... ]

$CONTACTADDRESS6$

< les adresses >Adresses supplémentaires du contact pour d'autres types de notificationsAdresse mail

$_CONTACTMADONNEE1$

< un texte >La donnée MADONNEE1 du contactDonnée d'un utilisateur

$_CONTACTMADONNEE2$

< un texte >La donnée MADONNEE2 de contactDonnée d'un utilisateur

Notations de notification

mon-email@shinken-solutions.com

_CONTACTMADONNEE

La donnée MADONNEE du contact
Variables liées à la notification

Des variables 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.


Notations 
Valeurs possibles
Utilisation
Exemple

$NOTIFICATIONTYPE$

< un type de notification >

NOTIFICATIONTYPE

Le type de notification à envoyer. Cela correspond au type d'événement qui a été constaté sur l'élément.

Voir plus bas$SERVICEFIRSTNOTIFICATIONDELAY$

< un nombre en minute >Nombre de minutes à attendre avant d'envoyer la  première  notification pour un service5

$SERVICENOTIFICATIONNUMBER$

< un nombre >Nombre actuel de notifications pour cet événement2

$ACKAUTHOR$

< un nom de contact >

L'auteur d'un contexte "Prise en compte"

admin

$ACKDATA$

< un message texte >Le message d'un contexte "Prise en compte".Texte brut

Pour les types de NOTIFPLUGINDIR, la liste des valeurs possibles est la suivante :


TypeÉvénement source
PROBLEM  Le statut de l'élément est non OK.
RECOVERYL'élément avait un problème, mais est de nouveau dans un statut OK.
ACKNOWLEDGEMENT  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.
FLAPPINGSTART, FLAPPINGSTOP L'élément est entré ou sorti d'un contexte de FLAPPING .
FLAPPINGDISABLED  La détection a été désactivée pendant la durée du FLAPPING .
DOWNTIMESTART, DOWNTIMESTOP    L'élément est entré ou sorti d'
une
une période programmée d'indisponibilité.
DOWNTIMECANCELLED   
DOWNTIMECANCELLEDLa période programmée d'indisponibilité de l'élément a été annulée en cours.

ACKNOWLEDGEMENT 

Partir

Exemple de personnalisation

d'une

commande

méthode 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 démon 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

Image Removed

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$).

existante

Pour une première commande de notification, vous pouvez vous aussi duppliquer une commande existante et la modifier.

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

Image Removed

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
titleRemarque

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$
La donnée IPSMTPSERVEUR devra alors être présente sur l'objet hôte, directement, ou via un modèle par exemple.

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/service_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)

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 :

  • Editer le fichier /etc/postfix/main.cf
  • Modifier la ligne avec l'IP de votre serveur SMTP (ici 192.168.1.240)  : relayhost = 192.168.1.240
  • Redémarrer postfix

    Code Block
    service postfix restart
  • Test d'envoi de mail :

    Code Blockls | mailx -s test d.labardin@shinkendom.local