Red Hat 8, Alma Linux 8 : Installer et configurer Zabbix
Table des matières
ZABBIX est un logiciel permettant de surveiller l'état de divers services réseau, serveurs et autres matériels réseau.
Dans un premier temps, mettre en service les dépôts epel :
CentOS 8 :
Oracle Linux 8 :
Mettre à jour ensuite le système :
Ajouter enfin dépôts officiels de Zabbix :
https://www.zabbix.com/download
Exemple ici avec la version 4.0 LTS utilisée dans ce tuto :
On va donc installer le serveur Zabbix, l'agent Zabbix et aussi l'interface Web. J'installe en même temps les composants essentiels à leur fonctionnement : Apache2, MariaDB et PHP :
Dans un premier temps, on va activer au redémarrage le service de base de données et le démarrer :
On initialise le moteur de base de données :
On se connecte ensuite sur la base de données avec le mot de passe précédemment défini pour root :
On créé la table et l'utilisateur zabbix :
Ensuite, on importe la structure de la base de données :
On modifie quelques valeurs dans le fichier de configuration de PHP (mémoire, fuseau horaire) :
Le fichier de configuration de Zabbix Web est le suivant : /etc/httpd/conf.d/zabbix.conf. Par défaut, aucune modification n'est à apporter.
Le fichier de configuration du serveur Zabbix est le suivant : /etc/zabbix/zabbix_server.conf. On peut renseigner le mot de passe de la base de données si on l'a changé en modifiant la valeur de DBPassword :
Il faut aussi ouvrir les ports du pare-feu, notamment HTTP HTTPS et 10050 :
Puis on recharge la config du parefeu :
Si SELinux est actif, il faut penser à autoriser Zabbix et Apache à communiquer sur le réseau et à ce que les deux services communiquent ensemble :
Ensuite dans Zabbix, il suffit de créer un élément (Item), de Type : "Zabbix Agent", la clé, celle mise dans le fichier précédemment, et évidemment de sélectionner le bon type d'information et type de données.
On peut générer un graphe avec les informations précédemment remplies :
Introduction
ZABBIX est un logiciel permettant de surveiller l'état de divers services réseau, serveurs et autres matériels réseau.
Installer Zabbix
Prérequis
Dans un premier temps, mettre en service les dépôts epel :
CentOS 8 :
Code BASH :
dnf install epel-release
Oracle Linux 8 :
Code BASH :
dnf install oracle-epel-release-el8
Mettre à jour ensuite le système :
Code BASH :
dnf upgrade
Ajouter enfin dépôts officiels de Zabbix :
https://www.zabbix.com/download
Exemple ici avec la version 4.0 LTS utilisée dans ce tuto :
Code BASH :
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
Installation des paquets
On va donc installer le serveur Zabbix, l'agent Zabbix et aussi l'interface Web. J'installe en même temps les composants essentiels à leur fonctionnement : Apache2, MariaDB et PHP :
Code BASH :
dnf install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-agent httpd mariadb-server php
Configuration
La base de données
Dans un premier temps, on va activer au redémarrage le service de base de données et le démarrer :
Code BASH :
systemctl enable --now mariadb
On initialise le moteur de base de données :
Code BASH :
mysql_secure_installation
On se connecte ensuite sur la base de données avec le mot de passe précédemment défini pour root :
Code BASH :
mysql -u root -p
On créé la table et l'utilisateur zabbix :
Code SQL :
CREATE DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin; GRANT ALL privileges ON zabbix.* TO zabbix@localhost IDENTIFIED BY 'supermdp'; FLUSH privileges; exit
Ensuite, on importe la structure de la base de données :
Code BASH :
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
On modifie quelques valeurs dans le fichier de configuration de PHP (mémoire, fuseau horaire) :
Code BASH :
sed -i 's/^max_execution_time.*/max_execution_time=600/' /etc/php.ini sed -i 's/^max_input_time.*/max_input_time=600/' /etc/php.ini sed -i 's/^memory_limit.*/memory_limit=256M/' /etc/php.ini sed -i 's/^post_max_size.*/post_max_size=32M/' /etc/php.ini sed -i 's/^upload_max_filesize.*/upload_max_filesize=16M/' /etc/php.ini sed -i "s/^\;date.timezone.*/date.timezone=\'Europe\/Paris\'/" /etc/php.ini
Zabbix Server
Le fichier de configuration de Zabbix Web est le suivant : /etc/httpd/conf.d/zabbix.conf. Par défaut, aucune modification n'est à apporter.
Le fichier de configuration du serveur Zabbix est le suivant : /etc/zabbix/zabbix_server.conf. On peut renseigner le mot de passe de la base de données si on l'a changé en modifiant la valeur de DBPassword :
Code BASH :
vi /etc/zabbix/zabbix_server.conf
Parefeu
Il faut aussi ouvrir les ports du pare-feu, notamment HTTP HTTPS et 10050 :
Code BASH :
firewall-cmd --add-service=http --permanent firewall-cmd --add-service=https --permanent firewall-cmd --add-port=10050/tcp --permanent firewall-cmd --add-port=10051/tcp --permanent
Puis on recharge la config du parefeu :
Code BASH :
firewall-cmd --reload
SELinux
Si SELinux est actif, il faut penser à autoriser Zabbix et Apache à communiquer sur le réseau et à ce que les deux services communiquent ensemble :
Code BASH :
setsebool -P httpd_can_connect_zabbix on[/code] setsebool -P httpd_can_network_connect on setsebool -P zabbix_can_network on[/code] [style=notice]Pour info, toutes les variables SElinux pour zabbix peuvent être obtenues ainsi : [code=bash]getsebool -a | grep zabbix httpd_can_connect_zabbix --> on zabbix_can_network --> on zabbix_run_sudo --> off [/code][/style] On créera aussi un module SELINUX avec toutes les directives nécessaires pour permettre à zabbix de fonctionner (je le fais en root direct) : [code=bash]mkdir -p /root/zabbix-selinux cd /root/zabbix-selinux/[/code] On va créer la politique SELINUX : [code=bash]vi zabbix_server_add.te[/code] [code=text]module zabbix_server_add 1.1; require { type zabbix_var_run_t; type tmp_t; type zabbix_t; class sock_file { create unlink write }; class unix_stream_socket connectto; class process setrlimit; class capability dac_override; } #============= zabbix_t ============== #!!!! This avc is allowed in the current policy allow zabbix_t self:process setrlimit; #!!!! This avc is allowed in the current policy allow zabbix_t self:unix_stream_socket connectto; #!!!! This avc is allowed in the current policy allow zabbix_t tmp_t:sock_file { create unlink write }; #!!!! This avc is allowed in the current policy allow zabbix_t zabbix_var_run_t:sock_file { create unlink write }; #!!!! This avc is allowed in the current policy allow zabbix_t self:capability dac_override;[/code] On vérifie le module, on le compile et on le charge dans le système : [code=bash]checkmodule -M -m -o zabbix_server_add.mod zabbix_server_add.te semodule_package -m zabbix_server_add.mod -o zabbix_server_add.pp semodule -i zabbix_server_add.pp[/code] Pour ceux qui veulent désactiver SeLinux, passer à disabled la variable SELINUX dans le fichier [b]/etc/sysconfig/selinux[/b] et redémarrer. --- Activer et démarrer les services --- On active et démarre tous les services : [code=bash]systemctl enable --now zabbix-agent systemctl enable --now zabbix-server systemctl enable --now httpd[/code] -- Lancer l'initialisation de Zabbix via l'interface Web -- On se rend sur la page web du serveur : [url=http://ip_du_serveur/zabbix/]http://ip_du_serveur/zabbix/[/url] et on arrive sur cette page : [align=center][img]/upload/zabbix_5_oracle_1.png[/img][/align] On fait suivant et on arrive sur l'écran de récapitulation des prérequis : [align=center][img]/upload/zabbix_5_oracle_2.png[/img][/align] On fait suivant puis on arrive sur l'écran de configuration de la connexion à la base de données : [align=center][img]/upload/zabbix_5_oracle_3.png[/img][/align] On complète les bonnes infos puis Suivant : [align=center][img]/upload/zabbix_5_oracle_4.png[/img][/align] On complète les infos sur le serveur local puis Suivant. On a un résumé de la configuration : [align=center][img]/upload/zabbix_5_oracle_5.png[/img][/align] On fait suivant et on a cet écran qui nous dit que tout est OK. On clique sur Finish. [align=center][img]/upload/zabbix_5_oracle_6.png[/img][/align] On se connecte à l'interface. Par défaut, l'utilisateur est [b]Admin[/b] (A majuscule) et le mot de passe [b]zabbix [/b] : [align=center][img]/upload/zabbix_5_oracle_7.png[/img][/align] Et nous voilà connecté ! [align=center][img]/upload/zabbix_5_oracle_8.png[/img][/align] -- Installer les agents sur les clients -- --- Prérequis --- Comme pour le serveur on s'assure d'être à jour : [code=bash]dnf update[/code] On active les dépôts EPEL : CentOS 8 : [code=bash]dnf install epel-release[/code] Oracle Linux 8 : [code=bash]dnf install oracle-epel-release-el8[/code] On installe le dépôt de Zabbix : [code=bash]rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm[/code] --- Installation de l'agent Zabbix --- On installe l'agent via : [code=bash]dnf install zabbix-agent[/code] --- Configuration de l'agent --- On configure l'agent en indiquant l'IP du serveur Zabbix (Dans mon exemple 192.168.221.121) ,on désactive le "Server Active" , et on renseigne le nom d'hôte de la machine (ici j'ai installé sur SRV-LAMP01) : [code=bash]sed -i 's/^Server=127.0.0.1/Server=192.168.221.121/g' /etc/zabbix/zabbix_agentd.conf sed -i 's/^ServerActive=127.0.0.1/ServerActive=/g' /etc/zabbix/zabbix_agentd.conf sed -i 's/^Hostname=Zabbix server/Hostname=SRV-LAMP01/g' /etc/zabbix/zabbix_agentd.conf[/code] --- Activation des services --- On active au démarrage le service de l'Agent Zabbix puis on le démarre : [code=bash]systemctl enable --now zabbix-agent[/code] -- Problèmes rencontrés -- --- Politiques SELinux Avec Zabbix 2.2 --- Pour le Service MySQL : [code=bash]grep zabbix_agent /var/log/audit/audit.log|grep mysql.sock|tail -1| audit2allow -M zabbix_mysql semodule -i zabbix_mysql.pp [/code] Pour fping [code=bash]grep fping /var/log/audit/audit.log | audit2allow -M zabbix_fping semodule -i zabbix_fping.pp[/code] --- MySQL Status renvoie toujours down --- Si on est sûr que le service MySQL est UP mais que Zabbix renvoie toujours "Down", analyser les logs : [code=bash]tailf /var/log/zabbix/zabbix_agentd.log[/code] Si on a ce genre de message : [code]mysqladmin: connect to server at 'localhost' failed error: 'Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)' Check that mysqld is running and that the socket: '/var/lib/mysql/mysql.sock' exists![/code] Créer le répertoire personnel de Zabbix et lui donner les droits : [code=bash]mkdir /var/lib/zabbix chown -R zabbix:zabbix /var/lib/zabbix[/code] Créer le fichier de préférences de mysql pour indiquer le nom du compte à utiliser par défaut : [code=bash]vi /var/lib/zabbix/.my.cnf[/code] [code=bash][client] user=ro password=ro socket=/var/lib/mysql/mysql.sock[/code] Ici j'ai donné un compte (ro pour read only) qui n'a qu'un accès en lecture à la base de données que j'ai précédemment créé : [code=sql]GRANT SELECT ON *.* TO 'ro'@'localhost' IDENTIFIED BY 'ro'; FLUSH PRIVILEGES;[/code] On redémarre l'agent et tout rentre dans l'ordre : [code=bash]systemctl restart zabbix-agent[/code] --- Template ICMP ne fonctionne pas (fping) --- Si le modèle ICMP Ping ne fonctionne pas c'est probablement dû à des permissions incorrectes sur le programme fping. Sauvegarder la commande fping et modifier ses permissions : [code=bash]cp -p /usr/sbin/fping /usr/sbin/fping.old chown root:zabbix /usr/sbin/fping chmod 4710 /usr/sbin/fping[/code] -- Créer des variables personnalisées -- On peut si on le souhaite faire des variables personnalisées remontées par l'agent Zabbix. Pour cela, on modifie le fichier de l'agent : [b]/etc/zabbix/zabbix_agentd.conf[/b] Voici un exemple ici avec 3 valeurs personnalisées qui remontent les températures des disques et des CPU : [code=bash]UserParameter=hdd.tempa,sudo smartctl -a /dev/sda | grep Temperature_Celsius | awk '{ print $10 ; }' UserParameter=cpu.tempa,sensors -u | grep -Eo 'temp2_input: ([0-9])+' | sed -e 's/temp2_input: //' UserParameter=cpu.tempb,sensors -u | grep -Eo 'temp3_input: ([0-9])+' | sed -e 's/temp3_input: //'[/code] De manière générale, la ligne doit être composée ainsi : [code=bash]UserParameter=cle,commande[/code] Il suffit une fois fait de relancer le service de l'agent : [code=bash]systemctl restart zabbix-agent
Ensuite dans Zabbix, il suffit de créer un élément (Item), de Type : "Zabbix Agent", la clé, celle mise dans le fichier précédemment, et évidemment de sélectionner le bon type d'information et type de données.
On peut générer un graphe avec les informations précédemment remplies :