Voici comment cela fonctionne:
- un module capable de poster sur twitter
- un compte unique dans lequel les message apparaitront
- 2 lignes à rajouter dans le fichier de configuration de munin

Tout d'abord, on va se créer un nouveau compte twitter, on se rend sur cette page du site twitter

Une fois le compte créé, activé, connectez vous avec ce nouveau compte sur twitter.
N'oubliez pas d'aller dans les préférences (profil > éditer votre profil) et de cocher la case "protéger mes tweets", histoire de ne pas dire à tout le monde que vos serveurs sont en rade :p

Puis, on va jetter un oeil sur l'excellent article de nicolargo qui va nous permettre d'obtenir un module python capable de poster des twits.
(pour information, il était auparavant possible de le faire très simplement avec curl et l'authentification en HTTP, mais il faut maintenant utiliser oAuth)

Une fois la procédure d'installation suivie, on a donc un script exécutable, nommé tweetitcli.py. On le déplace dans /sbin

mv ./tweetitcli /sbin/tweetitcli.py

on vérifie qu'il fonctionne en postant un message de test :

/sbin/tweetitcli.py 'message de test qui roxx'

le message devrait alors apparaitre dans votre compte nouvellement créé.

Maintenant, passons aux choses sérieuse : faut interfacer le bouzin avec munin...
Après moult tests (car munin est en fait assez sensible), j'ai pu trouver THE combinaison qui fonctionne au poil :)

on va donc éditer le fichier /etc/munin/munin.conf
Normalement, vous devriez deja avoir une ou deux ligne commencant par "contact.moi.command ..." pour avoir les alertes par email. En dessous on va rajouter les 2 lignes suivantes :

contact.tweeter.command /sbin/munin-alrt.sh
contact.tweeter.always_send warning critical

Si vous êtes un peu attentif, vous vous demandez ce que ce script munin-alrt.sh vient faire la....
C'est tout simplement car le script python précédemment obtenu ne fonctionne pas avec un pipe
En effet, lorsque munin va vouloir exécuter la commande du contact, il va faire (en gros) un

echo "données" | command

C'est pourquoi il nous faut faire un petit script shell qui va récupérer les données passées dans le pipe, puis appeler le script python pour envoyer le twit.
On édite donc le fichier /sbin/munin-alrt.sh et on met dedans ces quelques lignes :

#!/bin/bash
DATASTDIN=$(tr '[:upper:]' '[:lower:]' < /dev/stdin)
[ ${#DATASTDIN} -gt 140 ] && DATASTDIN=${DATASTDIN:0:140}
/sbin/tweetitcli.py "$DATASTDIN"

par mesure de précaution, on peut rajouter dans ce meme script une petite ligne pour logger les alertes :

echo "$DATASTDIN" >> /var/run/munin/munin-tweeter.log

qu'on désactivera une fois que tout marche bien.

puis, une fois le fichier enregistré et fermé, on n'oublie pas de donner les permissions d'execution

chmod +x /sbin/munin-alrt.sh

Accessoirement, au script python aussi

chmod +x /sbin/tweetitcli.py

Encore une fois, on vérifie que ce script fonctionne bien et appelle tweetitcli.py :

echo "Deuxième message de test" | /sbin/munin-alrt.sh

Enfin, afin de valider que ça fonctionne bien, on va se créer un petit plugin de test qui va générer des alertes. on édite le fichier /etc/munin/plugins/test_alarm.sh et on met dedans les lignes suivantes :

#!/bin/bash

if [ "$1" = "config" ]; then
        echo 'graph_title test plugin'
        echo 'graph_category test'
        echo 'test.label testValue'
        echo 'test.warning 2'
        echo 'test.critical 3'
        exit 0
fi

if [ "$1" = "autoconf" ]; then
        echo 'yes'
        exit 0
fi

echo test.value 2.1

ici, on met la valeur à 2.1 pour générer un warning. On pourra ensuite éditer ce plugin pour la passer à par exemple 3.2 pour générer un critical, et enfin à 1.5 pour recevoir une confirmation OK.
On le rend également executable

chmod +x /etc/munin/plugins/test_alarm.sh

et finalement, on relance munin

/etc/init.d/munin-node restart

puis on attend quelques minutes (les detection se font toutes les 5 minutes)
Et normalement, si vous allez sur votre compte twitter précédemment créé, vous verrez votre alerte qui pête le style "web 2.0" :)

munin-twitter-1.jpg

une fois l'alerte reçue, re-éditez le plugin de test, et changez la valeur. 5 minutes après, 2è alerte : munin-twitter-2.jpg

Et voila ! c'est pas beau la technologie ?

Vous pouvez maintenant au choix surveiller ce nouveau compte, ou bien avec votre compte habituel vous y abonner de manière à recevoir les alertes.
Ici, j'ai créé un 2è compte histoire de ne pas pourrir le 1er si y'a des problèmes... c'est votre choix

-> Que faire si ça marche pas ?!!!

Pour ma part, quand je faisais mes tests et que ça bloquait, un des symptômes était que le html n'était plus généré (voir la date du fichier /var/log/munin/munin-html.log)
Également, j'avais pas mal de process munin et munin-limits qui tournaient et restaient bloqués (ps aux | grep munin), qui devraient normalement se femer au bout de 30 à 60 secondes.
Alez jetter un coup d'oeil dans les logs, ainsi que dans votre boite mail (cron vous envoie un mail si ca bloque)
Enfin, allez voir les méthodes de debug sur le wiki officiel de munin

EDIT au 23/12/2010
Pendant qu'on est dans l'alerting par twitter, voici également un moyen de remonter les alertes de votre onduleur, avec apcupsd
apcupsd utilisant des scripts shell pour envoyer des alertes, il suffit, maintenant qu'on a le script twitter, de simplement rajouter 2 lignes à la fin, juste avant le "exit 0" :

TWITCMD=/sbin/twit_alert.py
$TWITCMD "$MSG"

il faut donc rajouter ces 2 lignes dans les script suivant, se trouvant dans le repertoire /etc/apcupsd/
- changeme : lorsque la batterie est naze et a besoin d'être remplacée
- commfailure : perte de connexion entre la machine et l'onduleur
- commok : la liaison avec l'onduleur est rétablie
- offbattery : lors d'une coupure de courant, l'onduleur passe sur batterie
- onbattery : courant rétabli après une coupure

Et voila le résultat que vous pourrez obtenir sur votre compte twitter en cas d'alerte :

apcupsd_twitter.jpg

Sinon je suis à la recherche d'une methode équivalente pour Monit, qui permet d'envoyer des alertes par email, mais pas d'executer directement une commande. Si vous savez comment faire, je suis tout ouie :)