Zabbix est un logiciel de surveillance open-source pour les réseaux et les applications. Il permet de surveiller en temps réel des milliers de métriques collectées à partir de serveurs, de machines virtuelles, de périphériques réseau et d'applications web. Ces métriques peuvent vous aider à déterminer la santé actuelle de votre infrastructure informatique et à détecter les problèmes liés aux composants matériels ou logiciels avant que les clients ne se plaignent. Les informations utiles sont stockées dans une base de données afin que vous puissiez analyser les données au fil du temps et améliorer la qualité des services fournis ou planifier la mise à niveau de votre équipement.
Zabbix utilise plusieurs options pour rassembler des métriques, notamment la surveillance sans agent des services aux utilisateurs et l'architecture client-serveur. Pour collecter les métriques du serveur, il utilise un petit agent sur le client surveillé pour rassembler les données et les envoyer au serveur Zabbix. Zabbix prend en charge la communication cryptée entre le serveur et les clients connectés, de sorte que vos données sont protégées lorsqu'elles circulent sur des réseaux non sécurisés.
Le serveur Zabbix stocke ses données dans une base de données relationnelle alimentée par MySQL ou PostgreSQL. Vous pouvez également stocker des données historiques dans des bases de données NoSQL comme Elasticsearch et TimescaleDB. Zabbix fournit une interface web qui vous permet de visualiser les données et de configurer les paramètres du système.
Prérequis
Nous allons configurer Zabbix sur Ubuntu 20.04. Le serveur utilisera une base de données MariaDB pour enregistrer les données de surveillance et utilisera Nginx pour servir l'interface web.
Ressources :
- OS : Ubuntu 20.04 lts
- 2 vcpu
- 4 Go de ram
- 40 Go de disque
Installation Zabbix
Tout d'abord, vous devez installer Zabbix sur le serveur sur lequel vous avez installé MySQL, Nginx et PHP.
Connectez-vous à cette machine en tant que non-root user :
$ ssh user@zabbix
Zabbix est disponible dans le gestionnaire de packages d'Ubuntu, mais il est dépassé. Utilisez donc le dépôt officiel de Zabbix pour installer la dernière version stable.
Téléchargez et installez le paquet de configuration du dépôt :
$ wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+focal_all.deb $ sudo dpkg -i zabbix-release_5.0-1+focal_all.deb Selecting previously unselected package zabbix-release. (Reading database ... 64058 files and directories currently installed.) Preparing to unpack zabbix-release_5.0-1+focal_all.deb ... Unpacking zabbix-release (1:5.0-1+focal) ... Setting up zabbix-release (1:5.0-1+focal) ...
Mettez à jour l'index des packages afin que le nouveau dépôt soit inclus :
$ sudo apt update
Ensuite, installez le serveur Zabbix et le frontend web avec le support de la base de données MySQL :
$ sudo apt install zabbix-server-mysql zabbix-frontend-php
Installez également l'agent Zabbix, qui vous permettra de recueillir des données sur l'état du serveur Zabbix lui-même.
$ sudo apt install zabbix-agent
Installation MariadB
Pour l'installation de notre plateforme Zabbix, nous allons avoir installer un serveur de base de données sous MariaDB :
$ sudo apt -y install mariadb-common mariadb-server mariadb-client
Important:
Si vous recevez une erreur à cause de dépendances non satisfaites, installez-le comme suit “sudo apt -y install mariadb-common mariadb-server-10.3 mariadb-client-10.3“.
Une fois l'installation terminée, démarrez le service MariaDB et activez-le pour qu'il démarre au lancement du système en utilisant les commandes suivantes :
$ sudo systemctl enable mariadb --now
Sécuriser MariaDB
Sécuriser le serveur de base de données MariaDB en changeant le mot de passe par défaut :
$ sudo mysql_secure_installation Enter current password for root (enter for none): Press the Enter Set root password? [Y/n]: Y New password: <Enter root DB password> Re-enter new password: <Repeat root DB password> Remove anonymous users? [Y/n]: Y Disallow root login remotely? [Y/n]: Y Remove test database and access to it? [Y/n]: Y Reload privilege tables now? [Y/n]: Y
Configurer la base de données pour Zabbix
Vous devez créer une nouvelle base de données et la remplir avec quelques informations de base afin de la rendre compatible avec Zabbix. Nous allons également créer un utilisateur spécifique pour cette base de données afin que Zabbix ne se connecte pas à MariaDB avec le compte root.
Connectez-vous à MySQL en tant que root user et créez la base de données Zabbix avec le support des caractères UTF-8 :
MySQL > create database zabbix character set utf8 collate utf8_bin;
Créez ensuite un utilisateur que le serveur Zabbix utilisera, donnez-lui accès à la nouvelle base de données et définissez le mot de passe de l'utilisateur :
MySQL > create user zabbix@localhost identified by 'your_zabbix_mysql_password'; MySQL > grant all privileges on zabbix.* to zabbix@localhost;
Cela prend soin de l'utilisateur et de la base de données. Sortez de la console de la base de données.
MySQL > quit;
Ensuite, nous allons importer le schéma et les données initiales. L'installation de Zabbix fourni un fichier qui permet de configurer cela.
Exécutez la commande suivante pour configurer le schéma et importer les données dans la base de données zabbix. Utilisez zcat car les données dans le fichier sont compressées :
$ zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
Entrez le mot de passe pour l'utilisateur MariaDB zabbix que vous avez configuré lorsque vous y avez été invité.
Pour que le serveur Zabbix puisse utiliser cette base de données, nous allons définir le mot de passe de la base de données dans le fichier de configuration du serveur Zabbix.
Ouvrez le fichier de configuration dans votre éditeur de texte préféré :
$ sudo nano /etc/zabbix/zabbix_server.conf
Cherchez la section suivante du dossier :
/etc/zabbix/zabbix_server.conf ... ### Option: DBPassword # Database password. Ignored for SQLite. # Comment this line if no password is used. # # Mandatory: no # Default: # DBPassword= ...
Ces commentaires dans le dossier expliquent comment se connecter à la base de données.
Nous allons définir la valeur du DBPassword dans le fichier avec le mot de passe de l'utilisateur de la base de données. Ajoutez cette ligne après ces commentaires pour configurer la base de données :
/etc/zabbix/zabbix_server.conf ... DBPassword=your_zabbix_mysql_password ...
Vous avez maintenant configuré le serveur Zabbix pour vous connecter à la base de données.
Configurer Nginx pour Zabbix
Pour configurer Nginx automatiquement, installez le paquet de configuration automatique :
$ sudo apt install zabbix-nginx-conf
Nous obtenons le fichier de configuration /etc/zabbix/nginx.conf, ainsi qu'un lien vers celui-ci dans le répertoire de configuration de Nginx /etc/nginx/conf.d/zabbix.conf.
Le fichier contient une configuration de bloc serveur Nginx générée automatiquement. Il contient deux lignes qui déterminent le nom du serveur et le port sur lequel il écoute :
/etc/zabbix/nginx.conf server { # listen 80; # server_name example.com; ...
Décommentez les deux lignes, et remplacez example.com par votre nom de domaine. Vos paramètres ressembleront à ceci :
/etc/zabbix/nginx.conf server { listen 80; server_name zabbix.oowy.lan; ...
Enregistrez et fermez le fichier.
Ensuite, procédez à un test pour vous assurer qu'il n'y a aucune erreur de syntaxe dans les fichiers Nginx et relancez la configuration :
$ sudo nginx -t $ sudo nginx -s reload
Attention:
Comme mentionné dans la section « Prérequis », il est recommandé d'activer SSL/TLS sur votre serveur. Si vous souhaitez le faire, suivez notre tutoriel Ubuntu 20.04 Let’s Encrypt avant de passer à l'étape 4 afin d'obtenir un certificat SSL gratuit pour Nginx. Ce processus détectera automatiquement le blocage de votre serveur Zabbix et le configurera pour le HTTPS. Après avoir obtenu vos certificats SSL/TLS, vous pouvez revenir et compléter ce tutoriel.
Configurer PHP pour Zabbix
L'interface web de Zabbix est écrite en PHP et nécessite quelques réglages spéciaux du serveur PHP. Le processus d'installation de Zabbix a créé un fichier de configuration PHP-FPM qui contient ces paramètres.
Il se trouve dans le répertoire /etc/zabbix et est chargé automatiquement par PHP-FPM. Vous devez apporter une petite modification à ce dossier, alors ouvrez-le avec ce qui suit :
$ sudo nano /etc/zabbix/php-fpm.conf
Le fichier contient les paramètres PHP qui répondent aux exigences nécessaires pour l'interface web Zabbix. Toutefois, le réglage du fuseau horaire est commenté par défaut. Pour être sûr que Zabbix utilise la bonne heure, vous devez définir le fuseau horaire approprié :
/etc/zabbix/php-fpm.conf ... php_value[max_execution_time] = 300 php_value[memory_limit] = 128M php_value[post_max_size] = 16M php_value[upload_max_filesize] = 2M php_value[max_input_time] = 300 php_value[max_input_vars] = 10000 ; php_value[date.timezone] = Europe/Riga
Décommentez la ligne de fuseau horaire mise en évidence dans le bloc de code précédent et changez-la pour votre fuseau horaire. Vous pouvez utiliser cette liste de fuseaux horaires pris en charge pour trouver celui qui vous correspond. Maintenant, enregistrez et fermez le fichier.
Redémarrez PHP-FPM pour appliquer ces nouveaux paramètres :
$ sudo systemctl restart php7.4-fpm.service
Vous pouvez maintenant démarrer le serveur Zabbix :
$ sudo systemctl start zabbix-server
Ensuite, vérifiez si le serveur Zabbix fonctionne correctement :
$ sudo systemctl status zabbix-server ● zabbix-server.service - Zabbix Server Loaded: loaded (/lib/systemd/system/zabbix-server.service; disabled; vendor preset: enabled) Active: active (running) since Fri 2020-06-12 05:59:32 UTC; 36s ago Process: 27026 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS) ...
Enfin, permettez au serveur de démarrer au moment du démarrage :
$ sudo systemctl enable zabbix-server Synchronizing state of zabbix-server.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable zabbix-server Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-server.service → /lib/systemd/system/zabbix-server.service.
Vous devez maintenant configurer le logiciel d'agent qui enverra les données de surveillance au serveur Zabbix. Lancer le Zabbix agent sur le serveur.
$ sudo systemctl enable zabbix-agent --now Synchronizing state of zabbix-agent.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable zabbix-agent Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-agent.service → /lib/systemd/system/zabbix-agent.service.
Configurer l'interface web Zabbix
L'interface web vous permet de voir les rapports et d'ajouter des hôtes que vous souhaitez surveiller, mais elle nécessite une configuration initiale avant de pouvoir être utilisée.
Lancez le navigateur et allez à l'adresse :
- http://zabbix_server_name ou https://zabbix_server_name si vous avez configuré Let’s Encrypt.
Sur le premier écran, vous verrez un message de bienvenue. Cliquez sur Next step pour continuer.
Sur l'écran suivant, vous verrez le tableau qui énumère toutes les conditions préalables à l'exécution de Zabbix.
Toutes les valeurs de ce tableau doivent être correctes, vérifiez donc qu'elles le sont. N'oubliez pas de faire défiler vers le bas et d'examiner toutes les conditions préalables. Une fois que vous avez vérifié que tout est prêt, cliquez sur Next step pour continuer.
L'écran suivant demande des informations sur la connexion à la base de données.
Vous avez parlé de votre base de données au serveur Zabbix, mais l'interface web Zabbix a également besoin d'un accès à la base de données pour gérer les hôtes et lire les données. Saisissez donc les identifiants MySQL que vous avez configurés à l'étape 2. Cliquez sur Next step pour continuer.
Sur l'écran suivant, vous pouvez laisser les options à leurs valeurs par défaut.
Le Name est facultatif ; il est utilisé dans l'interface web pour distinguer un serveur d'un autre dans le cas où vous avez plusieurs serveurs de surveillance. Cliquez sur Next step pour continuer.
L'écran suivant affichera le résumé de pré-installation afin que vous puissiez confirmer que tout est correct.
Cliquez sur Next step pour passer à l'écran final.
La configuration de l'interface web est maintenant terminée. Ce processus crée le fichier de configuration /usr/share/zabbix/conf/zabbix.conf.php, que vous pouvez sauvegarder et utiliser à l'avenir.
Cliquez sur Finish pour passer à l'écran de connexion.
L'utilisateur par défaut est Admin et le mot de passe est zabbix
Connectez-vous à l'interface web du serveur Zabbix en naviguant à l'adresse :
Notre plateforme Zabbix est maintenant opérationnelle.
Optimisation
Serveur Zabbix (facultatif)
Ne vous préoccupez pas de cette optimisation si vous surveillez un petit nombre de dispositifs, mais si vous prévoyez de surveiller un grand nombre de dispositifs, continuez avec cette étape.
Ouvrez le fichier “zabbix_server.conf” et ajoutez cette configuration n'importe où dans le fichier :
$ sudo nano /etc/zabbix/zabbix_server.conf
### Option: StartPollers # Number of pre-forked instances of pollers. # # Mandatory: no # Range: 0-1000 # Default: # StartPollers=5 StartPollers=100 ### Option: StartPreprocessors # Number of pre-forked instances of preprocessing workers. # The preprocessing manager process is automatically started when preprocessor worker is started. # # Mandatory: no # Range: 1-1000 # Default: # StartPreprocessors=3 StartPreprocessors=15 ### Option: StartPollersUnreachable # Number of pre-forked instances of pollers for unreachable hosts (including IPMI and Java). # At least one poller for unreachable hosts must be running if regular, IPMI or Java pollers # are started. # # Mandatory: no # Range: 0-1000 # Default: # StartPollersUnreachable=1 StartPollersUnreachable=50 ### Option: StartTrappers # Number of pre-forked instances of trappers. # Trappers accept incoming connections from Zabbix sender, active agents and active proxies. # At least one trapper process must be running to display server availability and view queue # in the frontend. # # Mandatory: no # Range: 0-1000 # Default: # StartTrappers=5 StartTrappers=10 ### Option: StartPingers # Number of pre-forked instances of ICMP pingers. # # Mandatory: no # Range: 0-1000 # Default: # StartPingers=1 StartPingers=50 ### Option: StartDiscoverers # Number of pre-forked instances of discoverers. # # Mandatory: no # Range: 0-250 # Default: # StartDiscoverers=1 StartDiscoverers=15 ### Option: StartHTTPPollers # Number of pre-forked instances of HTTP pollers. # # Mandatory: no # Range: 0-1000 # Default: # StartHTTPPollers=1 StartHTTPPollers=5 ### Option: StartTimers # Number of pre-forked instances of timers. # Timers process maintenance periods. # Only the first timer process handles host maintenance updates. Problem suppression updates are shared # between all timers. # # Mandatory: no # Range: 1-1000 # Default: # StartTimers=1 StartTimers=2 ### Option: StartEscalators # Number of pre-forked instances of escalators. # # Mandatory: no # Range: 0-100 # Default: # StartEscalators=1 StartEscalators=2 ### Option: StartAlerters # Number of pre-forked instances of alerters. # Alerters send the notifications created by action operations. # # Mandatory: no # Range: 0-100 # Default: # StartAlerters=3 StartAlerters=5 ### Option: CacheSize # Size of configuration cache, in bytes. # Shared memory size for storing host, item and trigger data. # # Mandatory: no # Range: 128K-64G # Default: # CacheSize=8M CacheSize=128M ### Option: HistoryCacheSize # Size of history cache, in bytes. # Shared memory size for storing history data. # # Mandatory: no # Range: 128K-2G # Default: # HistoryCacheSize=16M HistoryCacheSize=64M ### Option: HistoryIndexCacheSize # Size of history index cache, in bytes. # Shared memory size for indexing history cache. # # Mandatory: no # Range: 128K-2G # Default: # HistoryIndexCacheSize=4M HistoryIndexCacheSize=32M ### Option: TrendCacheSize # Size of trend cache, in bytes. # Shared memory size for storing trends data. # # Mandatory: no # Range: 128K-2G # Default: # TrendCacheSize=4M TrendCacheSize=32M ### Option: ValueCacheSize # Size of history value cache, in bytes. # Shared memory size for caching item history data requests. # Setting to 0 disables value cache. # # Mandatory: no # Range: 0,128K-64G # Default: # ValueCacheSize=8M ValueCacheSize=256M
Vous pouvez en savoir plus sur les paramètres pris en charge dans un fichier de configuration de serveur Zabbix dans la documentation officielle.
Si vous essayez de démarrer le serveur Zabbix, vous recevrez une erreur “[Z3001] connection to database 'Zabbix' failed : [1040] Too many connections” dans le journal “/var/log/zabbix/zabbix_server.log” car nous utilisons plus de processus de serveur Zabbix que MariaDB ne peut en gérer.
Nous devons augmenter le nombre maximal autorisé de connexions client simultanées et optimiser MariaDB.
Serveur MariaDB (facultatif)
Après avoir réalisé des modifications sur le paramétrage du zabbix server, nous allons créer le fichier “10_custom.cnf”
$ nano /etc/mysql/mariadb.conf.d/10_custom.cnf
Coller cette configuration :
[mysqld] max_connections = 404 innodb_buffer_pool_size = 800M innodb-log-file-size = 128M innodb-log-buffer-size = 128M innodb-file-per-table = 1 innodb_buffer_pool_instances = 8 innodb_old_blocks_time = 1000 innodb_stats_on_metadata = off innodb-flush-method = O_DIRECT innodb-log-files-in-group = 2 innodb-flush-log-at-trx-commit = 2 tmp-table-size = 96M max-heap-table-size = 96M open_files_limit = 65535 max_connect_errors = 1000000 connect_timeout = 60 wait_timeout = 28800
On sauvegarde notre nouveau fichier de configuration et on définit les bons droits.
$ sudo chown mysql:mysql /etc/mysql/mariadb.conf.d/10_custom.cnf $ sudo chmod 644 /etc/mysql/mariadb.conf.d/10_custom.cnf
Redémarrage des services
$ sudo systemctl stop zabbix-server $ sudo systemctl stop mysql $ sudo systemctl start mysql $ sudo systemctl start zabbix-server