Installation

De Wiki de Jordan LE NUFF
< Outillage‎ | Zabbix
Révision datée du 9 décembre 2019 à 15:16 par Jordan (discussion | contributions) (→‎Déploiement)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à la recherche

Présentation

Cette section a pour objet de présenter l'installation de l'outil Zabbix.

Prérequis

Physique

La machine virtuelle myserver sur laquelle sera installé Zabbix est un serveur CentOs 7 dont les caractéristiques sont les suivantes :

  • CPU
    • 4 vCPU
  • RAM
    • 4 Go

Logiciel

  • BDD
    • MySQL 5.7.26
  • WebServer
    • Apache 2.4.39
  • PHP
    • 5.6.40
    • 7.3.4
  • Extension PHP
    • apcu, bz2, calendar, Core, ctype, curl, date, dom, fileinfo, filter, gd, hash, iconv, intl, json, ldap, libxml, mbstring, mysqli, mysqlnd, oci8, openssl, pcre, PDO, pdo_mysql, PDO_OCI, PDO_ODBC, pdo_sqlite, Phar, posix, Reflection, session, SimpleXML, soap, SPL, sqlite3, standard, tokenizer, xml, xmlreader, xmlwriter, zip et zlib

Au regard des prérequis listés sur [la documentation officielle de Zabbix 4.2], sachant que le nombre de serveurs surveillés est inférieur à 500, il manque les prérequis suivants :

  • Extension PHP
    • gd
      • l'extension n'a pas été compilée avec l'option --with-freetype-dir
    • bcmath
    • sockets
    • gettext

Re-compiler PHP en ajustant les options selon les prérequis ci-dessus.

Une fois PHP recompilé, vérifier que les prérequis sont respectés. Par exemple, pour le support freetype :

php7 -i|grep -i configure

Exemple de retour concluant :

Configure Command =>  './configure'  '--prefix=/local/php/php7' '--enable-fpm' '--with-fpm-user=php-fpm' '--with-fpm-group=php-fpm' '--with-fpm-systemd' '--with-openssl' '--with-kerberos' '--with-pcre-regex' '--with-zlib' '--with-bz2' '--enable-calendar' '--with-curl' '--with-gd' '--with-jpeg-dir' '--with-png-dir' '--with-freetype-dir' '--with-ldap=/usr/include' '--enable-mbstring' '--with-mysqli' '--with-mysql-sock=/local/mysql/current/mysql.sock' '--with-oci8=instantclient,/usr/lib/oracle/18.5/client64/lib' '--with-pdo-mysql' '--with-pdo-oci=instantclient,/usr/lib/oracle/18.5/client64/lib,18.5' '--enable-soap' '--enable-zip' '--enable-mysqlnd' '--enable-intl' '--with-pdo-odbc=unixODBC,/usr' '--enable-bcmath' '--enable-sockets' '--with-gettext'

Pour les extensions bcmath, sockets et gettext :

php7 -m|grep -E "bcmath|sockets|gettext"

Exemple de retour concluant :

bcmath
gettext
sockets

Système

Les paquets suivants sont nécessaires :

  • Obligatoires
    • libpcre
    • libevent
    • libevent-devel
    • libpthread
    • zlib
    • zlib-devl
  • Optionnels
    • OpenIPMI
    • OpenIPMI-devel
    • libssh2
    • libssh2-devel
    • fping
    • libcurl
    • libcurl-devel
    • libiksemel
    • libxml2
    • libxml2-devel
    • net-snmp
    • net-snmp-devel

Pour vérifier la présence des paquets obligatoires :

rpm -qa|grep -E "pcre|libevent|zlib" && ll /usr/lib64/libpthread.so

Exemple de retour :

pcre-8.32-17.el7.x86_64
zlib-devel-1.2.7-18.el7.x86_64
zlib-1.2.7-18.el7.x86_64
pcre-devel-8.32-17.el7.x86_64
libevent-2.0.21-4.el7.x86_64
-rw-r--r--. 1 root root 222  9 avril 18:39 /usr/lib64/libpthread.so

Pour vérifier la présence des paquets optionnels :

rpm -qa|grep -E "OpenIPMI|libssh2|fping|libcurl|libiksemel|libxml2|net-snmp"

Exemple de retour :

OpenIPMI-libs-2.0.23-2.el7.x86_64
libcurl-7.29.0-51.el7.x86_64
libcurl-devel-7.29.0-51.el7.x86_64
OpenIPMI-modalias-2.0.23-2.el7.x86_64
libssh2-1.4.3-12.el7_6.2.x86_64
libxml2-devel-2.9.1-6.el7_2.3.x86_64
net-snmp-libs-5.7.2-37.el7.x86_64
libxml2-2.9.1-6.el7_2.3.x86_64
fping-3.10-4.el7.x86_64
OpenIPMI-2.0.23-2.el7.x86_64
libxml2-python-2.9.1-6.el7_2.3.x86_64

Si des paquets sont manquants, les installer.

Le paquet libiksemel n'est pas nécessaire dans la mesure où il n'y a pas de messagerie instantanée à surveiller sur les serveurs qui seront supervisés par Zabbix.

Base de données

Le calcul de l'espace disque nécessaire à la base de données dépend directement du nombre d'éléments à superviser, entre autres. Pour avoir une idée approximative de l'espace disque nécessaire, s'aider de la documentation : http://www.zabbix.com/documentation/4.2/manual/installation/requirements#database_size.

En l'occurrence, le déploiement, à ce jour, de Zabbix, étant à l'état de POC, il ne sera pas donné d'espace disque supplémentaire aux 3 Go déjà disponible. Une surveillance particulière de l'évolution de la taille de la base de données devra donc avoir lieu, afin d'allouer, en cas de saturation, plus d'espace disque si nécessaire.

Déploiement

Base de données

Se connecter à la base de données MySQL avec l'utilisateur root :

mysql -uroot -p

Renseigner le mot de passe comme demandé :

Enter password:

Le prompt suivant s'affiche confirmant la bonne connexion à la BDD :

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1981
Server version: 5.7.26 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Créer la base de données Zabbix :

create database zabbix_db character set utf8 collate utf8_bin;

Exemple de retour sans erreur :

 Query OK, 1 row affected (0,00 sec)

Créer l'utilisateur Zabbix, lui donner tous les droits sur la base zabbix_db et quitter :

grant all privileges on zabbix_db.* to zabbix_user@localhost identified by 'xxxxxxxxxxxxxxxx';
quit;

PHP

Créer le fichier de configuration /local/php/php7/etc/php-fpm.d/zabbix.conf du pool PHP pour Zabbix et y insérer le contenu suivant :

[zabbix]
user = php-fpm
group = php-fpm

; Socket Unix dédié à Zabbix
listen = /local/php/sockets/php7_$pool.sock

; Donner à Apache (www) les droits d'accès au socket
listen.owner = www
listen.group = www

; Définition du chemin d'accès des logs
access.log = /data/logs/$pool/$pool_php7.access.log
slowlog = /data/logs/$pool/$pool_php7.log.slow
php_admin_value[error_log] = /data/logs/$pool/$pool_php7.log
php_admin_flag[log_errors] = on
; https://www.php.net/manual/fr/errorfunc.constants.php
php_admin_value[error_reporting] = E_NOTICE

; Tuning du pool php-fpm
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.status_path = /status
ping.path = /ping

Redémarrer PHP pour prise en compte des modifications :

systemctl restart php7-fpm.service

Apache

Editer le fichier de configuration /local/www/current/conf/sites/01_vmexploit02.conf et y insérer le contenu suivant :

# Configuration Zabbix
Alias /zab /data/www/zabbix/current
<Directory "/data/www/zabbix/current">
		Options FollowSymLinks
		DirectoryIndex index.php
		AllowOverride All
		Require all granted
		<FilesMatch \.php$>
				SetHandler "proxy:unix:/local/php/sockets/php7_zabbix.sock|fcgi://localhost/"
		</FilesMatch>
</Directory>
# Fin de configuration Zabbix

Recharger la configuration Apache pour prise en compte :

httpd -k graceful

Zabbix

Par compilation

Téléchargement des sources

Se rendre sur la page officielle de téléchargement Zabbix, récupérer le lien de téléchargement et télécharger le paquet sur le serveur :

wget -O ~/downloads/zabbix-4.4.0.tar.gz https://freefr.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/4.4.0/zabbix-4.4.0.tar.gz

Décompresser le fichier dans le dossier /local/builds :

tar -xzf ~/downloads/zabbix-4.4.0.tar.gz -C /local/builds/

Se rendre dans le dossier des sources et commencer la configuration de la compilation :

cd /local/builds/zabbix-4.4.0
Création utilisateur et groupe

Pour créer l'utilisateur et le groupe zabbix, lancer les commandes suivantes :

groupadd --system zabbix
useradd --system -g zabbix -d /home/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix

Créer le répertoire home de l'utilisateur zabbix :

mkdir -m u=rwx,g=,o= -p /home/zabbix
chown zabbix:zabbix /home/zabbix
Configuration de la compilation

Retourner dans le dossier de compilation :

cd /local/builds/zabbix-4.4.0

Créer le dossier dans lequel sera installé Zabbix :

mkdir -p /local/zabbix/zabbix-4.4.0

Créer le lien symbolique current :

ln -s /local/zabbix/zabbix-4.4.0 /local/zabbix/current

Lancer la configuration avec les options suivantes :

./configure \
--prefix=/local/zabbix/current \
--enable-server \
--enable-agent \
--enable-java \
--with-mysql \
--with-libxml2 \
--with-net-snmp \
--with-ssh2 \
--with-openipmi \
--with-zlib \
--with-libpthread \
--with-libevent \
--with-openssl \
--with-ldap \
--with-libcurl \
--with-iconv

Exemple de retour sans erreur :

***********************************************************
*            Now run 'make install'                       *
*                                                         *
*            Thank you for using Zabbix!                  *
*              <http://www.zabbix.com>                    *
***********************************************************
Compilation

Lancer la compilation et l'installation avec :

make install

Exemple de retour :

...
make[2]: Rien à faire pour « install-exec-am ».
make[2]: Rien à faire pour « install-data-am ».
make[2] : on quitte le répertoire « /local/builds/zabbix-4.4.0 »
make[1] : on quitte le répertoire « /local/builds/zabbix-4.4.0 »

Donner les droits à l'utilisateur Zabbix pour l'accès aux exécutables Zabbix :

chown -R zabbix:zabbix /local/zabbix
Configuration serveur

Il faut s'assurer que l'option --enable-server a été activée lors de la configuration de la compilation. Si ce n'est pas le cas, relancer la configuration de la compilation puis la compilation.

Editer ensuite le fichier de configuration /local/zabbix/current/etc/zabbix_server.conf et modifier les valeurs suivantes :

SourceIP=172.19.0.71
LogFile=/data/logs/zabbix/zabbix_server.log
DBName=zabbix_db
DBUser=zabbix_user
DBPassword=xxxxxxxxxxx
DBSocket=/local/mysql/current/mysql.sock

Créer le fichier de configuration /usr/lib/systemd/system/zabbix-server.service du service du serveur Zabbix et y insérer le contenu suivant :

[Unit]
Description=Zabbix Server
After=syslog.target network.target

[Service]
Type=oneshot
ExecStart=/local/zabbix/current/sbin/zabbix_server
ExecReload=/local/zabbix/current/sbin/zabbix_server -R config_cache_reload
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Recharger le démon pour prise en compte des modifications :

systemctl daemon-reload

Se rendre dans le dossier /local/zabbix/current/database/mysql :

cd /local/zabbix/current/database/mysql

Lancer l'importation des données Zabbix dans la base de données :

mysql -uzabbix_user -p zabbix_db < schema.sql
mysql -uzabbix_user -p zabbix_db < images.sql
mysql -uzabbix_user -p zabbix_db < data.sql
Configuration agent

Il faut s'assurer que l'option --enable-agent a été activée lors de la configuration de la compilation. Si ce n'est pas le cas, relancer la configuration de la compilation puis la compilation.

Editer ensuite le fichier de configuration /local/zabbix/current/etc/zabbix_agentd.conf et modifier les valeurs suivantes :

LogFile=/data/logs/zabbix/zabbix_agentd.log
Server=127.0.0.1
ServerActive=127.0.0.1
Hostname=Zabbix server vmexploit02

Créer le fichier de configuration /usr/lib/systemd/system/zabbix-agent.service du service de l'agent Zabbix et y insérer le contenu suivant :

[Unit]
Description=Zabbix Monitor Agent
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/local/zabbix/current/sbin/zabbix_agentd -c /local/zabbix/current/etc/zabbix_agentd.conf

[Install]
WantedBy=multi-user.target

Recharger le démon pour prise en compte des modifications :

systemctl daemon-reload
Configuration interface utilisateur

Créer le dossier qui hébergera l'interface utilisateur :

mkdir -p /data/www/zabbix/zabbix-4.4.0
ln -s /data/www/zabbix/zabbix-4.4.0 /data/www/zabbix/current

Déployer les fichiers de l'interface utilisateur depuis le dossier de compilation :

cp -a /local/builds/zabbix-4.2.4/frontends/php/* /data/www/zabbix/current/

Donner les droits à l'utilisateur web

chown -R php-fpm:www /data/www/zabbix/

Pour la configuration des fichiers de logs, lancer les commandes suivantes :

mkdir /data/logs/zabbix
chown -R php-fpm:www /data/logs/zabbix
Configuration passerelle Java

L'installation de la passerelle Java n'est requise que dans le cadre de surveillance d'applications Java JMX. La passerelle Java est légère et ne nécessite pas de base de données.

Il faut s'assurer que l'option --enable-java a été activée lors de la configuration de la compilation. Si ce n'est pas le cas, relancer la configuration de la compilation puis la compilation.

Editer ensuite le fichier de configuration /local/zabbix/current/etc/zabbix_server.conf et modifier les valeurs suivantes :

JavaGateway=127.0.0.1
JavaGatewayPort=10052
...
StartJavaPollers=5

Créer le fichier de configuration /usr/lib/systemd/system/zabbix-java-gateway.service du service de la passerelle Java de Zabbix et y insérer le contenu suivant :

[Unit]
Description=Zabbix Java Gateway
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/local/zabbix/current/sbin/zabbix_java_gateway
User=zabbix
Group=zabbix

[Install]
WantedBy=multi-user.target

Recharger le démon pour prise en compte des modifications :

systemctl daemon-reload

Par gestionnaire de paquets

Ajouter le dépôt Zabbix avec la commande suivante :

rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpm
Configuration serveur

Installer le serveur Zabbix avec la commande :

yum install zabbix-server-mysql

Editer ensuite le fichier de configuration /etc/zabbix/zabbix_server.conf et modifier les valeurs suivantes :

SourceIP=172.19.0.71
LogFile=/data/logs/zabbix/zabbix_server.log
DBName=zabbix_db
DBUser=zabbix_user
DBPassword=xxxxxxxxxxx
DBSocket=/local/mysql/current/mysql.sock

Importer les données en base avec la commande :

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix_user -p zabbix_db
Configuration agent

Lancer l'installation de l'agent via la commande :

yum install zabbix-agent

Editer ensuite le fichier de configuration /etc/zabbix/zabbix_agentd.conf et modifier les valeurs suivantes :

LogFile=/data/logs/zabbix/zabbix_agentd.log
Server=127.0.0.1
ServerActive=127.0.0.1
Hostname=Zabbix server vmexploit02
Configuration interface utilisateur

Créer le dossier qui hébergera l'interface utilisateur :

mkdir -p /data/www/zabbix/zabbix-4.4.0
ln -s /data/www/zabbix/zabbix-4.4.0 /data/www/zabbix/current

Se rendre sur la page officielle de téléchargement Zabbix, récupérer le lien de téléchargement et télécharger le paquet sur le serveur :

wget -O ~/downloads/zabbix-4.4.0.tar.gz https://freefr.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/4.4.0/zabbix-4.4.0.tar.gz

Décompresser le fichier dans le dossier /tmp :

tar -xzf ~/downloads/zabbix-4.4.0.tar.gz -C /tmp/

Déployer les fichiers de l'interface utilisateur depuis le dossier de compilation :

cp -a /tmp/zabbix-4.4.0/frontends/php/* /data/www/zabbix/current/

Supprimer le dossier dans /tmp :

rm -rf /tmp/zabbix-4.4.0

Donner les droits à l'utilisateur Zabbix

chown -R php-fpm:www /data/www/zabbix/

Pour la configuration des fichiers de logs, lancer les commandes suivantes :

mkdir /data/logs/zabbix
chown -R php-fpm:www /data/logs/zabbix
Configuration passerelle Java

L'installation de la passerelle Java n'est requise que dans le cadre de surveillance d'applications Java JMX. La passerelle Java est légère et ne nécessite pas de base de données.

Lancer l'installation de l'agent via la commande :

yum install zabbix-java-gateway

Editer ensuite le fichier de configuration /etc/zabbix/zabbix_server.conf et modifier les valeurs suivantes :

JavaGateway=127.0.0.1
JavaGatewayPort=10052
...
StartJavaPollers=5

Pare-feu

Pour autoriser le/les agent(s) Zabbix à communiquer sur l'adresse IP sur laquelle tourne le serveur Zabbix, lancer les commandes suivantes :

firewall-cmd --add-port=10051/tcp
firewall-cmd --add-port=10051/tcp --permanent