Catégorie : Administration système     Tags : ,      0 Commentaire

    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 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:~/ $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 :

    /img-articles/lmhs/30/cc-art-simone/fig-1.jpg/img-articles/lmhs/30/cc-art-simone/fig-2.jpg

    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/

    Posté par Landry Breuil (gaston) | Signature : Landry « gaston » Breuil (GCU) | Article paru dans Creative Commons License

    Laissez une réponse

    Vous devez avoir ouvert une session pour écrire un commentaire.