Aujourd’hui nous allons parler d’Observium. C’est un système de supervision réseaux qui collecte ses informations par le biais du protocole SNMP.
Observium possède une interface web moderne et intuitive pour observer les informations collectées.
Je l’utilise au quotidien pour surveiller l’ensemble de mes machines et équipements réseaux.
La documentation d’Observium ne propose que l’installation avec Apache. Préférant nettement NGinx, nous allons voir comment installer Observium avec un serveur LEMP (NGinx, MariaDB, PHP7), en HTTPS, sous Debian 8.
Pré requis
– Un serveur web LEMP fonctionnel (installation disponible ici)
– Un accès SSH au serveur
Création de la base de données
Observium nécessite une base de données pour stocker les différentes informations.
Nous allons créer un utilisateur dédié à Observium qui aura accès à cette base.
1 |
mysql -u root -p |
1 2 3 4 5 |
CREATE DATABASE observium DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER userdb@localhost IDENTIFIED BY 'passwd'; GRANT ALL PRIVILEGES ON observium.* TO userdb@localhost; FLUSH PRIVILEGES; EXIT; |
Installation d’Observium
Avec notre serveur web fonctionnel ainsi que notre base de données, nous pouvons passer à l’installation à proprement dit d’Observium.
Nous allons commencer par installer quelques paquets complémentaires :
1 |
apt-get install php7.0-cli php7.0-gd php7.0-mcrypt php7.0-json php-pear snmp snmpd fping python-mysqldb rrdtool subversion whois mtr-tiny libvirt-bin ipmitool graphviz imagemagick |
Puis nous allons récupérer les sources de la dernière version d’Observium et décompresser l’archive :
1 2 3 |
cd /opt wget http://www.observium.org/observium-community-latest.tar.gz tar xvf observium-community-latest.tar.gz && rm observium-community-latest.tar.gz |
Dans cette archive il manque deux dossiers nécessaires à la collecte de logs et de stats pour les graphs. Nous allons donc les créer :
1 2 3 |
cd observium mkdir {logs,rrd} chown www-data:www-data logs rrd && chmod 775 logs rrd |
Nous allons maintenant éditer le fichier de configuration d’Observium pour y insérer les identifiants de connexion à sa base de données.
1 |
cp config.php.default config.php && nano config.php |
Voici les paramètres à faire correspondre avec votre configuration :
1 2 3 4 |
$config['db_user'] = 'userdb'; $config['db_pass'] = 'passwd'; $config['db_name'] = 'observium'; $config['install_dir'] = "/opt/observium"; |
C’est ce fichier qu’il faudra modifier ultérieurement si on souhaite personnaliser l’application.
Nous allons désormais préparer la base de donnée avec les tables nécessaires. Pour cela, il suffit de lancer le script suivant :
1 |
./discovery.php -u |
On crée ensuite l’administrateur de l’interface web :
1 |
./adduser.php username passwd 10 |
Et on ajoute les tâches récurrentes à notre Crontab :
1 2 3 4 5 |
crontab -e 33 */6 * * * /opt/observium/discovery.php -h all >> /dev/null 2>&1 */5 * * * * /opt/observium/discovery.php -h new >> /dev/null 2>&1 */5 * * * * /opt/observium/poller-wrapper.py 3 >> /dev/null 2>&1 |
Configuration d’NGinx
Il ne reste donc plus qu’à configurer le serveur web pour accéder à l’interface de l’application.
Pour cela nous allons éditer le fichier de configuration d’NGinx :
1 |
nano /etc/nginx/conf.d/observium.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
server { listen 443 ssl http2 default_server; server_tokens off; root /opt/observium/html; index index.html index.htm index.php; access_log /var/log/nginx/observium-access.log; error_log /var/log/nginx/observium-error.log warn; server_name observium.domain.tld; client_max_body_size 32M; location / { try_files $uri $uri/ /index.php?q=$uri&$args; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_read_timeout 60; } ssl_certificate /etc/nginx/ssl/observium.crt; ssl_certificate_key /etc/nginx/ssl/observium.key; ssl_protocols TLSv1.1 TLSv1.2; ssl_dhparam /etc/nginx/ssl/observium_dh.pem; ssl_ecdh_curve secp384r1; ssl_prefer_server_ciphers on; ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:"; ssl_session_cache shared:SSL:10m; ssl_session_timeout 5m; ssl_session_tickets off; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header X-Powered-By "Mon PHP !"; } |
Puis créer les certificats nécessaires à la mise en place d’HTTPS :
1 2 3 4 5 6 7 |
mkdir /etc/nginx/ssl && cd /etc/nginx/ssl openssl genrsa -des3 -out observium.key 4096 openssl req -new -key observium.key -out observium.csr cp observium.key observium.key.org openssl rsa -in observium.key.org -out observium.key openssl x509 -req -days 1000 -in observium.csr -signkey observium.key -out observium.crt openssl dhparam 4096 -out observium_dh.pem |
Il ne reste plus qu’à vérifier notre fichier de configuration et recharger NGinx :
1 2 |
nginx -t service nginx restart |
On ouvre notre navigateur et on accède alors à l’interface web d’Observium ! Cependant, il n’y a pour le moment aucun device monitoré.
Ajout d’un serveur Debian
Je ne vais pas détailler ici l’ajout d’hôtes à proprement dit, mais nous allons voir comment ajouter un serveur Debian (en l’occurence notre serveur de monitoring).
On prépare le script distro qui permet à Observium de découvrir plus d’informations sur la machine (et ajouter une belle icône Debian) :
1 2 |
cp /opt/observium/scripts/distro /usr/bin/distro chmod 755 /usr/bin/distro |
Et enfin on édite notre fichier de configuration SNMP :
1 |
nano /etc/snmp/snmpd.conf |
1 2 3 4 5 6 7 8 9 |
com2sec readonly default ma_super_communaute group MyROGroup v1 readonly group MyROGroup v2c readonly group MyROGroup usm readonly view all included .1 80 access MyROGroup "" any noauth exact all none none syslocation adresse_physique syscontact contact@adrienfuret.fr extend .1.3.6.1.4.1.2021.7890.1 distro /usr/bin/distro |
Bien sur vous remplacez ma_super_communaute par le nom de votre communauté SNMP (une chaine de caractère aléatoire), adresse_physique par une adresse postale pour le placer sur la map, et le contact par votre adresse pour recevoir les alertes.
On redémarre le service SNMP pour prendre en compte la configuration :
1 |
service snmpd restart |
On ajoute alors l’hôte à Observium et on rafraichi les données :
1 2 3 |
cd /opt/observium ./add_device.php localhost ma_super_communaute ./discovery.php -h all && ./poller.php -h all |
Sur l’interface web nous avons alors notre premier serveur monitoré.
Vous avez maintenant un serveur de monitoring pleinement fonctionnel. A vous d’ajouter le reste de vos équipements réseaux.
Pour tweaker la configuration d’Observium, je vous renvoie vers la doc officielle qui est très complète à ce sujet. Pour ajouter les alertes mails c’est ici !
J’aborderai dans un futur article l’intégration des agents Observium pour monitorer des aspects du système qui ne sont pas possibles via SNMP.