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'utilisateurnobodysur 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 desymon(8)sont enregistrées sur le disque dur dans des basesrrdtool.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.sywebest un script PHP qui peut être installé dans une cage Apache.sylcd- permet d'afficher les informations desymux(8)sur des écrans LCD CrystalFontz et HD44780.sylcdaffiche la charge actuelle réseau sur une machineSymuxClient.pm- client PERL générique poursymux(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 baserrdtooldoit être :sensor_admlctemp0.rrdlm0.fan0, le nom de la baserrdtooldoit ê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