Simone surveille tes babasses, tu peux dormir tranquille

GNU/Linux Magazine HS n° 030 | mai 2007 | Landry (gaston) Breuil
Creative Commons
  • Actuellement 0 sur 5 étoiles
0
Merci d'avoir participé !
Vous avez déjà noté cette page, vous ne pouvez la noter qu'une fois !
Votre note a été changée, merci de votre participation !
Comme le titre l’indique, vous l’avez compris, nous allons causer *monitoring*. Attention, ça c’est du buzzword qui fait frétiller les managers : ils aiment avoir des graphes, des chiffres, des trucs en vert qui clignotent, des indicateurs, des alertes, et tout ce genre de mots-clés qui justifient leur paie indécente tout en leur faisant récupérer tous les lauriers de votre travail. Le manager est fourbe, le manager est un vil suppôt de Satan. Pour se consoler, on peut toujours se dire que le service informatique lui refile exprès un laptop mista-certified-100%-bloatware.

Pour l’exemple, ce qui vient se déroulera sur un OpenBSD-current récent. J’aurai du coup l’occasion de vous parler d’une des spécificités de ce BSD qui fait couler beaucoup d’encre, l’apache 1.3-heavily-patched-chrooté-par-défaut.

Un petit coup de make search key=monitor dans /usr/ports nous renvoie plein d’informations, du genre Nagios et d’autres trucs usine à gaz dans le genre. Pas de trucs connus comme munin et ganglia (ce dernier étant plutôt orienté cluster). Mais une petite inconnue attire notre attention... je veux parler de symon. Maintenant, cher lecteur, re-regarde le titre de l’article. Et là, tu te demandes quel type de substance l’auteur de l’article prend (en l’occurrence, un thé fruits rouges-menthe), et qui est cette Simone qui est censée surveiller tes babasses, mais là n’est pas la question. D’ailleurs, entrons dans le vif du sujet, sans plus discuter le bout de gras.

apt-get-pkg_add-urpmi-make-moi-tout-ca

Vous voulez plus d’infos ? Et vous pensez que c’est moi qui vais vous les donner ? Que nenni mes braves, pkg_add et pkg_info sont là pour ça !!

landry@renton:~/ $sudo pkg_add symon

symon-2.75p0:gd-2.0.34: complete                                                                                                        

symon-2.75p0:rrdtool-1.0.49p3: complete                                                                                                 

symon-2.75p0: complete

Information for symon-2.75p0

Comment: active monitoring tool

Description: symon is a lightweight system monitor that

measures cpu, memory, interface and disk statistics every 5

seconds. This information is then spooled over "the network"

to symux for further processing.

Maintainer: Willem Dijkstra <wpd@xs4all.nl>

WWW: www.xs4all.nl/~wpd/symon

Hm, déjà on note que Simone aime bien rrdtool. Elle est cool Simone, elle connaît les bonnes choses de la Vie, car, bien sûr, j’espère que vous le saviez déjà, mais RRDTOOL[1] c’est l’AMOUR avec un GRAND E !! Et avec le module perl, c’est le NIRVANA, l’EXTASE !!!

Et vous dites avoir rencontré cette « Simone » le 12 mars ?

Un des trucs convi avec symon, déjà c’est un projet qui est né sur OpenBSD et qui depuis a été porté sur les autres BSD et Linux, et, en plus, il fonctionne en total réparti-over-ton-network-t’wa. Alors, on va essayer de la faire simple, y’a tout d’abord les anges gardiens symon qui vont monitorer les différentes machines, et qui vont envoyer via le réseau toutes les infos qu’ils collectent à leur pote saint-symux, qui lui va se charger de ranger tous ces chiffres dans des grimoires-fichiers RRD tout propres. Ensuite, un client (dans notre cas, le compère-verpépère syweb) pourra venir lire ces RRD et en faire de belles icônes-graphes ou juste afficher une valeur sur un écran lcd comme sylcd, et bien encore d’autres choses plus funky (à vous de faire travailler votre imagination !) avec SymuxClient.pm. À noter que l’ange symon utilise à outrance la séparation de privilèges, technique chérie des devs OpenBSD/ Mais pour plus d’infos là-dessus, je vous laisse jouer avec MikiPédia. Sachez juste qu’il se lance en root, ouvre les fichiers/devices pour lesquels il a besoin des pleins pouvoirs, et droppe ses privilèges pour tourner en tant qu’utilisateur _symon, qui lui n’a aucun droit, ni de vraie maison, et encore moins de shell. Il se chroote même dans sa fausse maison, c’est dire s’il n’a vraiment plus d’attaches avec personne, et qu’il ne fera que son boulot, à savoir collecter des données brutes. Le saint-père-symux peut être lancé sous n’importe quelle identité, tant qu’il a les bons droits pour écrire les RRD. Pour l’exemple, il sera lancé avec mon UID, et j’aurai chowné -R moi:moi /var/www/symon comme un sauvage.

Mais encore ?

Bon, on a fait connaissance avec Simone, voyons ce qu’elle a dans le ventre. Pour la démo sans filet, je fais tout ça sur une seule machine, mais évidemment ça marche pareil avec plein d’autres babasses, faut juste lancer les anges sur chacune. Hop, direct, à froid, on attaque la conf d’un ange. Rhôôô qu’ils sont gentils, ils nous filent un fichier de conf par défaut, un script pour en générer un correspondant à notre matos, et un script pour créer les RRD. Pour les différentes sources d’informations, sachez que notre ange gardien peut monitorer les CPU, la mémoire, la bande passante, l’ami PF (Salut ! Ça va depuis la dernière fois ?), les queues altQ, les senseurs matériels, les disques, les processus, et que sais-je encore, et tout ça une fois toutes les 5 secondes par défaut. Hop, pour la peine, je vous montre mon fichier de conf.

#/etc/symon.conf

monitor { cpu(0), mem, df(sd0a), if(lo0), if(rl0), pf, mbuf,

  sensor(lm0.temp0), sensor(lm0.temp1), sensor(lm0.fan0),

  proc(sshd), proc(httpd), io(sd0)

} stream to 127.0.0.1 2100

Comme vous pouvez le voir, rien de bien ébouriffant, j’ai un disque SCSI donc c’est sdX et pas wdX, et l’ange dit : « j’envoie mes confessions au saint-père qui m’écoute d’une oreille attentive sur la fréquence 2100 du paradis local ». Un petit truc à noter sur vos calepins : PF ne sera monitoré que sur les interfaces qui ont été déclarées loginterface dans /etc/pf.conf. Passons maintenant à la conf du saint-symux.

#/etc/symux.conf

mux 127.0.0.1 2100

source 127.0.0.1 {

  accept { cpu(0), mem, df(sd0a), if(lo0), if(rl0), pf,

    mbuf, sensor(lm0.temp0), sensor(lm0.temp1),

    sensor(lm0.fan0), proc(sshd),proc(httpd), io(sd0)

  }

  write sensor(lm0.temp0) in \

    "/var/www/symon/rrds/localhost/sensor_lmtemp0.rrd"

  write sensor(lm0.temp1) in \

    "/var/www/symon/rrds/localhost/sensor_lmtemp1.rrd"

write sensor(lm0.fan0) in \

    "/var/www/symon/rrds/localhost/sensor_lmfan0.rrd"

  datadir "/var/www/symon/rrds/localhost"

}

Que dire de spécial... Le saint-père écoutera ses anges sur la fréquence 2100 et, pour chacun d’eux, il déclare qu’il attend d’eux telles confessions, et qu’il les rangera dans tel livre sacré. Ici, deux petits détails à noter dans vos petits cahiers : j’ai dû contourner un petit bug du saint-père (nul n’est parfait) avec la gestion des senseurs, donc j’ai spécifié explicitement que les données devaient être stockées dans un fichier choisi par moi. De plus, il va bien prendre garde à ranger ces précieux grimoires emplis de confessions dans une étagère répertoire accessible par l’être-au-dessus, j’ai nommé le grand sage indien, qui plane un peu dans son monde à lui. Allez, *shazaaam* un peu de magie et on fait de la genèse sur tout ça.

landry@renton:~/ $sudo mkdir -p /var/www/symon/rrds/localhost

landry@renton:~/ $sudo chown -R landry:landry /var/www/symon

landry@renton:~/ $/usr/local/share/symon/c_smrrds.sh all

/var/www/symon/rrds/localhost/io_sd0.rrd created

/var/www/symon/rrds/localhost/proc_sshd.rrd created

/var/www/symon/rrds/localhost/proc_httpd.rrd created

/var/www/symon/rrds/localhost/sensor_lmfan0.rrd created

/var/www/symon/rrds/localhost/sensor_lmtemp1.rrd created

/var/www/symon/rrds/localhost/sensor_lmtemp0.rrd created

/var/www/symon/rrds/localhost/mbuf.rrd created

/var/www/symon/rrds/localhost/pf.rrd created

/var/www/symon/rrds/localhost/if_rl0.rrd created

/var/www/symon/rrds/localhost/if_lo0.rrd created

/var/www/symon/rrds/localhost/df_sd0a.rrd created

/var/www/symon/rrds/localhost/mem.rrd created

/var/www/symon/rrds/localhost/cpu0.rrd created

Et voila, les grimoires sont prêts, il ne reste plus aux anges qu’à récupérer les confessions, et à les envoyer au saint-père.

landry@renton:~/ $/usr/local/libexec/symon -d

warning: could not open "/dev/pf", Permission denied

fatal: chroot failed: Operation not permitted

# oups, effectivement, j’ai oublié un petit truc....

landry@renton:~/ $sudo /usr/local/libexec/symon -d

symon version 2.75

program id=1315

sending packets to udp 127.0.0.1 2100

started module io(sd0)

....

# dans un autre term

landry@renton:~/ $/usr/local/libexec/symux -d     

symux version 2.75

program id=26808

listening for incoming symon traffic on udp 127.0.0.1 2100

listening for incoming connections on tcp 127.0.0.1 2100

debug: good data received from 127.0.0.1:22441

debug: realclients = 0; stalledclients = 0

debug: rrdupdate /var/www/symon/rrds/localhost/io_sd0.rrd

....

Miracle, ils se parlent !!!! Alleluiiiaa !!! Bon, ils sont un peu bavards les cocos, donc on [ctrl-c] tout ça, et on les relance en mode « chut », sans oublier d’ajouter /usr/local/libexec/symon && su - landry -c /usr/local/libexec/symux dans /etc/rc.local pour que les deux démons soient lancés au démarrage. Ici, évidemment, adaptez en fonction de l’user que vous avez choisi, pour faire tourner symux. Laissons-les travailler en paix, ils savent ce qu’ils ont à faire... montons un peu plus haut, et faisons la connaissance du grand sage indien plein de pansements, nommé affectueusement « l’apache » (pfiou, elle vient de loin celle-là !).

Allume le calumet, man !

Bon, donc l’apache, comme je le disais, il plane dans son monde-nuage-chroot, et va falloir lui monter des trucs là-haut pour qu’il puisse bosser efficacement en toute tranquillité.

# world->invoke(apache)

root@renton:~/ #httpd

# ne pas oublier httpd_flags="" dans /etc/rc.conf.local

# si l'on veut qu'il soit lancé au démarrage

root@renton:~/ #pkg_add php4-core        

php4-core-4.4.1p2:recode-3.6p3: complete                                                                                           

php4-core-4.4.1p2: complete                                                                                                        

--- php4-core-4.4.1p2 -------------------

To finish the install, enable the php4 module with:

/usr/local/sbin/phpxs -s

To enable parsing of PHP scripts, add the following to

/var/www/conf/httpd.conf:

AddType application/x-httpd-php .php

Copy the config file below into /var/www/conf/php.ini

/usr/local/share/examples/php4/php.ini-recommended

Don't forget that the default OpenBSD httpd is chrooted

into /var/www by default, so you may need to create support

directories such as /var/www/tmp for PHP to work correctly.

root@renton:~/ #/usr/local/sbin/phpxs -s

[activating module `php4' in /var/www/conf/httpd.conf]

.... divers trucs ....

.... on décommente la ligne AddType dans le httpd.conf ....

root@renton:~/ #apachectl restart

Syntax error on line 267 of /conf/httpd.conf:

Cannot load /usr/lib/apache/modules/libphp4.so into server:

File not found

Ça semblait trop beau, il en manque un peu... Effectivement, phpxs -s a installé ses petits dans /usr/lib/apache/modules/ et l’apache ne connaît rien en dehors de /var/www… quand je vous disais qu’il plane dans son monde !! Qu’à cela ne tienne, on va arranger tout ça.

root@renton:~/ #mkdir -p /var/www/usr/lib/apache/modules

root@renton:~/ #cp /usr/lib/apache/modules/libphp4.so \

  /var/www/usr/lib/apache/modules

root@renton:~/ #mkdir /var/www/etc

root@renton:~/ #cp /usr/share/zoneinfo/Europe/Paris \

  /var/www/etc/localtime

root@renton:~/ #apachectl start

Et là, nous avons le bonheur de voir ces nuages de fumée au-dessus du tipi de notre ami : Apache/1.3.29 (Unix) PHP/4.4.1 mod_ssl/2.8.16 OpenSSL/0.9.7j configured. Joie, bonheur, félicité ! Maintenant, on va le faire travailler, parce que bon, les anges et le saint-père, à quoi ça sert qu’ils se décarcassent si le compère-verpépère syweb est pas en train de turbiner aussi chez l’apache ?

Vous avez des preuves ?

Bon, donc, le compère-syweb, on le récupère chez son papa (hint: la ligne WWW dans pkg_info symon. Oui, c’est pas packagé dans le ports-tree.) et on va l’installer dans /var/www/htdocs/syweb, après avoir pris soin de monter les outils nécessaires dans le nuage du grand sage. Oh, que ça tombe bien, on nous fournit un script pour ça (ici, rien de mystérieux, on peuple juste le chroot avec le binaire de rrdtool et les bibliothèques dont il dépend).

root@renton:~/ #tar xvzf syweb-0.55.tar.gz

root@renton:~/ #cd syweb && ./install_rrdtool.sh

rrdtool and libs installed in apache root

root@renton:~/syweb/ $ls -FR /var/www/{bin,usr}

/var/www/bin:

rrdtool*    sh*

/var/www/usr:

lib/     libexec/

/var/www/usr/lib:

apache/         libfontconfig.so.3.0 libiconv.so.4.0

libc.so.40.3    libfreetype.so.13.1 libjpeg.so.62.0*        

libexpat.so.5.0 libgd.so.20.34*      libm.so.2.3             

libpng.so.5.1   librrd.so.0.0*       libz.so.4.1

/var/www/usr/lib/apache:

modules/

/var/www/usr/lib/apache/modules:

libphp4.so*

/var/www/usr/libexec:

ld.so*

Comme on peut le voir, tout le monde est présent pour la fête qui se prépare... On lit le parchemin INSTALL, et on copie ce qu’il faut là-où-il-faut. (cp -R syweb/htdocs/* /var/www/htdocs && cp -R syweb/symon/* /var/www/symon). On édite /var/www/htdocs/syweb/setup.inc pour configurer syweb avec le profil openbsd chrooted. On crée le répertoire de cache qui servira pour stocker les images (mkdir /var/www/symon/cache && chown www:www /var/www/symon/cache), et ta-daaam, on prend son browser favori (graphique, au moins... links -g fera l’affaire... ‘fin je vous oblige pas) et on visite http://127.0.0.1/syweb/configtest.php. Et on vérifie que tout va bien. Et on commence à sourire. Et on visite http://127.0.0.1/syweb/index.php. Et là, un immense sourire béat se dessine sur notre figure. C’est le moment d’aller chercher une bière bien méritée dans le frigo.

Que dire de plus sur ce petit outil qui peut vous rapporter gros… ici, l’intérêt était de montrer l’installation dans l’apache chrooté d’OpenBSD, mais l’agent de monitoring peut très bien tourner sur d’autres OS du bien, comme symux et syweb... c’est la magie de la portabilité du code !

Décidément, tous ces gens, les anges, le saint-père, le grand sage indien, et le compère-verpépère, quand ils bossent de concert, ils font de belles choses. Et ce sont tous des amis de Simone. Elle est quand même super sympa, la preuve, elle nous a laissé en cadeau deux dessins, plus parlants qu’un long discours :

Voila, c’est fini pour aujourd’hui, j’aurais aimé vous parler de <teaser>monit</teaser> aussi, mais Lefinnois m’a piqué mon stylo, fallait rendre les copies... donc rendez-vous pour plus de fun dans un prochain numéro !

Linqses

- symon : http://www.xs4all.nl/~wpd/symon/

- rrdtool : http://oss.oetiker.ch/rrdtool/