Que signifie NMS ? NMS signifie “Network Monitoring System”, système de surveillance du réseau. LibreNMS est comme leur wiki1 le suggère un NMS à découverte automatique, basé sur PHP, MySQL et le protocole SNMP.

LibreNMS prend en charge une large gamme de matériel réseau et de systèmes d’exploitation tels que Cisco, Linux, Juniper, Foundry et bien d’autres.

Je vais suivre un guide de M. Gautier, et essayer d’expliquer le but de chaque commande. À la fin, j’aurai une installation LibreNMS fonctionnelle. Je vais commencer par une nouvelle installation de Debian 10 nommée librenms avec l’adresse 192.168.0.216. Je vais me connecter via ssh.

Installation2

# Mise à jour du système
apt update
# installer l'application curl
apt install curl sudo -y
# cela installe une suite d'autres applications comme lsb-release
# ca-certificates curl et un ensemble de trousseaux de clés et de sources
# d'applications 
curl -sSL https://packages.sury.org/php/README.txt | sudo bash -x

Les lignes suivantes installeront les dépendances nécessaires et supprimeront les autres packages susceptibles de provoquer un conflit.

apt update && apt remove php7* -y
apt install php8.2-fpm php8.2-cli php8.2-common php8.2-curl php8.2-bcmath php8.2-intl php8.2-mbstring php8.2-xmlrpc php8.2-mcrypt php8.2-mysql php8.2-gd php8.2-xml php8.2-cli php8.2-zip
apt install php8.2-fpm libapache2-mod-fcgid
apt install software-properties-common wget apt-transport-https
apt install nginx-full acl fping graphviz composer git imagemagick mtr-tiny python3-pip python3-memcache python3-mysqldb python3-dotenv python3-pymysql rrdtool snmp snmpd whois python3-redis python3-systemd python3-setuptools python3-systemd
apt install mariadb-server php php-fpm php-cli php-xml php-common php-gd php-json php-snmp php-mysql php-zip php-curl php-mbstring php-pear php-bcmath

Configuration

Je vais commencer par configurer le fuseau horaire, l’une des choses les plus importantes dans un réseau est la synchronisation, et elle est basée sur le maintien de l’heure.

nano /etc/php/8.2/fpm/php.ini
# et 
nano /etc/php/8.2/cli/php.ini

J’utilise CTRL + w pour rechercher la chaîne “date.timezone” et décommentez-la et je lui donnerai la valeur “Europe/Paris”. nmsgif

Mariadb

Après cela, afin d’avoir une base de données sécurisée, comme le suggère le tutoriel, j’utiliserai la commande :

mysql_secure_installation

Après avoir configuré l’installation sécurisée, je créerai la base de données et l’utilisateur librenms l’utilisera.

	mysql -u root -p
	CREATE DATABASE librenms_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
	CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'poseidon';
	GRANT ALL PRIVILEGES ON librenms_db.* TO 'librenms'@'localhost'; FLUSH PRIVILEGES; 
	exit;

Après cela, je vais modifier la configuration de la base de données :

nano /etc/mysql/mariadb.conf.d/50-server.cnf

# en fin de fichier :
innodb_file_per_table=1
lower_case_table_names=0

Si je ne me suis pas trompé, les quelques lignes suivantes fonctionneront correctement, cela activera et démarrera les services :

systemctl enable --now nginx && systemctl enable --now php8.2-fpm
systemctl enable --now mariadb && systemctl enable --now snmpd.service

App LibreNMS

Afin d’utiliser l’application, je vais créer un utilisateur nommé librenms qui fera partie du groupe www-data.

useradd librenms -d /opt/librenms -M -r
usermod -aG librenms www-data

Ensuite, je télécharge et configure l’application avant son installation:

cd /opt
git clone https://github.com/librenms/librenms.git
chown -R librenms:librenms /opt/librenms
chmod 770 /opt/librenms
setfacl -d -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/
setfacl -R -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/

Une fois l’application téléchargée, nous pouvons l’installer:

su - librenms
./scripts/composer_wrapper.php install –no-dev
exit

Ici, il semble que quelque chose n’a pas fonctionné pour moi car l’installation ne pouvait pas continuer avec l’option “-no-dev”, j’ai donc fait la commande sans elle.

su - librenms
./scripts/composer_wrapper.php install 
exit

Maintenant, je vais copier et modifier le fichier de configuration pour librenms :

cp /etc/php/8.2/fpm/pool.d/www.conf /etc/php/8.2/fpm/pool.d/librenms.conf
nano /etc/php/8.2/fpm/pool.d/librenms.conf

Je vais changer les lignes suivantes :

28 user   = librenms
29 group  = librenms
41 listen = /run/php-fpm-librenms.sock

Mise à jour Thursday_02-03-2023_19:11 , en fait ici ça devrait être ça :

41 listen = /run/php/php8.2-fpm.sock

conflibrenms

Ensuite, je vais redémarrer le service php :

systemctl restart php8.2-fpm

SNMP

Je vais utiliser le protocole SNMP et j’ai installé le service donc maintenant je vais devoir le configurer. Je vais d’abord copier le fichier d’exemple de la bibliothèque librenms et après cela, je vais le modifier :

cp /opt/librenms/snmpd.conf.example /etc/snmp/snmpd.conf
sed -i 's/RANDOMSTRINGGOESHERE/librenms/g' /etc/snmp/snmpd.conf

Pour avoir un petit exemple, nous allons configurer le client SNMP sur localhost.

curl -o /usr/bin/distro https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distro
chmod +x /usr/bin/distro
service snmpd restart

Site LibreNMS

Afin d’interagir avec l’application, je devrai configurer son site, il sera servi avec nginx, je devrai donc créer un fichier de configuration dans le dossier nginx.

nano /etc/nginx/sites-available/librenms.conf
server {
         listen 80;
         server_name librenms.lab;
         root /opt/librenms/html;
         index index.php;
         charset utf-8;
         gzip on;
         gzip_types text/css application/javascript text/javascript application/x>
         proxy_read_timeout 300;
         proxy_connect_timeout 300;
         proxy_send_timeout 300;
         location / {
                try_files $uri $uri/ /index.php?$query_string;
                }
                 location /api/v0 {
                try_files $uri $uri/ /api_v0.php?$query_string;
                }
         location ~ \.php {
                 include fastcgi.conf;
                 fastcgi_split_path_info ^(.+\.php)(/.+)$;
                 fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
                }
         location ~ /\.ht {
                 deny all;
                }
}

Maintenant pour enfin activer le site :

ln -s /etc/nginx/sites-available/librenms.conf /etc/nginx/sites-enabled/librenms.conf
nginx -t
systemctl restart nginx

Et nous avons aussi un petit conseil du tutoriel, afin de ne pas sursaturer notre espace disque avec des logs faites les commandes suivantes :

cp /opt/librenms/librenms.nonroot.cron /etc/cron.d/librenms
cp /opt/librenms/misc/librenms.logrotate /etc/logrotate.d/librenms

Web-Interface

Maintenant, je vais ouvrir un navigateur et poursuivre l’installation via l’interface Web. nginx-front Si vous suivez et que vous rencontrez cette page, il suffit de supprimer le site de la page par défaut du répertoire nginx/sites-enabled.

rm  /etc/nginx/sites-enabled/default
systemctl restart nginx.service

Il semble donc que j’ai tous les verts aux prérequis d’installation librenms-check

Ensuite, je vais appuyer sur l’icône ronde avec une petite base de données pour continuer la configuration.

Et en regardant mes notes, j’ai trouvé une erreur lors de la création de la base de données. J’ai créé la base de données “librenms” mais j’ai donné les privilèges d’utilisateur “librenms” à la base de données “librenms_db” qui est inexistante. Donc j’ai créé la base de données.

mysql -u root -p

Et:

CREATE DATABASE librenms_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
quit

Je peux donc continuer la configuration : librenms-conf

Après avoir appuyé sur le bouton “check credentials” , j’ai une erreur : errror

J’ai donc changé le fuseau horaire et redémarré mariadb :

timedatectl set-timezone Europe/Paris
systemctl restart mariadb.service

Il me suffit d’appuyer sur le bouton de construction de la base de données pour continuer : build-data

Construction de la base de données :

building

Après la création réussie de la base de données, je créerai le compte administrateur : asdmin

Et finissant l’installation : finis

Erreur, on me demande de mettre à jour manuellement un fichier : error

Ce n’était que ces quelques lignes qui avaient besoin d’être mises à jour :

DB_HOST=localhost
DB_DATABASE=librenms_db
DB_USERNAME=librenms
DB_PASSWORD=poseidon

Et après avoir appuyé sur réessayer, nous sommes accueillis par ceci: login

Ajouter de ressources à surveiller

Je vais commencer par ajouter les services que j’utilise pour ce projet depuis la machine locale comme dans le tutoriel de M. Gautier.

Installation de l’agent

Je vais d’abord installer l’agent librenms :

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
cp check_mk@.service check_mk.socket /etc/systemd/system
mkdir -p /usr/lib/check_mk_agent/plugins /usr/lib/check_mk_agent/local
cp -r agent-local/ /usr/lib/check_mk_agent/local/
chmod +x /usr/lib/check_mk_agent/local/$script
systemctl enable check_mk.socket && systemctl start check_mk.socket

Une fois l’agent installé, je vais télécharger et configurer les scripts qui surveillent chaque service :

Installation et configuration des scripts de service

wget https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/nginx -O /etc/snmp/nginx
wget https://github.com/librenms/librenms-agent/raw/master/snmp/phpfpmsp -O /etc/snmp/phpfpmsp
wget https://github.com/librenms/librenms-agent/raw/master/snmp/mysql -O /etc/snmp/mysql
chmod +x /etc/snmp/nginx
chmod +x /etc/snmp/phpfpmsp
chmod +x /etc/snmp/mysql

Je vais également intégrer les services dans le service snmp :

nano /etc/snmp/snmpd.conf
#Services detection mysql, nginx, phpfpmsp
extend mysql /etc/snmp/mysql
extend nginx /etc/snmp/nginx
extend phpfpmsp /etc/snmp/phpfpmsp

J’ai ajouté ces lignes à la fin du fichier et j’ai redémarré le service.

systemctl restart snmpd

Je dois également configurer nginx en créant un nouveau fichier de serveur virtuel :

nano /etc/nginx/conf.d/status.conf
server {
 listen localhost;
 server_name status.localhost;
 keepalive_timeout 0;
 access_log off;
 allow 127.0.0.1;
 deny all;
###status nginx
 location /nginx-status {
        stub_status on;
        }
###status de php-fpm
 location ~ ^/(status|ping)$ {
         allow 127.0.0.1;
         fastcgi_param SCRIPT_FILENAME /usr/share/php/8.2/fpm/status.html;
         fastcgi_index index.php;
         include fastcgi_params;
         fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        }
}

Je vais également décommenter la ligne 258 du fichier www.conf

nano /etc/php/8.2/fpm/pool.d/www.conf -l

soit recherchez la ligne 258 ou cette chaîne pm.status_path = /status"

Tester les configurations Nginx/PHP

Maintenant je vais tester les configurations que j’ai faites et je vais recharger les services :

nginx -t
php-fpm8.2 -t
systemctl restart nginx php8.2-fpm
# Celui-ci vérifie le statut de php
curl -L http://127.0.0.1/status
# Et celui-ci nginx
curl -L http://localhost/nginx-status

Ça devrait ressembler à ça: testing

MySQL conf+test

Il reste mysql à configurer, je vais créer un nouveau fichier dans le répertoire snmp :

nano /etc/snmp/mysql.cnf

Et ajoutera ceci à l’intérieur:

<?php
$mysql_user = 'root';
$mysql_pass = 'MDP'; # n'oubliez pas de changer cela
$mysql_host = 'localhost';
$mysql_port = 3306;
$chk_options['slave'] = false;
?>

Vous pouvez le tester en exécutant :

/etc/snmp/mysql

J’ai eu quelques problèmes en ajoutant localhost en tant que périphérique et en recherchant les problèmes possibles, j’ai trouvé ceci : validate

Avec l’aide de valider config j’ai refait quelques configurations comme :

 ln -s /opt/librenms/lnms /usr/local/bin/lnms
 cp /opt/librenms/misc/lnms-completion.bash /etc/bash_completion.d/
 chmod -R ug=rwX /opt/librenms/rrd /opt/librenms/logs  /opt/librenms/bootstrap/cache/ /opt/librenms/storage/ 
 setfacl -d -m g::rwx /opt/librenms/rrd /opt/librenms/logs  /opt/librenms/bootstrap/cache/ /opt/librenms/storage/ 
 chown -R librenms:librenms /opt/librenms 

C’étaient les problèmes que j’avais et donc pour vous, il pourrait y en avoir d’autres, mais c’est bon de savoir que vous avez ce genre d’aide.

Ajout de l’hôte local

Pour ajouter un appareil comme localhost, allez dans “Devices” “Add Device” ainsi: adddevice

Après avoir ajouté localhost voici le tableau de bord. dashboard

Pour ajouter les services qui ont été configurés, à partir du menu de présentation, accédez aux paramètres et aux applications. Là, basculez le bouton pour chacun des services comme ceci : appsgif

Les graphiques fonctionneront une fois qu’ils auront un peu de données, cela prendra donc un moment.