Réaliser un script d'alerte Zabbix

Comme vu dans un précédent article, Zabbix permet assez simplement d'ajouter des scripts d'alerte.
Mais simple ne signifie pas nécessairement restreint.

En effet, on peut personnaliser les arguments envoyés au script.

Trois arguments sont souvent utilisés : {ALERT.SENDTO}, {ALERT.SUBJECT} et {ALERT.MESSAGE}. Il s'agit de macros : SENDTO dépend du compte qui reçoit la notification, et le sujet/message sont définis par les Actions (onglet Configurations). Bien sûr, ces trois macros ne sont pas les seules disponibles… La liste est même plutôt complète. En bidouillant un peu, il est possible de faire énormément de choses.


Et mieux encore, les scripts d'alerte n'ont qu'une seule contrainte : être executables. C'est à dire appeler un programme (curl), un script shell (bash, sh) ou même un script Python ... sous réserve d'avoir bien précisé le shebang.

Au programme d'aujourd'hui, un petit script python qui envoie les notifications par message privé Twitter. Pour cela, il nous faut un compte et des tokens OAuth2.

On commence donc par créer une application sur le Twitter Application Manager, puis dans cette application, on récupère les tokens (onglet Keys and Access Tokens) et on génère notre paire de clés : Create my access token.

Nous voilà (si tout s'est bien passé) en possession de 4 tokens. Dans mon cas, les voici:

  • Consumer Key (API Key) : yzGiOmLJ2BPlbzscJww6g
  • Consumer Secret (API Secret) : QA7UQCKU5LU76a6e5VUgctfXTims2u6LuGk1dhfiw
  • Access Token : 202199859-Cmopq1XU7IBVxwHNaklS6ff08s0KB9Ia1O1IcRDY
  • Access Token Secret : HWd0LuA4FHCSAuk6qHaAXDvpUETwrH4pLdcQjqM9DxnL2

Ensuite, on installe tweepy, un module Python qui permet de communiquer facilement avec Twitter (pip install tweepy) et on installe dans /usr/local/share/zabbix/alertscripts/tweet.py le script suivant (en remplaçant les variables ;D)

#!/usr/bin/env python

import json, sys  
import tweepy

consumer_key='yzGiOmLJ2BPlbzscJww6g'  
consumer_secret='QA7UQCKU5LU76a6e5VUgctfXTims2u6LuGk1dhfiw'  
access_token='202199859-Cmopq1XU7IBVxwHNaklS6ff08s0KB9Ia1O1IcRDY'  
access_token_secret='HWd0LuA4FHCSAuk6qHaAXDvpUETwrH4pLdcQjqM9DxnL2'


auth = tweepy.OAuthHandler(consumer_key, consumer_secret)  
auth.set_access_token(access_token, access_token_secret)

api = tweepy.API(auth)

dest = sys.argv[1]  
subject = sys.argv[2]  
message = sys.argv[3]

api.send_direct_message(dest, text="** " + subject + " **\n\n" + message)  

On applique un chown/chmod qui convient, et c'est presque fini.

$ chmod 570 /usr/local/share/zabbix/alertscripts/tweet.py
$ chown zabbix:root /usr/local/share/zabbix/alertscripts/tweet.py

Tout le reste s'effectue par l'interface graphique Zabbix :

  • Administration > Media Types > Create Media Type

  • Puis dans votre profil, onglet Media (comme dans le précédent article ... en mettant votre pseudonyme Twitter et non votre numéro de téléphone ;D)


Et voilà, en ajustant les Actions selon vos préférences vous pouvez même avoir des alertes par DM Twitter qui ressemblent à ça :

Bon, si vous insistez ... l'action en question:

Amusez-vous bien ! :-)