Bonjour à tous,

Dans des temps pas si reculés que ça j’utilisais Observium, ensuite, j’ai découvert son fork totalement gratuit et open source Librenms.

C’est ce dernier qui va nous intéresser aujourd’hui.

En plus d’installer LibreNMS, je vais vous montrer comment :

  • Configurer le https sur la bête
  • Configurer les checks avec les nagios-plugins
  • Recevoir vos alertes par pushbullet
  • Configurer le SNMP sur vos serveurs Linux et Windows
  • Configurer l’Unix-Agent et quelques applications
  • Installer l’interface LibreNMSv2

 

Installer LibreNMS :

Dans un premier temps, on va mettre à jour le serveur et préparez les sources debian pour installer les packets nécessaires.

Renseignez toutes les sources nécessaires dans votre sources.list :

echo "#Stable
deb http://mirrors.kernel.org/debian/ jessie main contrib non-free
deb-src http://mirrors.kernel.org/debian/ jessie main contrib non-free
deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free
deb http://mirrors.kernel.org/debian/ jessie-updates main contrib non-free
deb-src http://mirrors.kernel.org/debian/ jessie-updates main contrib non-free
deb http://mirrors.kernel.org/debian/ jessie-backports main contrib non-free
deb-src http://mirrors.kernel.org/debian/ jessie-backports main contrib non-free


#Dotdeb - Nginx - php7.0
deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all

#MariaDB - 10.1
deb [arch=amd64,i386] http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.1/debian jessie main
deb-src http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.1/debian jessie main" > /etc/apt/sources.list

 

Maintenant, installez les packages nécessaires :

apt-get update && apt-get install software-properties-common python-software-properties -y

 

Téléchargez les clés nécessaires pour les dépôts et installez-les :

mkdir /tmp/keys/
cd /tmp/keys
wget https://www.dotdeb.org/dotdeb.gpg
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db #MariaDB
apt-key add dotdeb.gpg

 

Maintenant, mettez votre système à jour :

wget -O- https://raw.githubusercontent.com/stylersnico/debian-scripts/master/upgrade-and-clean-system.sh | sh

 

Une fois que c’est fait, installez toutes les dépendances :

apt install nginx mariadb-server php7.0 php7.0-fpm php7.0-gd php7.0-curl php7.0-cli php7.0-mcrypt php7.0-mysql php7.0-json php7.0-snmp git rrdtool snmp snmpd fping imagemagick whois mtr-tiny php-mbstring php-pear python-mysqldb php-net-ipv4 php-net-ipv6 curl lm-sensors snmp-mibs-downloader gnuplot -y

 

Supprimez la configuration par défaut de Nginx :

rm /etc/nginx/sites-available/default && rm /etc/nginx/sites-enabled/default

 

Créez le vhost pour LibreNMS :

nano /etc/nginx/sites-enabled/librenms
server {
    listen 80;

    root /opt/librenms/html;
    index index.php index.html index.htm;
    server_name librenms.1405.abyssproject.xyz;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    location /.well-known/acme-challenge {
        root /var/www/letsencrypt;
    }

    location ~ .php$ {
       try_files $uri =404;
       fastcgi_split_path_info ^(.+.php)(/.+)$;
       fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_read_timeout 60;
       include fastcgi_params;
    }

}

Remplacez librenms.1405.abyssproject.xyz par votre domaine.

Lancez ces commandes pour définir votre timezone dans php7 :

echo "date.timezone = Europe/Paris" >> /etc/php/7.0/fpm/php.ini && echo "date.timezone = Europe/Paris" >> /etc/php/7.0/cli/php.ini

 

Créez l’utilisateur pour Librenms :

useradd librenms -d /opt/librenms -M -r
usermod -a -G librenms www-data

 

Récupérez la dernière version de LibreNMS depuis le dépot GIT :

cd /opt/ && git clone https://github.com/librenms/librenms.git
cd librenms
mkdir rrd logs
chown -R librenms:librenms /opt/librenms
chmod 775 rrd

 

Créez les répertoires nécessaires pour Let’s Encrypt même si on s’en occupera un peu plus tard :

cd /var/www
mkdir letsencrypt
chown -R librenms:librenms letsencrypt/

 

Maintenant, redémarrez les services Nginx et Php 7 :

systemctl restart nginx.service && systemctl restart php7.0-fpm.service

 

Connectez-vous en root au serveur MariaDB :

mysql -u root -p

 

Créez maintenant la base de données pour Librenms :

CREATE DATABASE librenms;

 

Créez ensuite l’utilisateur LibreNMS en lui assignant tous les droits sur la base « librenms ». Remplacez mdp par le mot de passe voulu :

GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost' IDENTIFIED BY 'mdp';

 

Appliquez les droits en live et quittez le cli de MariaDB :

FLUSH PRIVILEGES;
exit

 

Maintenant, allez sur votre LibreNMS depuis l’interface web et vérifiez que tous les pré-requis sont bien au vert :

installation-librenms-01

Ensuite, indiquez les informations de connexion à MariaDB :

installation-librenms-02

Laissez le script d’installation peupler la base, si vous ne voyez aucune erreur, continuez :

installation-librenms-03

Créez l’utilisateur de l’interface web de LibreNMS :

installation-librenms-04

 

Générez le fichier de configuration :installation-librenms-05

 

Si tout se passe bien, connectez-vous :

installation-librenms-06

 

En cas de problème, lancez la commande suivante :

php /opt/librenms/validate.php

 

Si tout marche vous devriez avoir une sortie similaire :

root@librenms:/opt/librenms# ./validate.php
Version info:
Commit SHA: 847d639cbfb5f6a2897deacc12c34be23466a31b
DB Schema: 107
PHP: 7.0.6-1~dotdeb+8.1
MySQL: 10.1.14-MariaDB-1~jessie
RRDTool: 1.4.8
SNMP: NET-SNMP version: 5.7.2.1

[OK] Database connection successful
root@librenms:/opt/librenms# /opt/librenms/validate.php ^C
root@librenms:/opt/librenms# php /opt/librenms/validate.php
Version info:
Commit SHA: 847d639cbfb5f6a2897deacc12c34be23466a31b
DB Schema: 107
PHP: 7.0.6-1~dotdeb+8.1
MySQL: 10.1.14-MariaDB-1~jessie
RRDTool: 1.4.8
SNMP: NET-SNMP version: 5.7.2.1

[OK] Database connection successful

 

Copiez le fichier cron de librenms dans le crontab :

cp librenms.nonroot.cron /etc/cron.d/librenms

 

Configuration de HTTPS :

Maintenant, on va installer un certificat Let’s Encrypt qui marchera avec Nginx.

Lancez d’abord les commandes suivantes pour créer les paramètres DH et récupérer la configuration Nginx correcte :

cd /etc/ssl/certs && openssl dhparam -out dhparam.pem 4096
cd /etc/nginx/
rm nginx.conf
wget https://www.abyssproject.net/wp-content/uploads/2016/01/nginx.conf_.txt
mv nginx.conf_.txt nginx.conf
service nginx reload

 

Ensuite, installez Let’s Encrypt avec les commandes suivantes :

cd /etc
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help

 

Créez ensuite un fichier de configuration pour le renouvellement de votre certificat SSL, par exemple pour moi :

mkdir /etc/letsencrypt/configs && nano /etc/letsencrypt/configs/librenms.1405.abyssproject.xyz.conf

 

Ensuite, créez le fichier de configuration :

domains = librenms.1405.abyssproject.xyz
rsa-key-size = 4096
server = https://acme-v01.api.letsencrypt.org/directory
email = nicolas@abyssproject.net
text = True
authenticator = webroot
webroot-path = /var/www/letsencrypt/

 

Et lancez les commandes suivantes pour créer le certificat en adaptant à votre configuration :

cd /etc/letsencrypt
./letsencrypt-auto --config /etc/letsencrypt/configs/librenms.1405.abyssproject.xyz.conf certonly

 

Vous devriez avoir un message similaire si la création de certificat réussie :

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/librenms.1405.abyssproject.xyz/fullchain.pem.
Your cert will expire on 2016-08-12. To obtain a new version of the
certificate in the future, simply run Certbot again.
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

 

Editez votre vhost nginx pour rajouter les informations nécessaires :

nano /etc/nginx/sites-enabled/librenms

 

Voici le mien :

server {
    listen 80;
    listen 443 ssl;

    ssl_certificate /etc/letsencrypt/live/librenms.1405.abyssproject.xyz/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/librenms.1405.abyssproject.xyz/privkey.pem;

    root /opt/librenms/html;
    index index.php index.html index.htm;
    server_name librenms.1405.abyssproject.xyz;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    location /.well-known/acme-challenge {
        root /var/www/letsencrypt;
    }

    location ~ .php$ {
       try_files $uri =404;
       fastcgi_split_path_info ^(.+.php)(/.+)$;
       fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_read_timeout 60;
       include fastcgi_params;
    }

}

 

Maintenant, définissez votre url dans /opt/librenms/config.php, sinon l’interface crashera lamentablement :

$config['base_url'] = "https://librenms.1405.abyssproject.xyz";

 

Pour finir, un petit coup de :

service nginx reload

 

Créez le script pour renouveler le certificat automatiquement :

nano /root/renew‑letsencrypt.sh
#!/bin/sh

cd /opt/letsencrypt/
./letsencrypt-auto --config /etc/letsencrypt/configs/librenms.1405.abyssproject.xyz.conf certonly

if [ $? -ne 0 ]
 then
        ERRORLOG=`tail /var/log/letsencrypt/letsencrypt.log`
        echo -e "The Let's Encrypt cert has not been renewed! \n \n" \
                 $ERRORLOG
 else
        nginx -s reload
fi

exit 0

 

Créez le dossier pour les logs et rendez le script exécutable :

mkdir /var/log/letsencrypt/
chmod +x /root/renew‑letsencrypt.sh

 

Et créez ajoutez une entrée dans le crontab (crontab -e) pour renouveler le certificat tous les deux mois :

0 0 1 JAN,MAR,MAY,JUL,SEP,NOV * /root/renew-letsencrypt.sh

 

Configurer les checks avec les nagios-plugins :

Installez le package Nagios plugins avec la commande suivante :

apt-get install nagios-plugins -y

 

Ensuite, rajoutez les lignes suivantes dans /opt/librenms/config.php :

$config['show_services'] = 1;
$config['nagios_plugins'] = "/usr/lib/nagios/plugins";

 

Et lancez la commande suivante pour que les services soit vérifiés toutes les 5 minutes :

echo "*/5 * * * * librenms /opt/librenms/check-services.php >> /dev/null 2>&1" >> /etc/cron.d/librenms

 

Rafraîchissez LibreNMS dans votre navigateur, le menu services devrait apparaître :

installation-librenms-08

 

Cliquez sur « Add a service », sélectionnez le type de check et remplissez les informations nécessaires, voici un exemple pour le ssh :

installation-librenms-09

 

Ensuite, le service sera vérifié toutes les 5 minutes :

installation-librenms-10

Dès que vous aurez beaucoup de services, ça pourra donner quelque chose dans le style :

installation-librenms-11

 

Recevoir vos alertes par pushbullet

Evidemment, vous devez d’abord posséder un compte pushbullet, qui sera connecté sur votre téléphone par exemple.

Allez dans Global Settings sur l’interface LibreNMS :

installation-librenms-12

 

Allez ensuite dans Alerting Settings :

installation-librenms-13

 

Rentrez votre token Pushbullet ici et cliquez sur Test transport pour valider le bon fonctionnement du pushbullet :

installation-librenms-14

 

Configurer le SNMP sur vos serveurs Linux et Windows :

LibreNMS utilise le protocole SNMP pour récupérer des informations sur vos serveurs.

Configuration d’un serveur SNMP sur Debian / Ubuntu

Installez d’abord le serveur SNMP :

apt-get install snmpd

 

Ensuite, supprimez le fichier de configuration par défaut et créez en un nouveau :

rm /etc/snmp/snmpd.conf
nano /etc/snmp/snmpd.conf

 

Remplissez le ensuite avec ceci, changez simplement les champs COMMUNITY, LOCATION et CONTACT :

com2sec readonly  default        COMMUNITY 
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 LOCATION
syscontact CONTACT
#This line allows Observium to detect the host OS if the distro script is installed
extend .1.3.6.1.4.1.2021.7890.1 distro /usr/bin/distro

 

Souvenez vous bien de ce que vous marquez dans COMMUNITY, c’est l’élément clé du serveur SNMP.

Maintenant, téléchargez le script d’Observium qui identifie votre distribution Linux et redémarrez le service SNMP :

wget https://raw.githubusercontent.com/tomzx/observium/svn-trunk/scripts/distro
mv distro /usr/bin/distro
chmod 755 /usr/bin/distro
service snmpd restart

 

Configuration d’un serveur SNMP sur CentOS / Red Hat / Fedora

Installez d’abord Net-SNMP :

yum install net-snmp nano
chkconfig --level 3 snmpd on

 

Ensuite, supprimez le fichier de configuration par défaut et créez en un nouveau :

rm /etc/snmp/snmpd.conf
nano /etc/snmp/snmpd.conf

 

Remplissez le ensuite avec ceci, changez simplement les champs COMMUNITY, LOCATION et CONTACT :

com2sec readonly  default        COMMUNITY 
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 LOCATION
syscontact CONTACT
#This line allows Observium to detect the host OS if the distro script is installed
extend .1.3.6.1.4.1.2021.7890.1 distro /usr/bin/distro

Souvenez vous bien de ce que vous marquez dans COMMUNITY, c’est l’élément clé du serveur SNMP.

Maintenant, téléchargez le script d’Observium qui identifie votre distribution Linux et redémarrez le service SNMP :

wget https://raw.githubusercontent.com/tomzx/observium/svn-trunk/scripts/distro
mv distro /usr/bin/distro
chmod 755 /usr/bin/distro
service snmpd restart

 

Configuration d’un serveur SNMP sur FreeBSD

Installez Net-SNMP avec les commandes suivantes :

cd /usr/ports/net-mgmt/net-snmp
make install clean

 

Ouvrez le fichier /etc/rc.conf et insérez ces deux lignes :

snmpd_enable="YES"
snmpd_conffile="/usr/local/etc/snmpd.conf"

 

Ensuite, supprimez le fichier de configuration par défaut et créez en un nouveau :

rm /usr/local/etc/snmp/snmpd.conf
nano /usr/local/etc/snmp/snmpd.conf

 

Remplissez le ensuite avec ceci, changez simplement les champs COMMUNITY, LOCATION et CONTACT :

com2sec readonly  default        COMMUNITY 
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 LOCATION
syscontact CONTACT
#This line allows Observium to detect the host OS if the distro script is installed
extend .1.3.6.1.4.1.2021.7890.1 distro /usr/bin/distro

Souvenez vous bien de ce que vous marquez dans COMMUNITY, c’est l’élément clé du serveur SNMP.

Maintenant, téléchargez le script d’Observium qui identifie votre distribution Linux et démarrez le service SNMP :

wget https://raw.githubusercontent.com/tomzx/observium/svn-trunk/scripts/distro
mv distro /usr/bin/distro
chmod 755 /usr/bin/distro
/usr/local/etc/rc.d/snmpd start

Configuration d’un serveur SNMP sur Windows Serveur 2012 R2

Allez dans l’ajout de fonctionnalités et installez le Service SNMP :

observium-debian-7-wheezy-01

 

 

Une fois le service installé, rendez vous dans le gestionnaire de services et éditez les propriétés du serveur SNMP :

observium-debian-7-wheezy-02

 

 

Allez dans Agent, remplissez les informations demandées et cochez toutes les cases :

observium-debian-7-wheezy-03

 

 

Maintenant, allez dans Interruptions, renseignez la communauté et ajoutez l’ip de votre serveur Observium dans les destinations des interruptions :

observium-debian-7-wheezy-04

 

 

Ensuite, allez dans Sécurité, cochez la première case, ajoutez votre communauté en lecture seule et en dessous autorisez uniquement les requêtes SNMP venant de votre serveur Observium :

observium-debian-7-wheezy-05

 

Redémarrez le service SNMP maintenant.

 

Ajouter une machine sur LibreNMS

Une fois les serveurs configurés, allez dans l’interface web de LibreNMS et cliquez sur Devices -> Add Device :

installation-librenms-15

 

Remplissez ensuite le Hostname et Community, cliquez sur Add Device quand c’est fait :

installation-librenms-16

 

Une fois toutes vos machines ajoutées, lancez les commandes suivantes pour lancer une découverte instantanée :

cd /opt/librenms
./discovery.php -h all
./poller.php -h all

 

Installation de l’Unix-Agent :

Toutes les manipulations se font sur les serveurs qui sont monitorés.
Installez les dépendances nécessaires :

apt-get install xinetd git -y

 

Clonez l’Unix-Agent de LibreNMS sur votre serveur :

cd /opt/
git clone https://github.com/librenms/librenms-agent.git
cd librenms-agent
cp check_mk_agent /usr/bin/check_mk_agent
chmod +x /usr/bin/check_mk_agent

 

Copiez les scripts de démarrage de l’Unix-Agent :

cp check_mk_xinetd /etc/xinetd.d/check_mk && cp check_mk@.service check_mk.socket /etc/systemd/system

 

Créez les dossiers nécessaires au bon fonctionnement de l’agent :

mkdir -p /usr/lib/check_mk_agent/plugins /usr/lib/check_mk_agent/local

 

Maintenant, récupérez les scripts :

cd /usr/lib/check_mk_agent/local
wget https://raw.githubusercontent.com/stylersnico/librenms/master/scripts/agent-local/mysql --no-check-certificate
wget https://raw.githubusercontent.com/stylersnico/librenms/master/scripts/agent-local/nginx --no-check-certificate
wget https://raw.githubusercontent.com/stylersnico/librenms/master/scripts/agent-local/dpkg --no-check-certificate
wget https://raw.githubusercontent.com/stylersnico/librenms/master/scripts/agent-local/dmi --no-check-certificate
chmod +x *

 

 

Configuration du check MySQL

Le check MySQL ne semble pas être compatible avec PHP 7.0 !

Créez le fichier de configuration du script avec la commande suivante :

nano /usr/lib/check_mk_agent/local/mysql.cnf

 

Remplissez-le avec ceci :

<?php
$mysql_user = ‘debian-sys-maint’;
$mysql_pass = ‘pass’;
$mysql_host = ‘localhost’;
$mysql_port = 3306;

Vous pouvez trouver le mot de passe de l’utilisateur de maintenance MySQL intégré à Debian dans le fichier /etc/mysql/debian.cnf.

Une fois le fichier créez, rendez le bordel exécutable et testez avec la commande suivante :

chmod +x * && ./mysql

 

Vous devriez avoir une sortie qui commence comme ça :

<<<mysql>>>
a0:0
a1:0
a2:0
a3:0
a4:-1

 

Configuration du check Nginx

Créez un vhost spécific pour le monitoring :

nano /etc/nginx/sites-enabled/monitoring

 

Remplissez-le avec ceci :

server {
listen 127.0.0.1:80;
server_name _;
location /nginx-status { stub_status on; access_log off; allow 127.0.0.1; deny all; }
}

 

Redémarrez Nginx avec la commande suivante et testez le script :

service nginx restart && /usr/lib/check_mk_agent/local/nginx

 

Vous devriez avoir une sortie dans ce style :

<<<nginx>>>
1
0
1
0
1

 

Redémarrez Xinetd :

/etc/init.d/xinetd restart

 

Activez ensuite l’agent dans les paramètres du serveur :

monit

 

Vous trouverez toutes les applications existantes sur le repo de LibreNMS.

 

Installer l’interface LibreNMSv2 :

LibreNMSv2 est une nouvelle interface faite par la communauté de LibreNMS pour changer de l’interface héritée de Observium.

 

Attention, cette partie, c’est du bonus, l’interface n’est pas encore finie et je ne recommande donc pas de l’utilisée pour le moment.

 

Dans un premier temps, on va installer composer et récupérer la dernière version de l’interface sur le git :

curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
cd /opt/
git clone https://github.com/librenms/librenmsv2 librenmsv2
cd librenmsv2
mkdir logs
chown -R librenms:librenms /opt/librenmsv2

 

Copiez ensuite le fichier de configuration de l’interface :

cp .env.example .env

 

Ouvrez le et modifiez les paramètres pour indiquer les informations de connexion à la base MariaDB utilisée par LibreNMS

DB_HOST=127.0.0.1
DB_DATABASE=librenms
DB_USERNAME=librenms
DB_PASSWORD=password

 

Installez les pré-réquis et générez une clé d’utilisation :

composer install
php artisan key:generate

 

Remettez un coup de chmod :

chmod -R g+w storage bootstrap/cache logs
chown -R librenms:librenms /opt/librenmsv2

 

Maintenant, ouvrez votre vhost nginx /etc/nginx/sites-enabled/librenms.

Modifiez la ligne root pour qu’elle soit comme celle ci-dessous :

 root        /opt/librenmsv2/public;

 

Maintenant, relancez nginx avec la commande suivante :

service nginx reload

 

Admirez votre nouvelle interface 🙂

installation-librenms-17