Le blog de Dju - Mot-clé - apcupsdUn peu de moto, un zeste de geek, et un brin d'autres trucs ;-)2024-03-22T17:50:26+01:00Djuurn:md5:5e61426dd704534f4aef077f5b82260bDotclearEnvoyer les alertes de munin sur twitterurn:md5:e8d4ddd7878cf7c9cb944f3f38e72f082010-12-21T20:22:00+01:002010-12-24T21:43:24+01:00DjuServeuralertesapcupsdmonitoringmuninonduleurserveurtwitter<p><img src="https://blog.crifo.org/public/201012/.twitter_t.jpg" alt="twitter" style="float:left; margin: 0 1em 1em 0;" title="twitter, déc. 2010" />
Aujourd'hui, une petite explication sur comment faire pour que munin cause à twitter.<br />
C'est bien d'envoyer des alertes par email, mais c'est encore mieux d'en envoyer également sur un compte twitter que l'on pourra facilement lire<br />
Et c'est tellement web 2.0 ... :p</p> <p><br />
Voici comment cela fonctionne:<br />
- un module capable de poster sur twitter<br />
- un compte unique dans lequel les message apparaitront<br />
- 2 lignes à rajouter dans le fichier de configuration de munin</p>
<p>Tout d'abord, on va se créer un nouveau compte twitter, on se rend <a href="https://twitter.com/signup">sur cette page du site twitter</a><br /></p>
<p>Une fois le compte créé, activé, connectez vous avec ce nouveau compte sur twitter.<br />
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</p>
<p>Puis, on va jetter un oeil <a href="http://blog.nicolargo.com/2010/11/twitter-en-ligne-de-commande-meme-avec-oauth.html">sur l'excellent article de nicolargo</a> qui va nous permettre d'obtenir un module python capable de poster des twits.<br />
(pour information, il était auparavant possible de le faire très simplement avec curl et l'authentification en HTTP, mais il faut maintenant utiliser <a href="http://oauth.net/">oAuth</a>)</p>
<p>Une fois la procédure d'installation suivie, on a donc un script exécutable, nommé tweetitcli.py. On le déplace dans /sbin</p>
<blockquote><p>mv ./tweetitcli /sbin/tweetitcli.py</p></blockquote>
<p>on vérifie qu'il fonctionne en postant un message de test :</p>
<blockquote><p>/sbin/tweetitcli.py 'message de test qui roxx'</p></blockquote>
<p>le message devrait alors apparaitre dans votre compte nouvellement créé.</p>
<p>Maintenant, passons aux choses sérieuse : faut interfacer le bouzin avec munin...<br />
Après moult tests (car munin est en fait assez sensible), j'ai pu trouver THE combinaison qui fonctionne au poil <img src="/themes/BlueSky/smilies/smile.gif" alt=":)" class="smiley" /></p>
<p>on va donc éditer le fichier <strong>/etc/munin/munin.conf</strong><br />
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 :</p>
<blockquote><p>contact.tweeter.command /sbin/munin-alrt.sh<br />
contact.tweeter.always_send warning critical</p></blockquote>
<p>Si vous êtes un peu attentif, vous vous demandez ce que ce script munin-alrt.sh vient faire la.... <br />
C'est tout simplement car le script python précédemment obtenu ne fonctionne pas avec un <strong>pipe</strong> <br />
En effet, lorsque munin va vouloir exécuter la commande du contact, il va faire (en gros) un</p>
<blockquote><p>echo "données" | command</p></blockquote>
<p>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.<br />
On édite donc le fichier /sbin/munin-alrt.sh et on met dedans ces quelques lignes :</p>
<pre>
#!/bin/bash
DATASTDIN=$(tr '[:upper:]' '[:lower:]' < /dev/stdin)
[ ${#DATASTDIN} -gt 140 ] && DATASTDIN=${DATASTDIN:0:140}
/sbin/tweetitcli.py "$DATASTDIN"
</pre>
<p>par mesure de précaution, on peut rajouter dans ce meme script une petite ligne pour logger les alertes :</p>
<blockquote><p>echo "$DATASTDIN" >> /var/run/munin/munin-tweeter.log</p></blockquote>
<p>qu'on désactivera une fois que tout marche bien.</p>
<p>puis, une fois le fichier enregistré et fermé, on n'oublie pas de donner les permissions d'execution<br /></p>
<blockquote><p>chmod +x /sbin/munin-alrt.sh</p></blockquote>
<p>Accessoirement, au script python aussi</p>
<blockquote><p>chmod +x /sbin/tweetitcli.py</p></blockquote>
<p>Encore une fois, on vérifie que ce script fonctionne bien et appelle tweetitcli.py :</p>
<blockquote><p>echo "Deuxième message de test" | /sbin/munin-alrt.sh</p></blockquote>
<p>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 :</p>
<pre>
#!/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
</pre>
<p>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.<br />
On le rend également executable</p>
<blockquote><p>chmod +x /etc/munin/plugins/test_alarm.sh</p></blockquote>
<p>et finalement, on relance munin</p>
<blockquote><p>/etc/init.d/munin-node restart</p></blockquote>
<p>puis on attend quelques minutes (les detection se font toutes les 5 minutes)<br />
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" <img src="/themes/BlueSky/smilies/smile.gif" alt=":)" class="smiley" /></p>
<p><img src="https://blog.crifo.org/public/201012/munin-twitter-1.jpg" alt="munin-twitter-1.jpg" title="munin-twitter-1.jpg, déc. 2010" /></p>
<p>une fois l'alerte reçue, re-éditez le plugin de test, et changez la valeur. 5 minutes après, 2è alerte :
<img src="https://blog.crifo.org/public/201012/munin-twitter-2.jpg" alt="munin-twitter-2.jpg" title="munin-twitter-2.jpg, déc. 2010" /></p>
<p>Et voila ! c'est pas beau la technologie ?</p>
<p>Vous pouvez maintenant au choix surveiller ce nouveau compte, ou bien avec votre compte habituel vous y abonner de manière à recevoir les alertes.<br />
Ici, j'ai créé un 2è compte histoire de ne pas pourrir le 1er si y'a des problèmes... c'est votre choix</p>
<p><strong>-> Que faire si ça marche pas ?!!!</strong></p>
<p>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)<br />
É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.<br />
Alez jetter un coup d'oeil dans les logs, ainsi que dans votre boite mail (cron vous envoie un mail si ca bloque)<br />
Enfin, allez voir <a href="http://munin-monitoring.org/wiki/Debugging_Munin_plugins">les méthodes de debug sur le wiki officiel de munin</a></p>
<p><strong><ins>EDIT au 23/12/2010</ins></strong><br />
Pendant qu'on est dans l'alerting par twitter, voici également un moyen de remonter les alertes de votre onduleur, <a href="https://blog.crifo.org/post/2010/01/04/Gerer-un-onduleur-avec-ubuntu">avec apcupsd</a><br />
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" :</p>
<blockquote><p>TWITCMD=/sbin/twit_alert.py<br />
$TWITCMD "$MSG"</p></blockquote>
<p>il faut donc rajouter ces 2 lignes dans les script suivant, se trouvant dans le repertoire <strong>/etc/apcupsd/</strong><br />
- changeme : lorsque la batterie est naze et a besoin d'être remplacée<br />
- commfailure : perte de connexion entre la machine et l'onduleur <br />
- commok : la liaison avec l'onduleur est rétablie<br />
- offbattery : lors d'une coupure de courant, l'onduleur passe sur batterie<br />
- onbattery : courant rétabli après une coupure</p>
<p>Et voila le résultat que vous pourrez obtenir sur votre compte twitter en cas d'alerte :</p>
<p><img src="https://blog.crifo.org/public/201012/apcupsd_twitter.jpg" alt="apcupsd_twitter.jpg" title="apcupsd_twitter.jpg, déc. 2010" /></p>
<p>Sinon je suis à la recherche d'une methode équivalente pour <a href="https://blog.crifo.org/post/2009/12/26/Monitorer-son-serveur">Monit</a>, qui permet d'envoyer des alertes par email, mais pas d'executer directement une commande. Si vous savez comment faire, je suis tout ouie <img src="/themes/BlueSky/smilies/smile.gif" alt=":)" class="smiley" /></p>https://blog.crifo.org/post/2010/12/21/Envoyer-les-alertes-de-munin-sur-twitter#comment-formhttps://blog.crifo.org/feed/atom/comments/79Gèrer un onduleur avec ubuntuurn:md5:a0a14647e8e790bf1778f0182b3c7a502010-01-04T15:50:00+01:002010-01-04T19:39:46+01:00DjuServeurapcupsdbatterieonduleurubuntuusb<p><img src="https://blog.crifo.org/public/201001/.backups_rs_800_va_apc_t.jpg" alt="onduleur" style="float:left; margin: 0 1em 1em 0;" title="onduleur, janv. 2010" />
Bonjour<br />
Maintenant que le zotac est bien installé et fonctionne bien, je vais vous montrer comment installer Apcupsd, qui permet de gérer facilement un onduleur à partir de linux.<br />
Ce petit logiciel permet d'envoyer des alertes par email, mais surtout d'éteindre proprement la machine quand la batterie n'a plus de jus.</p> <p>He oui, autant une machine récente supporte relativement bien les coupures de courant, autant les veilles machines qui tournent sans arrêt depuis plusieurs années le supportent beaucoup moins bien.... Grâce à un onduleur et un logiciel de gestion, la machine peut être arrêtée proprement et ainsi peut redémarrer sans souci par la suite <img src="/themes/BlueSky/smilies/smile.gif" alt=":)" class="smiley" /></p>
<p>Une fois l'onduleur branché en amont de la machine, on vérifie que le système le voit bien avec la commande <strong>lsusb</strong> <br />
Vous devriez voir une ligne ressemblant à ceci :</p>
<blockquote><p>Bus 004 Device 002: ID 051d:0002 American Power Conversion Uninterruptible Power Supply<br /></p></blockquote>
<p>Maintenant, on passe en root et on installe apcupsd</p>
<blockquote><p>aptitude install apcupsd<br /></p></blockquote>
<p>Tous les fichiers de config se trouvent dans le dossier /etc/apcupsd.<br />
Tout d'abord on édite le fichier <strong>/etc/default/apcupsd</strong> et on met la valeur <strong>ISCONFIGURED</strong> à <strong>yes</strong><br />
Ensuite, on édite le fichier de config' principal: <strong>/etc/apcupsd/apcupsd.conf</strong></p>
<p>voici le minimum à renseigner, dans la section <strong>General configuration parameters</strong><br /></p>
<blockquote><p>UPSNAME mon_onduleur<br />
UPSCABLE usb<br />
UPSTYPE usb<br />
DEVICE<br /></p></blockquote>
<p>Maintenant, on va configurer le comportement de l'onduleur</p>
<p><br />## temps en secondes au bout du quel l'onduleur détectera la coupure<br />
ONBATTERYDELAY 5</p>
<p><br />## si batterie inferieure à 5% on éteint la machine<br />
BATTERYLEVEL 5</p>
<p><br />## si charge de la batterie moins de 3 minutes, on éteint la machine<br />
MINUTES 3</p>
<p><br />## si plus de n minutes passées sur batterie, extinction de la machine. fonction désactivée par défaut<br />
TIMEOUT 0</p>
<p><br />## temps en secondes avant l'extinction à partir du quel les utilisateurs loggés sur la machine seront prévenus régulièrement qu'il faut se déconnecter <br />
ANNOY 300</p>
<p><br />## prévenir les utilisateurs après 60 secondes lors d'une coupure de courant<br />
ANNOYDELAY 60</p>
<p><br />## empecher les utilisateurs de se logger sur la machine ou pas, lors de la coupure de courant. désactivé par défaut<br />
NOLOGON disable</p>
<p><br />## temps en secondes pendant lequel apcupsd continuera a tourner, une fois l'extinction de la machine lancée. désactivé par défaut<br />
KILLDELAY 0</p>
<p>Plus d'infos sur chaque variable et valeur peuvent être trouvées ici: <a href="http://linux.die.net/man/8/apcupsd">http://linux.die.net/man/8/apcupsd</a></p>
<p>Maintenant, on passe à la configuration IP</p>
<p><br />## active le serveur apcupsd sur ip, pour obtenir les informations de l'onduleur<br />
NETSERVER ON</p>
<p><br />## sur quelle ip écouter le serveur.<br />
<br />## 127.0.0.1 = local uniquement, les infos ne seront pas disponibles à partir d'une autre machine<br />
<br />## 0.0.0.0 = toutes les ip de la machine<br />
<br />## attention, on ne PEUT PAS spécifier cette variable plusieurs fois, ou donner une liste d'adresses ip<br />
NISIP 0.0.0.0</p>
<p><br />## sur quel port le serveur doit il écouter (3551 par défaut)<br />
NISPORT 3551</p>
<p><br />## fichiers de logs des évènements<br />
EVENTSFILE /var/log/apcupsd.events</p>
<p><br />## taille maximum du fichier de log, en Kilo-octets<br />
EVENTSFILEMAX 10</p>
<p><br />## valeur par défaut pour gèrer l'onduleur d'une seule machine<br />
UPSCLASS standalone</p>
<p><br />## si onduleur géré par une seule machine, désactivé<br />
UPSMODE disable</p>
<p>le reste des lignes peut être laissé par défaut.</p>
<p>Maintenant qu'on a tout bien configuré, on va lancer apcupsd</p>
<blockquote><p>/etc/init.d/apcupsd start</p></blockquote>
<p>et voici comment accèder aux infos de l'onduleur :</p>
<blockquote><p>apcaccess</p></blockquote>
<p>voici le genre d'informations que l'on obtient (ici, l'onduleur branché au zotac)<br /></p>
<pre>
APC : 001,043,1052
DATE : Mon Jan 04 15:35:11 CET 2010
HOSTNAME : zotac
VERSION : 3.14.6 (16 May 2009) debian
UPSNAME : zotac
CABLE : USB Cable
MODEL : Back-UPS BR 800
UPSMODE : Stand Alone
STARTTIME: Mon Jan 04 15:35:10 CET 2010
STATUS : ONLINE
LINEV : 222.0 Volts
LOADPCT : 42.0 Percent Load Capacity
BCHARGE : 100.0 Percent
TIMELEFT : 19.0 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME : 0 Seconds
OUTPUTV : 230.0 Volts
SENSE : Medium
DWAKE : 000 Seconds
DSHUTD : 000 Seconds
LOTRANS : 194.0 Volts
HITRANS : 264.0 Volts
RETPCT : 000.0 Percent
ITEMP : 29.2 C Internal
ALARMDEL : Always
BATTV : 27.1 Volts
LINEFREQ : 50.0 Hz
LASTXFER : No transfers since turnon
NUMXFERS : 0
TONBATT : 0 seconds
CUMONBATT: 0 seconds
XOFFBATT : N/A
SELFTEST : NO
STATFLAG : 0x07000008 Status Flag
SERIALNO : NB0730022333
BATTDATE : 2001-09-25
NOMOUTV : 230 Volts
NOMINV : 230 Volts
NOMBATTV : 24.0 Volts
NOMPOWER : 540 Watts
FIRMWARE : 9.o4 .I USB FW:o4
APCMODEL : Back-UPS BR 800
END APC : Mon Jan 04 15:35:14 CET 2010
</pre>
<p>on obtient notamment la température interne de l'onduleur (ITEMP) et le temps restant sur la batterie si coupure (TIMELEFT), la charge sur l'onduleur (LOADPCT) et la charge de la batterie (BCHARGE)<br /></p>
<p>Ici, vous voyez que j'ai 42% de charge électrique, et 19 minutes de courant dispo, car j'ai branché également d'autres appareils important sur mon onduleur.<br /></p>
<p>Il y a notamment le switch réseau, mon ordi principal avec une carte graphique "delamorkitue" (trèès gourmande en courant) avec son écran 24" et ma chaine hifi qui me sert également de réveil matin (ben oui, en cas de coupure la nuit, par d'alarme le matin :D )</p>
<p>En ayant branché juste le zotac sur l'onduleur, le temps passe à ~75 minutes.<br />
A coté, mon routeur qui est tout seul sur son onduleur (avec la freebox quand meme) prend 4% de la capacité, ce qui laisse 70mn <img src="/themes/BlueSky/smilies/wink.gif" alt=";)" class="smiley" /> )</p>
<p>Si on a renseigné une ip sur laquelle écouter (ou 0.0.0.0) on peut accéder depuis le réseau aux infos, depuis une autre machine.<br />
Pour ce faire, on peut taper la commande</p>
<blockquote><p>apcaccess status ip_de_la_machine</p></blockquote>
<p>par exemple, j'ai également un onduleur sur mon routeur, donc pour accèder aux infos, je tape</p>
<blockquote><p>apcaccess status 192.168.0.1</p></blockquote>
<p>Maintenant que tout marche bien, on va configurer une dernière chose, les alertes par email.<br />
Toujours dans le dossier /etc/apcupsd, on trouve plusieurs fichiers, qu'on va devoir éditer:</p>
<p>changeme
<br />## fichier appelé lorsque la batterie est naze et a besoin d'être remplacée</p>
<p>commfailure
<br />## fichier appelé lors d'une perte de connexion entre la machine et l'onduleur (par exemple, si vous avez débranché le cable usb sans faire exprès... :D )</p>
<p>commok
<br />## fichier appelé lorsque la liaison avec l'onduleur est rétablie</p>
<p>offbattery
<br />## fichier appelé lorsqu'il y a une coupure de courant</p>
<p>onbattery
<br />## fichier appelé lorque le courant est rétabli après une coupure</p>
<p>Dans chacun de ces fichiers, la structure est la meme.<br />
La ligne importante est: <strong>SYSADMIN=root</strong><br />
root ètant l'adresse email à laquelle le mail sera envoyé.<br />
Il est d'ailleurs d'avoir installé auparavant un postfix, ou exim, ou tout autre script permettant d'envoyer un mail<br />
On peut d'ailleurs appliquer des changements un peu plus approfondis à ces fichiers, vu que ce sont des scripts shell. On peut donc leur faire faire ce que l'on veut. <img src="/themes/BlueSky/smilies/wink.gif" alt=";)" class="smiley" /></p>
<p>Voila, ça fait pour moins un an et demi que j'ai un onduleur apc sur mon routeur, géré par apcupsd, et jamais de problème.<br />
Il y a eu pas mal de coupures électriques,mais jamais plus d'une demi-heure, donc jamais d'extinction de machine.<br /></p>https://blog.crifo.org/post/2010/01/04/Gerer-un-onduleur-avec-ubuntu#comment-formhttps://blog.crifo.org/feed/atom/comments/21