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”.
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
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. 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
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 :
Après avoir appuyé sur le bouton “check credentials” , j’ai une erreur :
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 :
Construction de la base de données :
Après la création réussie de la base de données, je créerai le compte administrateur :
Et finissant l’installation :
Erreur, on me demande de mettre à jour manuellement un fichier :
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:
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:
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 :
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:
Après avoir ajouté localhost voici le tableau de bord.
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 :
Les graphiques fonctionneront une fois qu’ils auront un peu de données, cela prendra donc un moment.
Guide d’installation officiel : https://docs.librenms.org/Installation/ ↩︎