Red Hat et dérivées version SERVEUR

Red Hat 8, Alma Linux 8 : Installer et configurer Zabbix

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

zabbix_logo



Introduction



ZABBIX est un logiciel permettant de surveiller l'état de divers services réseau, serveurs et autres matériels réseau.

Cet article a été fait avec la version 2.2 LTS de Zabbix et mis à jour en 4.0. puis en 5.0 LTS le 18 décembre 2020

Installer Zabbix



Prérequis




Dans un premier temps, mettre en service les dépôts epel :

Alma Linux 8 :
Copier vers le presse-papierCode BASH :
dnf config-manager --set-enabled powertools
dnf install epel-release


Red Hat 8 :
Copier vers le presse-papierCode BASH :
subscription-manager repos --enable codeready-builder-for-rhel-8-$(arch)-rpms
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm


Mettre à jour ensuite le système :

Copier vers le presse-papierCode 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 :

Copier vers le presse-papierCode 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 :

Copier vers le presse-papierCode 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 :

Copier vers le presse-papierCode BASH :
systemctl enable --now mariadb


On initialise le moteur de base de données :

Copier vers le presse-papierCode 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 :

Copier vers le presse-papierCode BASH :
mysql -u root -p


On créé la table et l'utilisateur zabbix :

Copier vers le presse-papierCode 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 :

Copier vers le presse-papierCode 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) :

Copier vers le presse-papierCode 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 :

Copier vers le presse-papierCode BASH :
vi /etc/zabbix/zabbix_server.conf



Parefeu



Il faut aussi ouvrir les ports du pare-feu, notamment HTTP HTTPS et 10050 :

Copier vers le presse-papierCode 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 :

Copier vers le presse-papierCode 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 :

Copier vers le presse-papierCode BASH :
setsebool -P httpd_can_connect_zabbix on
setsebool -P httpd_can_network_connect on
setsebool -P zabbix_can_network on


Pour info, toutes les variables SElinux pour zabbix peuvent être obtenues ainsi :
Copier vers le presse-papierCode BASH :
getsebool -a | grep zabbix
httpd_can_connect_zabbix --> on
zabbix_can_network --> on
zabbix_run_sudo --> off
 


On créera aussi un module SELINUX avec toutes les directives nécessaires pour permettre à zabbix de fonctionner (je le fais en root direct) :

Copier vers le presse-papierCode BASH :
mkdir -p /root/zabbix-selinux
cd /root/zabbix-selinux/


On va créer la politique SELINUX :

Copier vers le presse-papierCode BASH :
vi zabbix_server_add.te


Copier vers le presse-papierCode 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;


On vérifie le module, on le compile et on le charge dans le système :

Copier vers le presse-papierCode 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


Pour ceux qui veulent désactiver SeLinux, passer à disabled la variable SELINUX dans le fichier /etc/sysconfig/selinux et redémarrer.

Activer et démarrer les services



On active et démarre tous les services :

Copier vers le presse-papierCode BASH :
systemctl enable --now zabbix-agent
systemctl enable --now zabbix-server
systemctl enable --now httpd


Lancer l'initialisation de Zabbix via l'interface Web



On se rend sur la page web du serveur : http://ip_du_serveur/zabbix/ et on arrive sur cette page :

zabbix_5_oracle_1


On fait suivant et on arrive sur l'écran de récapitulation des prérequis :

zabbix_5_oracle_2


On fait suivant puis on arrive sur l'écran de configuration de la connexion à la base de données :

zabbix_5_oracle_3


On complète les bonnes infos puis Suivant :

zabbix_5_oracle_4


On complète les infos sur le serveur local puis Suivant. On a un résumé de la configuration :

zabbix_5_oracle_5


On fait suivant et on a cet écran qui nous dit que tout est OK. On clique sur Finish.

zabbix_5_oracle_6


On se connecte à l'interface. Par défaut, l'utilisateur est Admin (A majuscule) et le mot de passe zabbix :

zabbix_5_oracle_7


Et nous voilà connecté !

zabbix_5_oracle_8



Installer les agents sur les clients



Prérequis



Comme pour le serveur on s'assure d'être à jour :

Copier vers le presse-papierCode BASH :
dnf update


On active les dépôts EPEL :

CentOS 8 :
Copier vers le presse-papierCode BASH :
dnf install epel-release


Oracle Linux 8 :
Copier vers le presse-papierCode BASH :
dnf install oracle-epel-release-el8


On installe le dépôt de Zabbix :
Copier vers le presse-papierCode BASH :
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm


Installation de l'agent Zabbix



On installe l'agent via :
Copier vers le presse-papierCode BASH :
dnf install zabbix-agent


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) :

Copier vers le presse-papierCode 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


Activation des services



On active au démarrage le service de l'Agent Zabbix puis on le démarre :
Copier vers le presse-papierCode BASH :
systemctl enable --now zabbix-agent


Problèmes rencontrés



Politiques SELinux Avec Zabbix 2.2



Pour le Service MySQL :
Copier vers le presse-papierCode BASH :
grep zabbix_agent /var/log/audit/audit.log|grep mysql.sock|tail -1| audit2allow -M zabbix_mysql
semodule -i zabbix_mysql.pp 


Pour fping
Copier vers le presse-papierCode BASH :
grep fping /var/log/audit/audit.log | audit2allow -M zabbix_fping
semodule -i zabbix_fping.pp


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 :
Copier vers le presse-papierCode BASH :
tailf /var/log/zabbix/zabbix_agentd.log


Si on a ce genre de message :
Copier vers le presse-papierCode :
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!


Créer le répertoire personnel de Zabbix et lui donner les droits :
Copier vers le presse-papierCode BASH :
mkdir /var/lib/zabbix
chown -R zabbix:zabbix /var/lib/zabbix


Créer le fichier de préférences de mysql pour indiquer le nom du compte à utiliser par défaut :
Copier vers le presse-papierCode BASH :
vi /var/lib/zabbix/.my.cnf


Copier vers le presse-papierCode BASH :
[client]
user=ro
password=ro
socket=/var/lib/mysql/mysql.sock


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éé :

Copier vers le presse-papierCode SQL :
GRANT SELECT ON *.* TO 'ro'@'localhost' IDENTIFIED BY 'ro';
FLUSH PRIVILEGES;


On redémarre l'agent et tout rentre dans l'ordre :

Copier vers le presse-papierCode BASH :
systemctl restart zabbix-agent


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 :
Copier vers le presse-papierCode BASH :
cp -p /usr/sbin/fping /usr/sbin/fping.old
chown root:zabbix /usr/sbin/fping
chmod 4710 /usr/sbin/fping


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 : /etc/zabbix/zabbix_agentd.conf

Voici un exemple ici avec 3 valeurs personnalisées qui remontent les températures des disques et des CPU :
Copier vers le presse-papierCode 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: //'


De manière générale, la ligne doit être composée ainsi :
Copier vers le presse-papierCode BASH :
UserParameter=cle,commande

Il suffit une fois fait de relancer le service de l'agent :
Copier vers le presse-papierCode 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 :

zabbix_graphe_userparameter