Installer et configurer la suite de monitoring symon

Auteur : Olivier BOYER - oboyer () ajoute ! org

Mots clés

symon, symux, syweb, supervision, monitoring, OpenBSD

Introduction

Ce document présente l'installation et la configuration de la suite de monitoring Symon, sur un système OpenBSD 4.3.

Présentation de la maquette

  • Un système à superviser sous OpenBSD 4.3
  • Le système supervisé exécute aussi le serveur symux(8)
  • Le serveur Apache d'OpenBSD de l'hôte est utilisé pour afficher les informations récoltées.

Note

Toutes les commandes présentées ici, sont à exécuter, sauf mention contraire, en tant qu'administrateur de la machine.

Pré-requis

  • Le système OpenBSD doit être installé et opérationnel
  • Le serveur Apache de l'hôte doit être fonctionnel

Présentation de la suite Symon

Les différents composants

La suite Symon est un système léger de monitoring pour les BSD et Linux. Elle est prévue pour être utilisée sur un ensemble de machines à travers un réseau local.

La suite est composée des éléments suivants :

  • les serveurs :
    • symon(8) - moniteur système léger. Il peut s'exécuter avec des privilèges équivalents à l'utilisateur nobody sur le système supervisé. Il n'offre que la fonctionnalité d'émission des données mesurées.
    • symux(8) - agrège et conserve les données. Les données reçues de symon(8) sont enregistrées sur le disque dur dans des bases rrdtool. symux(8) offre, au fur et à mesure, les statistiques systèmes collectées aux différents clients.
  • les clients :
    • syweb - dessine les graphiques des données stockées. syweb est un script PHP qui peut être installé dans une cage Apache.
    • sylcd - permet d'afficher les informations de symux(8) sur des écrans LCD CrystalFontz et HD44780. sylcd affiche la charge actuelle réseau sur une machine
    • SymuxClient.pm - client PERL générique pour symux(8).

Le projet est né sur OpenBSD, puis il a été porté sur les autres BSD et sur Linux.

Schéma d'interaction entre les composants

Le schéma suivant résume les interaction entre les différents éléments de la suite Symon :

+--------+   +--------+   +--------+
| host1  |   | host2  |   | hostN  |
+--------+   +--------+   +--------+
|symon(8)|   |symon(8)|   |symon(8)|
+--------+   +--------+   +--------+
    |            |             |
<échange réseau port 2100 (udp/tcp)>
     \           |             /
      \          |            /
   +-----------------------------+
   |     serveur de collecte     |
   +-----------------------------+
   |           symon(8)          |
   +-----------------------------+
   |          rrdtool(1)         |
   +-----------------------------+
                 |
<lecture des bases rrdtool locales>
        |            |        |
+--------------+  +-----+  +-----+
|SymuxClient.pm|  |syweb|  |sylcd|
+--------------+  +-----+  +-----+

Installer la suite symon

Installer le package symon

L'installation de symon est très simple, exécutez les commandes suivantes :

# export PKG_PATH="ftp://ftp.irisa.fr/pub/OpenBSD/$(uname -r)/packages/i386/"
# pkg_add symon
libart-2.3.20: complete
rrdtool-1.2.23: complete
symon-2.78: complete
--- symon-2.78 -------------------
Example configurations for both symon and symux have been installed
in /usr/local/share/examples/symon.

RRD files can be obtained by running
/usr/local/share/symon/c_smrrds.sh

Read the LEGACY section of symux(8) for information about
migrating RRDs from a previous symux version.

Liste des fichiers installés

Pour connaître les différents éléments installés, exécutez la commande suivante :

# pkg_info -L symon
Information for inst:symon-2.78

Files:
/usr/local/libexec/symon
/usr/local/libexec/symux
/usr/local/man/man8/symon.8
/usr/local/man/man8/symux.8
/usr/local/share/examples/symon/symon.conf
/usr/local/share/examples/symon/symux.conf
/usr/local/share/symon/c_smrrds.sh
/usr/local/share/symon/c_config.sh
/usr/local/share/symon/client/getsymonitem.pl
/usr/local/share/symon/client/SymuxClient.pm
/usr/local/share/symon/client/SymuxClient.0

Séparation des privilèges

L'installation du package symon crée automatiquement un utilisateur dédié _symon tel que :

# grep symon /etc/passwd /etc/group                           
/etc/passwd:_symon:*:535:535:symon Account:/var/empty:/sbin/nologin
/etc/group:_symon:*:535:

En effet, symon(8) se lance en tant qu'utilisateur root, ouvre les périphériques dont il a besoin pour le monitoring souhaité, puis abandonne ses privilèges pour s'exécuter en tant qu'utilisateur _symon (qui n'a aucun droits sur le système). L'utilisateur _symon se chroot(8) dans sa home.

Configurer la suite symon

Configurer symon

Lors de l'installation du package symon, un fichier de configuration d'exemple est copié dans /etc/symon.conf. Ce fichier sera le point de départ de notre configuration.

#/etc/symon.conf
# Configuration file for symon(8)

monitor {
        cpu(0), mem, pf,
        if(lo0), if(hme3), if(ral0),
        io(sd0), io(sd1), io(sd2), io(wd0),
        sensor(admlc0.temp0)
} stream to 127.0.0.1 2100

#EOF

Vous pouvez aussi utiliser le script /usr/local/share/symon/c_config.sh qui génère un exemple de configuration suivant les éléments de votre machine, et l'affiche sur la sortie standard.

Configurer symux

Lors de l'installation du package symon, un fichier de configuration d'exemple pour symux(8) est copié dans /etc/symux.conf. Ce fichier sera le point de départ de notre configuration.

#/etc/symux.conf
# Configuration file for symux(8).

mux 127.0.0.1 2100

source 127.0.0.1 {
        accept { 
                cpu(0), mem, pf
                if(lo0), if(hme3), if(ral0),
                io(sd0), io(sd1), io(sd2), io(wd0),
                sensor(admlc0.temp0)
        }
        write sensor(admlc0.temp0) in "/var/www/data/symon/rrds/localhost/sensor_admlctemp0.rrd"
        datadir "/var/www/data/symon/rrds/localhost"
}

#EOF

La directive datadir indique à symux(8) où écrire les données qu'il agrège de symon(8), ici var/www/data/symon/rrds/localhost.

Contourner un bug du client syweb

Il existe un bug dans la gestion des “sensors” dans le client syweb (au moins en version 0.55). Si on ne précise pas le nom de la base rrdtool alors le nom du fichier n'est pas reconnu dans le script class_graph.php, et le graphique n'est pas dessiné. Le nom doit être de la forme :

sensor_<sensor_driver_name_minus_indice><sensor_name_plus_indice>.rrd

Ainsi, pour suivre le sensor :

  • admlc0.temp0, le nom de la base rrdtool doit être : sensor_admlctemp0.rrd
  • lm0.fan0, le nom de la base rrdtool doit être : sensor_lmfan0.rrd

Il faut donc absolument préciser la directive write pour les “sensors” dans le fichier /etc/symux.conf.

Créer les bases rrdtool

Une fois le fichier /etc/symux.conf de créer, il faut créer et initialiser les bases de stockage pour rrdtool(1). On peut le faire “à la main”, ou utiliser le script /usr/local/share/symon/c_smrrds.sh fournit.

Créer l'arborescence

Exécutez les commandes suivantes :

# mkdir -p /var/www/data/symon/rrds/localhost
# chown -R root:wheel /var/www/data/symon
# chmod -R 755 /var/www/data/symon

Créer les fichiers rrdtool

Exécutez les commandes suivantes :

# export PATH=$PATH:/usr/local/libexec
# /usr/local/share/symon/c_smrrds.sh all
/var/www/data/symon/rrds/localhost/sensor_admlctemp0.rrd created
/var/www/data/symon/rrds/localhost/io_wd0.rrd created
/var/www/data/symon/rrds/localhost/io_sd2.rrd created
/var/www/data/symon/rrds/localhost/io_sd1.rrd created
/var/www/data/symon/rrds/localhost/io_sd0.rrd created
/var/www/data/symon/rrds/localhost/if_ral0.rrd created
/var/www/data/symon/rrds/localhost/if_hme3.rrd created
/var/www/data/symon/rrds/localhost/if_lo0.rrd created
/var/www/data/symon/rrds/localhost/pf.rrd created
/var/www/data/symon/rrds/localhost/mem.rrd created
/var/www/data/symon/rrds/localhost/cpu0.rrd created

Tester le fonctionnement

Lancer symon et symux en mode debug

Lancer symux

Pour démarrer symux en mode “debug”, exécutez la commande suivante sur un autre terminal :

# /usr/local/libexec/symux -d                          
symux version 2.78
program id=337
debug: size of churnbuffer = 1646
debug: shm from 0x824aa000 to 0x8278f7b0
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:33819
debug: realclients = 0; stalledclients = 0
debug: stringbuf = 0x824aa6c6
debug: rrdupdate -- /var/www/data/symon/rrds/localhost/sensor_admlctemp0.rrd 1180017094:37.000000
[...]

Lancer symon

Pour démarrer symon en mode “debug”, exécutez la commande suivante :

# /usr/local/libexec/symon -d
symon version 2.78
program id=17274
sending packets to udp 127.0.0.1 2100
started module sensor(admlc0.temp0)
started module io(wd0)
started module io(sd2)
[...]

Tester avec un client

Tester l'obtention de valeurs avec le client Perl fournit avec le package. Par exemple pour connaître la valeur d'idle du processeur :

# cd /usr/local/share/symon/client
# ./getsymonitem.pl
Usage: ./getsymonitem.pl <symux host> <symux port> <measured host> <stream> <item>
#
# ./getsymonitem.pl 127.0.0.1 2100 127.0.0.1 "cpu(0)" "idle"
95.90

Intégrer la suite au système

Maintenant que les serveurs fonctionnent, il faut configurer le système OpenBSD pour qu’il démarre automatiquement les serveurs de la suite symon, gère ses fichiers d’enregistrements et surveille les modifications des fichiers de configuration.

Créer les scripts de démarrage

Le plus simple est de créer des scripts personnalisés de démarrage et d'arrêt des daemons de la suite symon. Pour ce faire, créez le répertoire /etc/rc.d comme suit :

# mkdir /etc/rc.d
# chown root:wheel /etc/rc.d
# chmod 750 /etc/rc.d

Puis, créez comme suit les fichiers de démarrage :

Et enfin, positionnez les permissions :

# chown root:wheel /etc/rc.d/{symon,symux}
# chmod 740 /etc/rc.d/{symon,symux}

Modifier le fichier /etc/rc.conf.local

Ajouter les entrées suivantes :

# Start symon suite
symon_flags=""          # for normal use: ""
symux_flags=""          # for normal use: ""

Modifier le fichier /etc/rc.local

Pour lancer automatiquement la suite symon au démarrage de la machine, ajoutez les lignes suivantes à la fin du fichier /etc/rc.local :

# Start symon suite
if [ -x /etc/rc.d/symux ]; then
        echo -n ' symux'; /etc/rc.d/symux start & >/dev/null
fi
if [ -x /etc/rc.d/symon ]; then
        echo -n ' symon'; /etc/rc.d/symon start & >/dev/null
fi

Modifier le fichier /etc/rc.shutdown

Pour arrêter la suite symon à l'arrêt de la machine, ajoutez les lignes suivantes à la fin du fichier /etc/rc.shutdown :

# Stop symon suite
if [ -x /etc/rc.d/symon ]; then
        echo -n ' symon'; /etc/rc.d/symon stop & >/dev/null
fi
if [ -x /etc/rc.d/symux ]; then
        echo -n ' symux'; /etc/rc.d/symux stop & >/dev/null
fi

Modifier le fichier /etc/changelist

Pour que le système OpenBSD surveille les modifications apportées au script de démarrage et aux fichiers de configuration du service de gestion de l'onduleur, ajoutez les lignes suivantes au fichier /etc/changelist :

/etc/rc.d/symon
/etc/rc.d/symux
/etc/symux.conf
/etc/symon.conf

Modifier le fichier /etc/services

Dans notre configuration symux(8) attendant les données envoyées par symon(8) sur le port 2100 en TCP et UDP. Pour que la sortie de la commande netstat(1) soit plus conviviale, ajoutez à la fin du fichier /etc/services les lignes suivantes :

symux           2100/tcp                # symux(8)
symux           2100/udp                # symux(8)

Installer le client syweb

Contrairement aux daemons symon(8) et symux, le client syweb n'est pas disponible dans les ports d'OpenBSD. Il faut donc l'installer “à la main”, dans l'arborescence du serveur Apache (/var/www).

Pré-requis

Le package php4-core doit être déjà installé sur le système qui héberge le serveur web Apache d'OpenBSD, et le serveur Apache doit être démarré dans son mode par défaut, c'est à dire dans la cage /var/www. Le détail des configurations nécessaires à la réalisation de ces pré-requis sort du cadre de ce document.

Télécharger les sources

Exécutez les commandes suivantes :

# cd /tmp
# wget http://www.xs4all.nl/~wpd/symon/philes/syweb-0.55.tar.gz

Avertissement

L'arborescence du serveur Apache varie ici un peu de celle par défaut d'OpenBSD. En effet, les données ne sont pas stockées dans le répertoire htdocs, à la racine du serveur (/var/www). Elles le sont dans le répertoire /var/www/data, puis éventuellement dans /var/www/data/htdocs. Pour ceux qui ont une installation “standard”, suivez à la lettre les instructions du fichier /tmp/syweb/INSTALL.

Installer syweb

Une fois les sources téléchargées, décompressez les :

# cd /tmp
# tar xzf syweb-0.55.tar.gz

Puis, copiez syweb dans la cage d'Apache :

# cd /tmp/syweb
# cp -r syweb /var/www/

Copiez les layout dans le répertoire de symon dans la cage :

# cd /tmp/syweb
# mkdir /var/www/data/symon/layout
# cp symon/* /var/www/data/symon/layout

Enfin, créez un répertoire de cache :

# mkdir /var/www/data/symon/cache
# chown www:www /var/www/data/symon/cache

Configurer syweb

La configuration de syweb s'effectue via le fichier /var/www/syweb/setup.inc. Modifiez comme suit sa configuration pour qu'il s'exécute sur un système OpenBSD dont le serveur Apache est das une cage :

/* running OpenBSD, apache chrooted: */
$symon['rrdtool_path']='/bin/rrdtool';
$symon['cache_dir']='/data/symon/cache';
$symon['host_tree']='/data/symon/rrds';
$symon['layout_dir']='/data/symon/layout';

$symon['cache_duration']=20;
$symon['isolate_hosts']=1;
$symon['combine']['pfq']=1;
$symon['combine']['io']=1;
$symon['options']['df']='bytes';

/* DEFAULT USER CONFIGURATION ENDS HERE */

Préparer la cage d'Apache

Dépendances de syweb

L'intégration du client syweb au système OpenBSD est très bonne. L'archive des sources contient un script shell qui configure la cage Apache avec tous les éléments nécessaires à l'exécution de syweb.

Pour installer tous les composants nécessaires à syweb, exécutez le script suivant :

# /tmp/syweb/install_rrdtool.sh
rrdtool and libs installed in apache root

Voici les actions effectuées par le script sur un OpenBSD 4.1 :

# cd /var/www
# mkdir -p bin usr/lib usr/libexec
# cp -f /usr/local/lib/librrd.so.0.0 /usr/local/lib/libgd.so.20.34 \
/usr/lib/libz.so.4.1 /usr/local/lib/libpng.so.5.1 \
/usr/X11R6/lib/libfreetype.so.13.1 /usr/X11R6/lib/libfontconfig.so.3.0 \
/usr/local/lib/libjpeg.so.62.0 /usr/local/lib/libiconv.so.4.0 \
/usr/lib/libm.so.2.3 /usr/lib/libc.so.40.3 /usr/X11R6/lib/libexpat.so.5.0 \
usr/lib
# cp -f /usr/local/bin/rrdtool bin
# cp -f /usr/libexec/ld.so usr/libexec
# cp -f /bin/sh bin/sh

Fuseau horaire

Pour que l'affichage des heures dans syweb correspondent à l'heure locale de la machine, il faut copier le fichier /etc/localtime dans la cage Apache. Procédez comme suit :

# mkdir /var/www/etc
# cp /etc/localtime /var/www/etc
# chmod 444 /var/www/etc/localtime

Accès aux données rrdtool

Le client syweb a besoin d'accéder, en lecture, aux données stockées dans les bases rrdtool pour pouvoir les afficher sur un e page web. Or, ce fichier PHP est exécuté en tant qu'utilisateur www.

Vérifier que les permissions appliquées à l'arborescence /var/www/data/symon/rrds/localhost et aux bases rrdtool soient bien accessibles soit au groupe www, soit accessibles en lecture à tous.

Modifier la configuration d'Apache

Pour intégrer syweb à la configuration d'Apache, modifiez comme suit le fichier /var/www/conf/httpd.conf comme suit :

## syweb
Alias /syweb "/var/www/syweb/"

<Directory "/var/www/syweb">
    Options None
    AllowOverride None
    DirectoryIndex index.php
    Order allow,deny
    Allow from all
</Directory>

Pour forcer l'utilisateur du protocole HTTPS, ajoutez les lignes suivantes au début de la section <directory> :

    # Enable SSL for syweb
    SSLVerifyClient none
    SSLRequireSSL 

Puis relancez Apache :

# apachectl stop
# apachectl start

Tester syweb

Exécutez la commande suivante :

# lynx http://localhost/syweb/configtest.php

Et vérifiez qu'il n'y a pas d'erreurs.

Une fois que vous êtes sûr qu'il n'y a pas d'erreurs, pour des raisons de sécurité, interdisez l'utilisation de ce script :

# chmod 000 /var/www/syweb/configtest.php

Modifier l'affichage de la page syweb

Pour modifier l'affichage de la page syweb par défaut, vous pouvez créer un layout personnalisé. L'ensemble des layout est situé dans le répertoire /var/www/data/symon/layout. Le fichier suivant myserver.layout est donné à titre d'exemple.

#/var/www/data/symon/layout/myserver.layout
#
group   name="Introduction";
text    "<div> This page shows the usage of my main server. </div>";

group   name="Interfaces";
graph   rrdfile=/data/symon/rrds/localhost/if_hme3.rrd, title="wan interface";
graph   rrdfile=/data/symon/rrds/localhost/if_ral0.rrd, title="wifi interface";
graph   rrdfile=/data/symon/rrds/localhost/if_lo0.rrd, title="loopback interface";

group   name="Packet filter";
graph   rrdfile=/data/symon/rrds/localhost/pf.rrd, title="pf: stats on loginterface";

group   name="Cpu and memory";
graph   rrdfile=/data/symon/rrds/localhost/cpu0.rrd, title="cpu(0)";
graph   rrdfile=/data/symon/rrds/localhost/mem.rrd, title="memory";

group   name="Internal sensors";
graph   rrdfile=/data/symon/rrds/localhost/sensor_admlctemp0.rrd, title="internal temp (degC)";

group   name="Disks";
graph   rrdfile=/data/symon/rrds/localhost/io_sd0.rrd, title="sd0: system";
graph   rrdfile=/data/symon/rrds/localhost/io_sd1.rrd, title="sd1: data";
graph   rrdfile=/data/symon/rrds/localhost/io_sd2.rrd, title="sd2: dat2";
graph   rrdfile=/data/symon/rrds/localhost/io_wd0.rrd, title="wd0: data3";
#EOF

Liens

 
doc/openbsd/symon.txt · Dernière modification: 2009/12/23 22:36 (édition externe)     Haut de page