Voici un petit tutoriel (mon premier d’ailleurs) sur la mise en place de notification Zabbix via l’application Telegram.

Compilation de Telegram

Il existe une version de Telegram pour linux en ligne de commande, le projet hébergé sur GitHub se nomme Telegram messenger CLI, pour cette partie, il suffit de suivre simplement le tutoriel pour la compilation, pour ma part, je vais détailler les étapes pour une GNU/Debian car mon serveur Zabbix est dessus.

1. Commençons par installer les paquets nécessaire à la compilation :

sudo apt-get install git libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev make

2. Puis créer le répertoire utilisateur de Zabbix s’il n’est pas créé par défaut :

mkdir /var/lib/zabbix
chown zabbix:zabbix /var/lib/zabbix

3. On prend ensuite l’identité de Zabbix pour la suite des événements :

sudo su zabbix
cd ~

4. On récupère les sources de Telegram CLI et on compile :

git clone --recursive https://github.com/vysheng/tg.git
cd tg
./configure
make

5. On copie les certificats dans le /etc/ (en Root)

mkdir /etc/telegram-cli
cp *.pub /etc/telegram-cli/
chmod 755 /etc/telegram-cli
chmod 644 /etc/telegram-cli/*

À ce point, nous avons compilé Telegram et il ne reste plus qu’a le configurer correctement.

Configuration

Tout d’abord, nous allons créer un compte Telegram dédié à Zabbix pour qu’il puisse envoyer des messages aux groupes et autres utilisateurs, pour cela, je vous invite à utiliser l’interface Web de Telegram, cela va nous permettre de choisir un nom à afficher ainsi que son avatar.

1. On commence par prendre l’identité de Zabbix :

sudo su zabbix
cd ~/tg

2. On lance Telegram pour la première fois :

bin/telegram-cli -k /etc/telegram-cli/tg-server.pub -D

On attends quelques secondes et l’application nous demande un numéro de téléphone et le code de sécurité, entrez ces informations et saisissez la commande safe_quit

Voila, Telegram est prêt pour l’envoi de nos alertes, passons à la configuration de Zabbix.

Configuration de Zabbix

Voici le script permettant l’envoi de message stocké dans le fichier /usr/lib/zabbix/alertscripts/telegram.sh

#!/bin/bash
# Send Zabbix notification through Telegram
# Copyright (C) 2015 David Cachau
# 
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

export to=$1;
export subject=$2;
export body=$3;

cd /var/lib/zabbix/tg;
nohup bin/telegram-cli -p /var/lib/zabbix/.telegram-cli -c /var/lib/zabbix/.telegram-cli/config -k /etc/telegram-cli/tg-server.pub -vv -REDNW -e "msg $to \"$subject \n $body\"" >> /dev/null 2>&1 &

N’oublions pas de donner le droit d’exécution sur ce fichier :

chmod 755 /usr/lib/zabbix/alertscripts/telegram.sh
chown zabbix:zabbix /usr/lib/zabbix/alertscripts/telegram.sh

Une petite explication sur la commande s’impose : J’ai dû tricher un peu avec la commande nohup car Zabbix envoyai un SIGTERM/SIGINT à mon script, cela empêchai l’envoi correct des messages.

Enfin, créons le Media Type :

Ajouter un Media Type

Et l’action associée :

Ajouté une actions > Action

Voici le contenu des champs :
❌ {HOST.NAME}
✅ {HOST.NAME}
{TRIGGER.NAME}

Ajouté une action > Conditions

Ajouté une actions > Opérations

 Ajouté une actions > Opérations > Ajouter une opération

Il ne reste plus qu’à tester le fonctionnement et le tour est joué.

N’hésitez pas à apporter vos modifications à ce script, n’hésitez pas à commenter ou apporter des suggestions.

La clé vfs.fs.discovery qui permet de découvrir les disques montés sur un système n’est pas forcement adapté à toutes les configurations, dans le cas d’un serveur avec CageFS qui permet de chrooté les utilisateurs, cette même clé de configuration qui fait des miracles devient vite un fardeaux !

Pour cela j’ai fait un petit script pour n’afficher que les disques réellement monté par l’OS :

#!/bin/sh

mount |
awk ' BEGIN { FS=OFS=" "; ORS = ""; print "{\"data\":["; } \
{ print "{\"{#FSNAME}\":\""$3"\", \"{#FSTYPE}\":\""$5"\"}"; }
END { print "]}\n"; }' |
sed "s^}{^}, {^g"

Il suffit ensuite de placer ceci dans la configuration de l’agent :

UserParameter=vfs.fs.disk,/usr/share/zabbix/catdisk

Pour terminer il faut modifier le Template OS Linux > Discovery > Mounted filesystem discovery pour y placer ceci comme clé : vfs.fs.disk

Testé sur Zabbix 2.4