Envoi de notification par Jabber

Jeudi, 17 Février 2005 00:00
Imprimer
Note des utilisateurs: / 1
MauvaisTrès bien 
Ah, les notifications de Nagios par mail, c'est bien, mais tu trouve pas que c'est un peu old-fashioned ? Si hein ? C'est pas djeune, quoi. Les SMS, ça c'est de la balle, bébé. Ah oui mais toi t'as pas de passerelle SMS ? Ah oui mais toi t'éteins ton portable au boulot ? Attends j'ai une idée : on va faire de la messagerie instantanée. Comme ta petite sœur avec MSN, mais pro, tu vois. Je te propose un serveur Jabber privé.

Regarde si c'est pas beau :

Exodus

Un serveur Jabber, un

Jabberd 2 est un serveur de messagerie instantanée (open source, rassure-toi), qui supporte le chat, les messages, et avec les plugins qui vont bien, les chatrooms, etc. Nous nous intéresserons à la fonctionalité d'envoi de message. Le protocole Jabber est supporté par différents clients. Pour ma part, j'utilise Exodus sous Windows.

Pour l'installation, je te renvoie au site officiel chez jabberstudio, c'est quand même eux les pros.

Configuration du serveur

Le domaine jabber doit correspondre à ton domaine DNS interne, ça va simplifier les choses. Pour le reste, j'ai tout laissé standard.

Facultatif : je configure le serveur pour qu'il refuse les enregistrements de nouveaux utilisateurs (c'est pas un serveur public, non plus) : dans le fichier de configuration c2s.xml, rubrique <register>, je commente <enable/>. Du coup, il faut se palucher à la main dans la base de données mysql la création des utilisateurs. Pour que tu gagnes du temps, voilà l'instruction SQL :

mysql -u jabberd2 -p 
<mot de passe mysql>
mysql> use jabberd2
mysql> insert into authreg (username, realm, password)
values ('le_login_du_gars', 'ton_domaine.com', 'le_mot_de_passe_du_gars');

A l'inverse, pour supprimer un gars :

mysql> delete from authreg where username='le_login_du_gars';

Il y a deux gars à créer impérativement : toi (sinon comment tu te connectes ?) et nagios (sinon, comment il t'écrit ?).

Nouveau !

Depuis que j'ai écris cet article, j'ai découvert un autre serveur Jabber : Openfire. Bon d'accord, il est écrit en Java, ce qui t'impose d'installer le golem la JRE sur ton beau serveur tout propre ; mais alors question administration, y'a pas photo.

Le reste de l'article reste valable avec ce serveur.

Connexion à partir d'un client

Pour que tu ne galères pas avec la configuration d'Exodus, je t'explique :

Onglet Profile

Onglet Connection

Dans cet onglet, tu peux aussi utiliser la découverte automatique du serveur. Là, il faut jouer avec ton DNS interne. Si ton domaine Jabber correspond bien avec ton domaine DNS, tu ajoutes les enregistrements suivants dans le sous-domaine _tcp :

Et là ça marche tout seul. Joli, non ? Tu logues un coup nagios depuis Exodus, pour être sûr que tout marche bien comme il faut.

Envoi de message depuis Nagios

Script d'envoi du message

Alors là, deux écoles s'affrontent. La première utilise le joli module Perl Net::Jabber. C'est le cas de l'ami David Cox (non, pas le frère de Courtney, je crois pas). Il nous livre avec bonté le script notify_via_jabber.pl. Je l'ai trouvé via l'excellent site Nagios Exchange.

Les andouilles, comme moi, ne parviennent pas à faire fonctionner ce foutu module Perl. Alors, j'ai rusé : j'ai fait un telnet sur le port du serveur Jabber, et je lui ai causé sa langue, dans un script Perl nommé send_jabber.pl. Evidemment, je déconseille cette méthode, qui n'est pas évolutive. Mais elle a le mérite de marcher. Tu penseras à remplacer dans le script "domaine.com" par ton vrai nom de domaine Jabber.

Configuration de Nagios

La configuration qui suit est valable avec le script send_jabber.pl. D'abord, on déclare les contacts dans le fichier de configuration contacts.cfg. J'utilise un contact générique, que je dérive :

define contact{
name generic-contact
register 0

service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-by-email
host_notification_commands host-notify-by-email
}

define contact{
use generic-contact
contact_name moi-jabber
alias Moi sur Jabber
pager mon_login@mon_domaine.com
service_notification_commands notify-by-jabber
host_notification_commands host-notify-by-jabber
service_notification_period workhours
host_notification_period workhours
}

Les commandes de notification, elles sont dans misccommands.cfg chez moi :

define command{
command_name notify-by-jabber
command_line /usr/local/nagios/libexec/send_jabber.pl $CONTACTPAGER$ $NOTIFICATIONTYPE$
"$HOSTNAME$" "$SERVICEDESC$" "$SERVICESTATE$"
"$OUTPUT$" "$DATETIME$"
}

define command{
command_name host-notify-by-jabber
command_line /usr/local/nagios/libexec/send_jabber.pl $CONTACTPAGER$ $NOTIFICATIONTYPE$
"$HOSTNAME$" "" "$HOSTSTATE$" "$OUTPUT$"
"$DATETIME$"
}

Après, tu sais associer un contact à un contactgroup, puis affecter le contactgroup à un host ou un service ? Non ? Attends, et Nagios, tu connais ? Mais qu'est-ce que tu fais là, toi ? Veux-tu bien me foutre le camp !

Mis à jour le Vendredi, 06 Mars 2009 18:37