Faire son propre monitoring du Syno

Le but de cet article est de se créer une petite page web qui affiche l’historique de l’activité CPU, de l’activité de la mémoire ainsi que de l’occupation de l’espace disque….

Il existe des outils bien plus sophistiqués et plus complets pour faire du monitoring, et ce qui suit n’est qu’un exercice, mêlant shell (crontab, snmp,…) et php/mysql, et a principalement pour but de s’amuser un peu avec son syno 🙂
Pour résumer rapidement, on va procéder en 5 étapes:
– installation/paramétrage des outils nécessaires sur le syno
– création de la base de données qui contiendra les informations du système
– création des scripts de récupération des informations du système et insertion dans la base de données
– automatisation de la récupération des informations
– création du script php d’affichage des graphes (ce que nous verrons dans un prochain article)
Installation des outils nécessaires
Pour notre petit exercice, nous aurons besoin tout d’abord de configurer:
– l’accès telnet ou ssh
– MySQL
– Apache avec PHP
– SNMPPour cela, rien de compliqué: via son navigateur, on accède par le DSM et on va dans le panneau de configuration.

Dans Services Web, on coche Activer Web Station (pour Apache) et Active MySQL:
Dans Terminal, on choisit au choix de cocher Telnet ou SSH:
DSM configuration web

Ensuite, il faut installer le client snmp. Pour cette partie, je me suis aidé de la page http://www.vinc3nt.fr/2010/04/installer-ipkg-sur-synology-209-et-209ii/

On se connecte via ssh ou telnet sur son syno en root, et on se place dans le répertoire /tmp.
Avant de pouvoir installer le package snmp, il faut installer le bootstrap, qui permet d’accéder très simplement à une multitude de packages. La difficulté réside dans le fait que tous les syno n’ont pas le même processeur, et il faut donc récupérer le package correspondant au processeur de son syno. La page http://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have donne cette info, ensuite, il faut retrouver le package bootstrap en navigant dans l’arborescence suivante: http://ipkg.nslu2-linux.org/feeds/optware/
Dans mon cas (DS409+) la commande pour récupérer le bootstrap est la suivante:
puis installer le bootstrap:
sh syno-e500-bootstrap_1.2-7_powerpc.xsh
puis mettre à jour la liste des tous les packages disponibles
ipkg update

et enfin installer le client snmp:

ipkg install net-snmp

Création de la base de données
La base de données est très simple. Il faut créer une table pour chaque élément à monitorer avec un champs pour l’heure de collecte de l’information et un  autre champs pour la valeur collectée (on peut très bien avoir plusieurs valeurs pour un même élément, dans ce cas, il faudra créer autant de champs que de valeurs à collecter).

 

CREATE DATABASE `supervision` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `supervision`;
CREATE TABLE `cpu` ( 
  `date` timestamp  NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
  `value` float NOT NULL);
Petite explication sur snmp
Pour récupérer des informations système, on peut très bien se passer de snmp et utiliser des commandes unix classiques, mais snmp permet d’obtenir très simplement beaucoup plus d’informations. Nous allons commencer par une petite explication sur ce protocole.
Pleins d’informations à l’adresse: http://uuu.enseirb.fr/~kadionik/embedded/snmp/net-snmp.html
Ici, je vais juste détailler un peu ce dont on va avoir besoin.
Avec la commande suivante, on affiche la totalité des objets snmp.
snmpwalk -v 2c -c public localhost
Exemple:
……
UCD-SNMP-MIB::ssCpuUser.0 = INTEGER: 3
UCD-SNMP-MIB::ssCpuSystem.0 = INTEGER: 1
UCD-SNMP-MIB::ssCpuIdle.0 = INTEGER: 94
…….
Récupérer le chemin d’un objet (en l’occurrence le % de repos du processeur):
snmptranslate -Onf -IR ssCpuIdle.0
donne:
.iso.org.dod.internet.private.enterprises.ucdavis.systemStats.ssCpuIdle.0
Pour récupérer uniquement l’information:
snmpget -v 2c -c public -Ovq -L n: localhost .iso.org.dod.internet.private.enterprises.ucdavis.systemStats.ssCpuIdle.0
Donne
93
soit 93% inutilisé (seulement 7% de charge).
Scripts de récupération des informations
Pour l’instant, on ne va se focaliser que sur un script: la charge CPU. On va créer un répertoire supervision dans le répertoire web (généralement /volume1/web/) et un sous-répertoire cron. On aura donc l’arborescence suivante : /volume1/web/supervision/cron/
On va ensuite créer le script cpu.sh (ci-dessous) dans le répertoire cron.
cd /volume1/web/supervision/cron 

# Generation du script sql
rm cpu.sql
echo "connect supervision;" > cpu.sql
cpu=`snmpget -v 2c -c public -Ovq -L n: localhost .iso.org.dod.internet.private.enterprises.ucdavis.systemStats.ssCpuIdle.0`
echo "insert into cpu values (now(), $cpu);" >> cpu.sql

# Lancement du script sql
/usr/syno/mysql/bin/mysql -u UtilisateurMySQL -pMotDePasseMySQL < cpu.sql
Explication: Notre script de récupération de la charge CPU va créer un fichier sql (cpu.sql) qui permettra l’insertion en base de la charge CPU ainsi que l’heure actuelle (penser à changer la valeur de UtilisateurMySQL et de MotDePasseMySQL).
Le principe reste le même quelque soit les données qu’on souhaite stocker: il suffit de modifier le contenu de la ligne « cpu=….. »

Automatisation de la récupération des informations
Avoir un script qui collecte des informations, c’est bien, mais totalement inutile si il ne se lance pas à intervalles réguliers. Pour cela, on va modifier le fichier /etc/crontab en lui ajoutant la ligne suivante:

 

*/1    *    *    *    *    root    /volume1/web/supervision/cron/cpu.sh

Explication: Le script cpu.sh va être lancé par l’utilisateur root toutes les 1 minute (*/1 signifiant toutes les minutes, */5 toutes les 5 minutes….) Pour info, les autres étoiles correspondent dans l’ordre aux heures, jour du mois, mois, jour de la semaine.

Relancer cron:

/usr/syno/etc.defaults/rc.d/S04crond.sh stop
/usr/syno/etc.defaults/rc.d/S04crond.sh start

Voila, la collecte des infos peut commencer. On peut vérifier le bon fonctionnement en regardant le contenu de la table cpu.
Dans le prochain article, on verra comment transformer en graphique les données collectées.

Laisser un commentaire