Skip to content

Labo 6 Monitoring

Kevin Keurvels edited this page Jan 9, 2023 · 19 revisions

Prérequis

Pour faire ce labo, il faut avoir une VM Ubuntu 20.04 lts server.

Informations générales

Avant de commencer, petit note par rapport à l'exécution des commandes.

  • Nous supposons que l'utilisateur est root quand celui-ci n'est pas spécifié. Pour changer d'utilisateur vous pouvez :
  1. Utiliser la commande sudo avant chaque commande si votre utilisateur actuel fait partie du groupe wheel et que la commande sudo est installée.
  2. Faire la commande su pour se connecter en tant que root.
su
  • Nous supposons que l'utilisateur utilise ubuntu 20.04 lts server, ceci peut-être vérifié avec la commande :
uname -a
  • Nous supposons que l'utilisateur a son cache apt à jour grâce à la commande :
apt update

Installation des packages nécessaires

Nous allons tout d'abord installer SNMP

apt install snmpd snmp libsnmp-dev

Installer les librairies pour bien faire fonctionner SNMP

apt install snmp-mibs-downloader

Visualiser des informations grâce à SNMP

snmpwalk ne diffère pas beaucoup de snmpget pour ce qui est de l’interrogation des données. La différence réside principalement dans l’exécution des commandes : alors que snmpget renvoie uniquement une valeur concernant l’Obect-ID demandé ou affiche un message d’erreur lorsqu’aucun objet n’est disponible pour le numéro d’identification, snmpwalk passe également par l’ensemble des sous-nœuds. Ceci permet notamment d’afficher une liste détaillée des informations système pertinentes lorsque le numéro d’identification est connu de la base MIB correspondante.
Exemples:

  • Avec snmpwalk
    image
  • Avec snmpget
    image

Voici quelques commandes pour avoir des informations précises sur l’hôte 10.0.0.201:

  • Type de device
snmpget -v2c -c public -O fT 10.0.0.201 sysDescr.0
  • Modèle
snmpget -v2c -c public -O fT 10.0.0.201 sysDescr.0
  • Personne de contact
snmpget -v2c -c public -O fT 10.0.0.201 sysContact.0
  • Emplacement
snmpget -v2c -c public -O fT 10.0.0.201 sysLocation.0
  • Nombre de PSU (Power Supply Unit)
snmpwalk -v2c -c public 10.0.0.201 | grep -o 'Power Supply' | wc -l

LibreNMS

Installation à la main

Problème version PHP

ATTENTION: Nous avons eu un problème. Durant toute l'installation, nous avons utilisé PHP 8.2 . C'est seulement à la fin que nous avons réalisé que PHP 8.2 n'est pas supporté par LibreNMS.
image
Nous avons donc dû installer PHP 8.1. Pour ce faire, nous avons installé tout les paquets requis de PHP mais en spécifiant la version 8.1:

apt install php8.1
apt install php8.1-mysql php8.1-mbstring php8.1-xml php8.1-curl php8.1-gd php8.1-cli php8.1-curl php8.1-fpm php8.1-gd php8.1-gmp php8.1-json php8.1-mbstring php8.1-mysql php8.1-snmp php8.1-xml php8.1-zip php8.1-cgi php8.1-fpm php8.1-phpdbg libapache2-mod-php8.1 libphp8.1-embed

Une fois ceci fait, on a dû changer la version de PHP qu'on utilisait:

sudo a2enmod php8.1  
sudo update-alternatives --set php /usr/bin/php8.1   

Source: https://fedingo.com/how-to-change-php-version-in-ubuntu/
Durant toute l'installation, il faudra donc comprendre qu'il faut écrire PHP8.1 au lieu de PHP8.2

Installation

Tout d'abord, il faut installer les dépendences (hors php car expliquer ci-dessus):

apt install acl curl fping git graphviz imagemagick mariadb-client mariadb-server mtr-tiny nginx-full nmap rrdtool snmp snmpd whois unzip python3-pymysql python3-dotenv python3-redis python3-setuptools python3-systemd python3-pip

Ajoutez un utilisateur qui pourra accéder à LibreNMS:

useradd librenms -d /opt/librenms -M -r -s "$bash"

Téléchargez LibreNMS:

cd /opt
git clone https://github.com/librenms/librenms.git

Donnez à l'utilisateur librenms les permissions de lecture, d'écritures et d'exécution requis pour le fonctionnement de LibreNMS:

chown -R librenms:librenms /opt/librenms
chmod 771 /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/

Il faut aussi mettre le bon fuseau horaire. Pour cela, il faut le changer dans les fichiers de PHP:

nano /etc/php/8.1/fpm/php.ini
nano /etc/php/8.1/cli/php.ini

Dans notre cas, nous allons mettre Europe/Brussels.
image
Il faut aussi s'assurer que le fuseau horaire est le bon sur notre le system Ubuntu, exécutez cette commande:

timedatectl set-timezone Europe/Brussels

image

MariaDB

Veuillez à présent éditer le fichier 50-server.cnf:

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

Dans la section [mysql] ajoutez les lignes:

innodb_file_per_table=1
lower_case_table_names=0

image

Nous devons ensuite créer la base de données qui va contenir les informations concernant les rapports le LibreNMS. Pour cela, nous utilisons mariadb.

Activez et lancez mariaDB:

systemctl enable mariadb
systemctl restart mariadb

Lancez le shell mariaDB pour y créer la base de donnée et l'utilisateur requis pour le fonctionnement de LibreNMS:

mysql -u root

Créez la base de donnée:

CREATE DATABASE librenms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Créez l'utilisateur librenms pour la base de donnée en remplaçant bien password par votre mot de passe:

CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'password';

Donnez lui les bons privilèges et quittez le shell mariaDB:

GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';
FLUSH PRIVILEGES;
exit

image

PHP

Copiez le fichier PHP www.conf pour créez le fichier librenms.conf:

cp /etc/php/8.1/fpm/pool.d/www.conf /etc/php/8.1/fpm/pool.d/librenms.conf
vi /etc/php/8.1/fpm/pool.d/librenms.conf

Dans ce fichier:

  • Changez [www] par [librenms].
  • Changez la valeur de user et groupe pour librenms.
  • Mettez un nom unique pour listen:
listen = /run/php-fpm-librenms.sock

image
image

NGINX

Éditez le fichier librenms.conf:

nano /etc/nginx/conf.d/librenms.conf

Collez cette configuration en changeant bien le server_name avec l'IP du serveur:

server {
 listen      80;
 server_name *changer moi*;
 root        /opt/librenms/html;
 index       index.php;

 charset utf-8;
 gzip on;
 gzip_types text/css application/javascript text/javascript application/x-javascript image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
 location / {
  try_files $uri $uri/ /index.php?$query_string;
 }
 location ~ [^/]\.php(/|$) {
  fastcgi_pass unix:/run/php-fpm-librenms.sock;
  fastcgi_split_path_info ^(.+\.php)(/.+)$;
  include fastcgi.conf;
 }
 location ~ /\.(?!well-known).* {
  deny all;
 }
}

Enfin, supprimez la page par défaut de NGNIX pour qu'elle ne fasse pas d'interférence avec la page LibreNMS et redémarrez NGNIX et PHP:

rm /etc/nginx/sites-enabled/default
systemctl restart nginx
systemctl restart php8.1-fpm

Configuration

Nous allons sur l'interface web:
image
Nous configurons les quelques options pour la base de données:
image
Nous créons l'utilisateur admin:
image
Finalement, LibreNMS nous propose quelques dernières préférences:
image
image
Nous pouvons donc ensuite nous connecter avec l'utilisateur que l'on vient de créer image
Maintenant, nous allons pouvoir ajouter une machine à monitorer. Pour ce faire, on va dans Devices>Add Device.
image
Nous pouvons indiquer les différents paramètres:
image Capture d’écran du 2023-01-07 13-23-15
Et voilà, l'appareil a été enregistré.
image

ATTENTION: Nous avons eu un problème. Quand on changeait de page, NGINX nous redirigeait avec librenms.example.com ce qui ne fonctionnait pas:
Fonctionne pas
image
Fonctionne
image
Pour régler ce soucis, il faut aller ici:

nano /etc/nginx/conf.d/librenms.conf 

et changer le server-name en mettant l'IP:

server_name *changer moi*;

Installation avec docker

Pendant le blocus, notre serveur ubuntu a rencontré des problèmes critiques qui ont rendu des paquets comme nginx et php inutilisable.

Nous avons dus de ce fait réinstaller librenms mais ne voulions plus retomber dans des problèmes de dépendances, c'est pourquoi nous avons opté pour la méthode docker.
Pour ce faire, nous avons installer docker avec la commande :

snap install docker

Nous avons créer un dossier librenms dans lequel nous allons placer les fichiers de LibreNMS:

mkdir librenms  
cd librenms  

Ensuite, nous allons télécharger les fichiers de configuration docker et le décompresser:

wget https://github.com/librenms/docker/archive/refs/heads/master.zip  
unzip master.zip  

Capture d’écran du 2023-01-07 12-50-31
Nous pouvons donc voir que nous avons bien les bons fichiers:

cd ./docker-master/examples/compose  
ls -a  

Capture d’écran du 2023-01-07 12-55-17
ATTENTION: n'oubliez pas de changer le mot de passe de MYSQL dans le .env.
Capture d’écran du 2023-01-07 13-37-51
ATTENTION: nous avons eu un problème. La version de Docker que nous utilisons n'était pas la même version que celle attendue par LibreNMS. Nous avons dû donc adapter certaines choses.
Capture d’écran du 2023-01-07 13-01-04
Tout d'abord, nous avons dû exporter le nom du projet:

export COMPOSE_PROJECT_NAME=librenms  

Capture d’écran du 2023-01-07 13-31-54
Nous avons dû renommer le dossier dans lequel ce trouve le docker-compose:

mv compose librenms  

Capture d’écran du 2023-01-07 13-32-57
Nous avons dû enlever la première ligne du docker-compose.yml qui était name: librenms :
Capture d’écran du 2023-01-07 13-33-27
Finalement, nous avons lancé le Docker:

docker-compose up -d  

Capture d’écran du 2023-01-07 13-33-49
Une fois tout ceci fait, nous allons sur l'interface web de la machine (http://10.128.3.21:8000/). Contrairement à la façon de le faire à la main, ici, nous devons juste configurer l'utilisateur.
Capture d’écran du 2023-01-07 13-24-31

Mise en place d'une alerte vérifiant la mémoire vive

Pour configurer une alerte, allez sur l'appareil voulu et appuyez sur le petit engrenage:
image
Cliquez ici sur Alert Rules image

On nous demande d'envoyer une alerte quand la mémoire vive dépasse 60% de la mémoire vive totale, et ce pendant au moins une minute. Nous utilisons mempools.mempool_perc pour mesurer le pourcentage de mémoire utilisée. On met "1m" dans le Delay pour vérifier que cette règle reste vraie pendant une minute. "Interval" permets de mettre en place un délai entre les alertes.

Capture d’écran 2022-12-17 à 18 01 55

Bibliographie

snmp

LibreNMS

Clone this wiki locally