Il y a quelques temps, je me suis mis en tête de trouver une alternative à Cacti pour effectuer la métrologie d’une plateforme d’environ 70 serveurs. Nous utilisions Cacti par habitude d’anciens Linuxiens sans jusqu’ici s’être mis en quête d’un outil plus simple pour superviser une plateforme via SNMP. En outre Cacti n’est plus que moyennement maintenu et surtout possède l’énorme défaut d’être horriblement complexe juste pour ajouter un graphique personnalisé dès que le generic OID template ne fait plus le job.
Après un rapide maquettage, LibreNMS, voici les points qui m’ont plu :
- Découverte automatique du réseau
- Possibilité de faire des groupes selon des motifs d’attributs SNMP
- Possibilité d’intégrer des checks Nagios NRPE
- Réalisations de graphiques en analysant les perf data de Nagios
- Extension possible via un agent (en pratique celui de l’excellent check_mk)
- Des graphes par défaut hyper pertinents en cas d’anomalie : I/O, commutations de contexte
Quelques défauts cependant :
- L’analyse de la sortie des PerfData m’a obligé à retoucher des scripts car plutôt aléatoire sur l’interprétation
- Il n’est pas possible de monitorer un équipement qui ne gère pas SNMP. J’aurais souhaiter pouvoir avoir des graphes pour uniquement des temps de réponse ping, sonde Nagios NRPE, temps de réponse HTTP ou script personnalisé par exemple.
Quelques notes de config :
Faire un groupe de machines selon un motif dans leur nom :
%devices.sysName ~ "dns"
Lancer un scan sur une plage d’adresses :
su - librenms -c "php /opt/librenms/snmp-scan.php -r 10.1.2.0.0/23"
Ou sur un interval d’adresses IP (dans mon cas, le scan bloquait sur la première IP qui était celle du firewall) :
for i in 2..254; do su - librenms -c "php /opt/librenms/snmp-scan.php -r 192.168.100.$i/32"; done
Lancer la découvertes sur les plages d’adresses IP déclarées dans la configuration :
su - librenms -c "/opt/librenms/discovery.php -h all"
Installer les dépendances sous Ubuntu 12.04 :
apt-get install libapache2-mod-php5 php5-cli php5-mysql php5-gd php5-snmp php-pear php5-curl snmp graphviz php5-mcrypt php5-json apache2 fping imagemagick whois mtr-tiny nmap python-mysqldb snmpd php-net-ipv4 php-net-ipv6 rrdtool git
Définir dans le config.php la communauté SNMP et les plages d’IP à scanner :
$config['nets'][] = "192.168.10.0/24"; $config['nets'][] = "192.168.20.0/24"; $config['nets'][] = "192.168.30.0/24"; $config['snmp']['community'] = array("public");
Masquer les systèmes de fichiers du kernel par chemin :
$config['ignore_mount'][] = "/proc";
Masquer les systèmes de fichiers du kernel par regexp:
$config['ignore_mount_regexp'][] = "/on: \/dev/";
Masquer les systèmes de fichiers du kernel par système de fichiers :
$config['ignore_mount_string'][] = "procfs";
Vérifier l’installation :
php /opt/librenms/validate.php
Faire fonctionner collectd avec la version GIT de librenms (https://github.com/librenms/librenms/issues/5478):
1) avoir des noms d’hôtes strictement identiques
2) définir l’emplacement des RRD sur le serveur (même machine dans mon cas) :
$config['collectd_dir'] = '/var/lib/collectd/rrd';
3) corriger le conflit de nom de fonction PHP avec php5-rrd :
sed -i 's/rrd_info/myrrd_info' /opt/librenms/html/includes/collectd/functions.php