Qu’est-ce que Zabbix ?

Zabbix est une solution de monitoring open-source utilisée pour suivre la performance et la disponibilité des serveurs, des applications, des réseaux et de l’infrastructure informatique en général. Il permet de collecter des données en temps réel sur l’état des systèmes, d’envoyer des alertes en cas de détection de problèmes, et de générer des rapports et des graphiques pour faciliter l’analyse. Il utilise un modèle de collecte de données basé sur des agents installés sur les hôtes à surveiller ou via des requêtes SNMP (ou encore MQTT).

Prérequis

  • Une machine virtuelle Rocky Linux
  • Une connexion à Internet
  • Des machines à monitorer
  • Un cerveau

ND : À noter qu’ici nous installerons le serveur complet sur une seule machine. mariadb et nginx seront de ce fait stockés sur cette même machine. De plus, je ne vais pas vous montrer ici comment installer un certificat TLS pour la page Web. HAProxy pourra délivrer aux utilisateurs un certificat valide.

Installation du service

Installation du repo Zabbix

rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-latest-7.0.el9.noarch.rpm
dnf clean all

Installation du serveur Zabbix, d’nginx, de l’agent et de mariadb

dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent2 zabbix-agent2-plugin-* mariadb-server

Installation des paquets

Si dnf vous demande d’autoriser l’ajout des clés GPG, faites-donc :

Zabbix Official Repository - x86_64                                   3.1 kB
Import de la clef GPG 0xB5333005 :
Utilisateur : « Zabbix LLC (Apr 2024) <packager@zabbix.com> »
Empreinte : 4C3D 6F2C C75F 5146 754F C374 D913 219A B533 3005
Provenance : /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-B5333005
Voulez-vous continuer ? [o/N] : o
La clé a bien été importée
Zabbix Official Repository (non-supported) - x86_64                   3.1 kB
Import de la clef GPG 0x08EFA7DD :
Utilisateur : « Zabbix LLC (Jul 2022) <packager@zabbix.com> »
Empreinte : D9AA 84C2 B617 479C 6E4F CF4D 19F2 4753 08EF A7DD
Provenance : /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-08EFA7DD
Voulez-vous continuer ? [o/N] : o

Paramétrage de mariadb

Activation au démarrage et lancement de mariadb

systemctl enable --now mariadb

““Sécurisation”” du serveur mariadb

mysql_secure_installation
Switch to unix_socket authentication [Y/n] 
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] 
Disallow root login remotely? [Y/n] 
Remove test database and access to it? [Y/n] 
Reload privilege tables now? [Y/n]

Création de la base de données

mysql -u root -p
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
SET GLOBAL log_bin_trust_function_creators = 1;
quit;

Création de la base de données

Importation de la structure de la base de données de Zabbix sur la base SQL

zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -u zabbix -p zabbix

ND : Renseignez le mot de passe que vous avez donné à votre utilisateur zabbix pendant la création de la database après avoir tapé la commande précédente.

Désactivation de la fonctionnalité ’log_bin_trust_function_creators’ activée précédemment qui permet de créer des fonctions ou des triggers dans la base de données avec un utilisateur sans privilèges

mysql -u root -p
SET GLOBAL log_bin_trust_function_creators = 0;
quit;

Liaison de la base de données avec le serveur Zabbix

Éditez le fichier /etc/zabbix/zabbix_server.conf pour décommenter la variable “DBPassword” et y insérer le mot de passe de l’utilisateur “zabbix”.

Modification du fichier zabbix_server.conf

Redémarrage des services et lancement de ces dit-services au boot de la machine

systemctl restart zabbix-server zabbix-agent2 nginx php-fpm
systemctl enable zabbix-server zabbix-agent2 nginx php-fpm

Autorisation des ports avec firewall-cmd

firewall-cmd --zone=public --add-port=80/tcp --add-port=443/tcp --add-port=10050/tcp --add-port=10051/tcp --permanent
firewall-cmd --reload
PortService
80HTTP
443HTTPS
10050Zabbix Agent
10051Zabbix Trapper

Autorisation d’accéder au réseau pour Zabbix auprès d’SELinux

setsebool -P zabbix_can_network on

Configuration du service

Connection au dashboard

Vous pouvez maintenant écrire l’adresse IP de votre serveur Zabbix dans votre navigateur. Vous devriez être accueilli par le wizard.

Page de bienvenue

Cliquez sur “Prochaine étape” afin d’arriver sur la page “Vérification des prérequis”. Si vous avez bien suivi ce guide, tout devrait être sur OK et vous devriez être en mesure de continuer.

Pour “Configurer la connexion à la base de données”, nous avons installé celle-ci sur la machine locale, de ce fait, laissez localhost comme hôte. Renseignez le nom de la base de données, son utilisateur ainsi que son mot de passe. Laissez “Texte brut” pour stocker les informations d’identification étant donné que nous n’avons pas mis en place de Vault HashiCorp ou CyberArk.

Configuration de la base de données

Renseignez le nom de votre serveur dans le champ à cet effet, le fuseau horaire de celui-ci (ici, (UTC+01:00) Europe/Paris) et le thème qui sera utilisé par défaut.

Zabbix vous fera un résumé avant l’installation. À présent, le fichier /etc/zabbix/web/zabbix.conf.php sera généré.

Résumé pré-installation

Ça y est ! La page de login ! Plus très loin du début de la fin. Veuillez noter que le combo login/mdp est Admin/zabbix 👀

Page de connexion

Création d’un groupe d’hôtes

Rendez-vous dans Collecte de données → Groupes d’hôtes et cliquez sur “Créer un groupe d’hôtes”. Donnez-lui un nom et cliquez sur “Ajouter”.

Création d’un groupe d’hôtes

Création d’un groupe d’utilisateurs

Rendez-vous dans Utilisateurs → Groupe d’utilisateurs et cliquez sur “Créer un groupe d’utilisateurs”. Donnez-lui un nom et allez dans l’onglet “Autorisations de l’hôte”. Ici, vous pouvez sélectionner votre groupe d’hôte précédemment créé. Donnez-lui les permissions appropriées à votre cas et cliquez sur “Ajouter”.

Création d’un groupe d’utilisateurs

Ajout des autorisations appropriées sur le groupe d’utilisateurs

Création d’un compte utilisateur

Rendez-vous dans Utilisateurs → Utilisateurs et cliquez sur “Créer un utilisateur”.

Création d’un utilisateur

Ajout des permissions appropriées sur l’utilisateur

Profitez d’être dans cet onglet pour modifier le mot de passe du compte “Admin”.

Ajout d’une intégration avec Gmail

Rendez-vous à cette page afin de générer un token pour Zabbix. Google ne permettant plus de se connecter directement à ses serveurs SMTP via le mot de passe de votre compte, il est nécessaire de générer un mot de passe spécifiquement pour Zabbix.

Création d’un token pour Zabbix

Vous pouvez maintenant copier le mot de passe généré de 16 caractères. Attention tout de même, il ne sera plus possible de voir ce mot de passe par la suite.

Affichage du mot de passe d’application

Rendez-vous dans l’onglet Alertes → Types de média puis sur Gmail sur votre Dashboard Zabbix et renseignez vos identifiants. Attention à ne pas coller le mot de passe avec des espaces.

Configuration du hook Gmail

Cliquez sur “Actualiser” puis à droite du service Gmail, cliquez sur “Test”. Renseignez votre email personnel et cliquez sur “Test”. Vous devriez recevoir un mail dans la minute qui suit.

Envoi du mail de test

Résultat du mail de test

Ajout d’une intégration avec Discord

Créez un serveur discord afin d’y implémenter un webhook.

Création du serveur

Dans les paramètres du channel que vous voulez utiliser pour intégrer le webhook, clliquez sur “Intégrations” puis sur “Créer un webhook”. Cliquez ensuite sur “Copier l’URL du webhook”.

Création du webhook

Retournez sur Zabbix et activez le service Discord dans l’onglet Alertes → Types de média puis cliquez sur “Test”. De là, renseignez dans l’onglet “discord_endpoint” votre clé API webhook. De plus, renseignez l’URL de votre serveur Zabbix dans le champ “zabbix_url”. Enfin, mettez à 0 les valeurs suivantes : “event_source”, “event_update_status” et “event_value” De là, lorsque vous cliquerez sur “Test”, vous devriez recevoir un message de Zabbix sur votre serveur discord.

Test du webhook

Résultat du test du webhook

Rendez-vous dans l’onglet Administration → Macros et cliquez sur “Ajouter”. De là, ajoutez les macros suivantes :

MacroValeurDescription
{$DISCORD.WEBHOOK}https://discord.com/api/webhooks/XXWebhook Discord
{$ZABBIX.URL}http://ZabbixIP/URL du serveur Zabbix

Ajout des macros

Enfin, rendez-vous dans l’onglet Utilisateurs → Utilisateurs afin de créer un utilisateur avec le rôle “Guest” qui enverra les messages sur Discord.

Création du compte - Utilisateur

Création du compte - Média

Configuration des agents

Configuration de l’agent Windows

Rendez-vous à la page suivante pour télécharger l’agent Zabbix pour client Windows.

Téléchargement de l’agent Windows

Après avoir exécuté le .msi, vous allez devoir renseigner les informations qui permettrons à votre agent de contacter votre serveur Zabbix. Renseignez-donc le nom d’hôte de votre machine ainsi que l’IP de votre serveur Zabbix dans les champs “Zabbix server IP/DNS” et “Server or Proxy for active checks”. Changer le port d’écoute de l’agent n’est pas nécessaire.

Installation de l’agent Windows

Rendez-vous après cela dans Collecte de données → Hôtes afin d’y ajouter notre nouveau serveur.

Création de l’hôte Windows Server dans Zabbix

Configuration de l’agent Linux

Commencez par installer le paquet zabbix-agent2 :

apk add zabbix-agent2

Installation du paquet zabbix-agent2

Rendez-vous ensuite dans le fichier /etc/zabbix/zabbix_agent2.conf afin de configurer ledit agent.

Remplacez Server=127.0.0.1 par l’adresse de votre serveur Zabbix. Dans mon cas, je dois remplacer cette valeur par Server=192.168.0.128.

Décommentez ListenIP=0.0.0.0 et marquez à la place l’IP de votre client. Dans mon cas, je dois remplacer cette valeur par ListenIP=192.168.0.129.

Remplacez ServerActive=127.0.0.0 par l’IP de votre/vos serveur(s) Zabbix suivi du port Zabbix Trapper. Dans mon cas, je dois remplacer cette valeur par ServerActive=192.168.0.128:10051.

Enfin, décommenter Hostname=Zabbix server par le nom qui sera attribué à l’agent. Dans mon cas, ce sera Hostname=alpine-srv-web.

À noter qu’il n’y a pas besoin de modifier le champ AllowKey qui sert à autoriser l’envoi de commandes à distance. En effet, si aucunes règles AllowKey ou DenyKey ne sont définies, toutes les clés sont autorisées sur le client.

Activez le service zabbix-agent2 au démarrage du système et démarrez le service :

rc-update add zabbix-agent2
service zabbix-agent2 start

Rendez-vous après cela dans Collecte de données → Hôtes afin d’y ajouter notre nouveau serveur.

Création de l’hôte Linux dans Zabbix

Si nous nous rendons alors dans Surveillance → Hôtes, nous pouvons voir nos différentes hôtes ajoutées ainsi que leurs données remontées par l’agent Zabbix.

Liste des hôtes ajoutées

Ajout d’une clé PSK pour l’agent Linux

Créez une clé PSK sur votre client Linux et modifiez ses permissions pour autoriser uniquement l’utilisateur zabbix à pouvoir modifier cette dite clé.

openssl rand -hex 32 > /etc/zabbix/secret.psk
chown zabbix:zabbix /etc/zabbix/secret.psk
chmod 640 /etc/zabbix/secret.psk

Rendez-vous dans /etc/zabbix/zabbix_agent2.conf et faites les manipulations suivantes :

Décommentez TLSConnect=unencrypted et mettez à la place TLSConnect=psk Décommentez TLSAccept=unencrypted et mettez à la place TLSAccept=psk

Configuration TLS sur agent Zabbix

Décommentez TLSPSKIdentity= et mettez TLSPSKIdentity=*suivi du nom d'hôte de la machine* soit dans mon cas TLSPSKIdentity=alpine-srv-web

Décommentez TLSPSKFile= et mettez TLSPSKFile=/etc/zabbix/secret.psk

Configuration TLSPSK sur agent Zabbix

Redémarrez le service zabbix-agent2 avec la commande suivante :

service zabbix-agent2 restart