Zabbix : script de notification d'alertes XMPP / Jabber

Zabbix intégre le support de notifications par protocole XMPP / Jabber. Pour autant, en fonction du serveur XMPP, les notifications peuvent ne pas fonctionner. Ceci a été mon cas, probablement car le serveur jabber utilisé n’accepte que les connexions sécurisées. Ne pouvant pas le changer (la gestion par LDAP étant nécessaire), j’ai donc dû testé différentes librairies Perl, Python, etc pour en arriver à celle qui marche : xmpphp. Je vous fait part de cette configuration et des scripts nécessaires.
L’installation des scripts se fait dans le répertoire spécifié par l’option de configuration AlertScriptsPath de Zabbix. Ici, il s’agit de mon côté* /etc/zabbix/alertscripts*/. Je débute par xmpphp :
# cd /tmp/
# wget http://xmpphp.googlecode.com/files/xmpphp-0.1rc2-r77.tgz
# tar xzf xmpphp-0.1rc2-r77.tgz
# mv xmpphp-0.1rc2-r77/XMPPHP /etc/zabbix/alertscripts/
Puis les deux scripts à mettre en place, le script PHP et le script shell appelé par Zabbix (celui-ci ne peut appeler que des scripts shell) :
# more /etc/zabbix/alertscripts/sendxmpp.php
<?php
include 'XMPPHP/XMPP.php';
if ($_SERVER[argc] < 3)
die ("Not enough arguments.");
$sendto = $_SERVER[argv][1];
$subject = $_SERVER[argv][2];
$message = $_SERVER[argv][3];
// change your server settings and IM sender
$conn = new XMPPHP_XMPP('jabber.my.domain', 5222, 'zabbix', 'mot_de_passe',
'xmpphp', 'my.domain', $printlog=false, $loglevel=XMPPHP_Log::LEVEL_INFO);
try
{
$conn->connect();
$conn->processUntil('session_start');
$conn->presence();
$conn->message($sendto, $message);
$conn->disconnect();
}
catch(XMPPHP_Exception $e)
{
die($e->getMessage());
}
# more /etc/zabbix/alertscripts/sendxmpp.sh
#!/bin/sh
/usr/bin/php /etc/zabbix/alertscripts/sendxmpp.php "$1" "$2" "$3"
Au niveau de la configuration du serveur Zabbix, un nouveau média doit être créé. Il doit être de type script et pointer sur /etc/zabbix/alertscripts/sendxmpp.sh :
Je vous laisse le soin de l’associer à une action. Voici ce que j’obtiens comme notification sur mon poste avec Growl :