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
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;
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”.
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
Port | Service |
---|---|
80 | HTTP |
443 | HTTPS |
10050 | Zabbix Agent |
10051 | Zabbix 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.
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.
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é.
Ç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 👀
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’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 compte utilisateur
Rendez-vous dans Utilisateurs → Utilisateurs et cliquez sur “Créer un 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.
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.
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.
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.
Ajout d’une intégration avec Discord
Créez un serveur discord afin d’y implémenter un webhook.
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”.
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.
Rendez-vous dans l’onglet Administration → Macros et cliquez sur “Ajouter”. De là, ajoutez les macros suivantes :
Macro | Valeur | Description |
---|---|---|
{$DISCORD.WEBHOOK} | https://discord.com/api/webhooks/XX | Webhook Discord |
{$ZABBIX.URL} | http://ZabbixIP/ | URL du serveur Zabbix |
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.
Configuration des agents
Configuration de l’agent Windows
Rendez-vous à la page suivante pour télécharger l’agent Zabbix pour client 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.
Rendez-vous après cela dans Collecte de données → Hôtes afin d’y ajouter notre nouveau serveur.
Configuration de l’agent Linux
Commencez par installer le paquet zabbix-agent2 :
apk add 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.
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.
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
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
Redémarrez le service zabbix-agent2 avec la commande suivante :
service zabbix-agent2 restart