[ Linux ] Monitoring via Telegram
Telegram est une application de messagerie que j’utilise maintenant depuis plusieurs mois… Ce n’est pas la seule application, sachez qu’il en existe d’autres de ce type, c’est juste un choix personnel. Alors pourquoi j’ai choisis d’utiliser Telegram ?
– Une plateforme ouverte (un service API est à disposition pour y connecter/développer divers clients et sur diverses plateformes)
– Aucune publicité (non sérieusement qui aime ça ?)
– Service sécurisé (les méthodes sont pas trop mal sur le papier)
– Application multi-plateformes (disponible sur Windows, OS X, Linux, iOS et Android, que dire de plus ?)
Comme pour tous les services de nos jours, une inscription est nécessaire pour l’utiliser. Cette inscription require votre numéro de téléphone (qui sera donc utilisé comme identifiant) contrairement aux autres qui demandent une adresse email. Je ne connais pas réellement la raison puisque le service pourrait très bien s’en passé, j’avoue ne pas avoir été en confiance au début. Mais jusqu’à aujourd’hui je n’ai pas reçu d’appel, sms ou autre genre de connerie type spam.
Si vous souhaitez en savoir d’avantage sur Telegram, je vous propre cet article sur Wikipédia ou alors de visiter directement le site officiel 🙂
Présentation
J’ai joué pendant quelques jours avec un bot Telegram que j’ai créé (oui vous pouvez créer des bots) pour du service de monitoring en temps réel. Et finalement j’ai été bien séduit ! Les notifications arrivent très rapidement (pour ne pas dire instantanément) et comme c’est une application que j’utilise souvent pour discuté avec des amis, la lecture de ces notifications est vraiment facile/pratique/rapide 🙂
Finalement j’ai refais mon script plus proprement (oui quand on fait des tests, c’est jamais propre) et l’ajout de quelques fonctions intéressantes pour moi. L’idée ici était de pouvoir gérer un monitoring des ports (up/down) et des sites (sur le code retour). Le script n’est pas fermé, vous pouvez rajouter ce que vous souhaitez derrière (swatch, reporting, …). Votre amélioration peut intéresser d’autres personnes, alors n’hésitez pas à proposer vos créations (ou même vos idées) 😉
Installation de Telegram-cli
Nous passons maintenant à la pratique avec l’installation de « telegram-cli », c’est une version qui s’utilise en ligne de commande (c’est ce que veux dire le cli, vous l’aurez compris). L’outil est disponible sur la plus part des distributions, à vous de remplacer par les bonnes commandes :
$ yum install -y telegram-cli
Terminé pour l’installation ! Rien de compliqué
Création d’un bot Telegram
Maintenant que l’outil est installé, nous allons créer un bot que nous utiliserons après sur notre serveur. La création d’un bot nécessite que l’on soit déjà utilisateur du service (car le bot sera associé à votre compte), il vous faudra utiliser aussi un client desktop. Une fois que vous avez tous les éléments (compte utilisateur + client desktop/mobile) il faudra suivre les étapes suivantes :
– Ouvrez une discussion avec « BotFather » (ou cliquez ici)
– Envoyez lui la commande « /newbot »
– Définissez lui ensuite un nom (qui devra obligatoirement se terminer par « _bot », attention ne prend pas en compte les tirets)
Le service vous retournera un token qui sera à utiliser pour contrôler notre bot. Notez-le quelque part, il sera nécessaire plus tard, ce n’est pas critique s’il est perdu, il se trouve facilement en discutant avec notre « BotFather ». Je vous invite à utiliser les commandes « /setname » (pour le nom à afficher), « /setuserpic » (pour changer la photo de profil) et « /setdescription » (pour changer la description) pour personnaliser un peu mieux votre bot ! Pour ma part ce sera :
Lancement de Telegram-cli
Avant de lancer le service, il faut créer un utilisateur pour sécuriser un peu la chose. Ici j’ai choisi « telegram-cli » :
$ groupa telegram-cli
$ useradd -c « Telegram Bot » -d /etc/telegram-cli -M -s /bin/false -g telegram-cli telegram-cli
$ mkdir /var/log/telegram-cli
$ chown telegram-cli:telegramcli /var/log/telegram-cli /etc/telegram-cli
Et lancer pour la première fois le service. Il vous sera demandé un hash qui sera le token du bot (celui que vous avez eu un peu plus haut), il sera enregistré dans un dossier caché de l’utilisateur ($HOME/.telegram-cli) :
$ telegram-cli -U telegram-cli -G telegram-cli
Une fois connecté profitez-en pour récupérer votre nom d’utilisateur pour que le bot vous envoi des messages (vous comprenez par la suite) et gardez le dans un coin :
$ contact_search <votre_pseudo>
Maintenant lançons en tâche de fond notre « serveur » qui servira de passerelle, pour ma part, j’ai utilisé le port 2424, l’utilisateur « telegram-cli » et placé les logs dans le fichier « /var/log/telegram-cli/server.log ». Libre à vous de changer cela vous convient pas :
$ telegram-cli -k /etc/telegram-cli/server.pub -U telegram-cli -G telegram-cli -L /var/log/telegram-cli/server.log -P 2424 -d -vvvRC -W &
C’est terminé pour la mise en place du « server ». Reste plus qu’à mettre en place les scripts 🙂
Mise en place des scripts
Nous avons lancé le service avec une écoute sur le port 2424 (si vous l’avez pas modifié), l’idée sera donc d’envoyer un message sur cette entrée du service. Pour l’envoi d’un message, cela se présentera de la manière suivante :
– msg <telegram_nom> <votre_message>
– send_text <telegram_nom> /tmp/fichier.txt
– send_photo <telegram_nom> /tmp/picture.png
Dans cet article on utilisera uniquement l’envoi de message standard (mais les autres sont possible, moi j’utilise aussi l’envoi d’image sur des graphes générés avec Munin et l’envoi de fichier pour des rapports basiques de mes logs). Le script n’est pas très long, il est disponible par ici. Nous le téléchargerons de cette manière :
$ wget -O /bin/telegram-monitoring « https://archive.djerfy.com/scripts/telegram-monitoring.txt »
$ wget -O /etc/telegram-cli/telegram-monitoring-ports.conf « https://archive.djerfy.com/scripts/telegram-monitoring-ports.txt »
$ wget -O /etc/telegram-cli/telegram-monitoring-sites.conf « https://archive.djerfy.com/scripts/telegram-monitoring-sites.txt »
$ chown root:root /bin/telegram-monitoring
$ chmod +x /bin/telegram-monitoring
.
Configuration des scripts
Maintenant que vous avez les scripts, il ne reste plus qu’à les configurer, c’est facile et rapide. Tout d’abord le fichier « /etc/telegram-cli/telegram-monitoring-ports.conf » qui contient la liste des ports à surveiller (mettez un port par ligne) :
$ cat /etc/telegram-cli/telegram-monitoring-ports.conf
22
80
443
Ensuite le fichier « /etc/telegram-cli/telegram-monitoring-sites.conf » (mettez un site par ligne) :
$ cat /etc/telegram-cli/telegram-monitoring-sites.conf
Ainsi que le script lui même « /bin/telegram-monitoring ». Vous devrez modifier/adapter les lignes suivantes :
– Ligne n°11 : le nom/prénom de l’utilisateur à qui envoyer les messages
– Ligne n°18 : activer (true) ou désactiver (false) le monitoring des ports
– Ligne n°19 : activer (true) ou désactiver (false) le monitoring des sites
Pour terminer il reste plus qu’a placer le script pour qu’il s’exécute toutes les minutes (rassurez-vous il n’y aura pas de spam si un site/port est up/down) :
$ crontab -e
* * * * * /bin/telegram-monitoring
Voilà c’était la dernière modification ! 🙂
Conclusion
Théoriquement il n’y a pas de raison pour que ça ne fonctionne pas, sinon il faudra allez chercher des réponses dans les logs 🙁 N’hésitez pas à utiliser les commentaires si vous constatez des bugs ou même des améliorations. Peut-être que je pousserais les scripts sur Github si jamais il y a de la demande (pas prévu à l’heure actuelle).
Il existe une méthode plus facile/rapide en utilisant directement l’URL qui va bien : https://api.telegram.org/bot${TOKEN}/sendMessage?chat_id=XXXXXX&text=Votre message. Malheureusement je n’en parlerais pas dans l’immédiat. J’avais décidé d’utiliser « telegram-cli » car je compte pouvoir faire des retours au bot qui sera interprété par le script. Peut-être pas des commandes (trop risqué) mais pourquoi pas des trucs simple (genre purger du cache, voir l’état des volumétries, …), je ferais une étude sur le sujet.
J’espère qu’il vous sera utile ! 🙂