/ Zabbix

Compilation Zabbix 3

Hello à vous,

On se retrouve aujourd'hui pour une petite compilation propre de Zabbix 3. (Vous préférez Docker ? Pas moi.)

Donc, comme d'habitude j'utilise une machine sous Debian 8, et en l'occurence Zabbix tient sur des VPS minimaux (1 vCore, 1 ou 2 Go de ram, et 1 ipv4 car c'est mieux™).

À l'heure où j'écris ces lignes, Zabbix 3.0.0-alpha6 vient de sortir, mais à l'heure où vous les lisez ce n'est peut-être plus le cas. C'est d'ailleurs pour ça qu'on compile à la main : pour que notre barbe pousse, et qu'on puisse tester en avant première ce petit bijou de monitoring.

Préparatifs

On se rend sur La page sacrée et on copie le lien de Sources qui nous intéresse. En alpha c'est assez simple, il n'y en a qu'un (tout en bas), sinon tout devrait se trouver dans Zabbix Sources.

On se place dans un dossier poubelle, dans mon cas ce sera /root/Zabbix.

On va installer Zabbix Server+Agent avec le support MySQL. On commence donc par installer les librairies et outils requis:

$ apt install build-essential libxml2-dev libssh2-1-dev libcurl4-openssl-dev libmysqlclient-dev -y

Ensuite, on télécharge le code de Zabbix, avec le lien que vous avez trouvé, et on décompresse l'archive .tar.gz.

$ wget -O zabbix-3.0.0alpha6.tar.gz "http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Development/3.0.0alpha6/zabbix-3.0.0alpha6.tar.gz/download"
$ tar xzf zabbix-3.0.0alpha6.tar.gz
$ cd zabbix-3.0.0alpha6/

Nous voilà au cœur du projet. Essayez de pas tout casser.

Configuration

L'étape la plus importante dans la compilation d'un projet, c'est la configuration.
C'est à cette étape que vous bridez/améliorez le projet.
Pour ma part, je veux le serveur, l'agent, le support MySQL, le support ipv6, le support ssh2, et je veux xml2 et curl. Traduit en ligne de commande, ça donne ça :

$ ./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-ssh2 --with-libcurl --with-libxml2
...
Configuration:

  Detected OS:           linux-gnu
  Install path:          /usr/local
  Compilation arch:      linux

  Compiler:              gcc
  Compiler flags:        -g -O2  -I/usr/include/mysql -DBIG_JOINS=1  -fno-strict-aliasing    -g -DNDEBUG     -I/usr/include/libxml2   -I/usr/include

  Enable server:         yes
  Server details:
    With database:         MySQL
    WEB Monitoring:        cURL
    Native Jabber:         no
    SNMP:                  no
    IPMI:                  no
    SSH:                   yes
    TLS:                   no
    ODBC:                  no
    Linker flags:          -rdynamic      -L/usr/lib/x86_64-linux-gnu        -L/usr/lib     -L/usr/lib/x86_64-linux-gnu
    Libraries:             -lm -ldl  -lresolv    -lmysqlclient      -lxml2    -lssh2     -lcurl

  Enable proxy:          no

  Enable agent:          yes
  Agent details:
    TLS:                   no
    Linker flags:          -rdynamic       -L/usr/lib/x86_64-linux-gnu
    Libraries:             -lm -ldl  -lresolv      -lcurl

  Enable Java gateway:   no

  LDAP support:          no
  IPv6 support:          yes

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

Hourra ! Le petit résumé nous confirme que nous avons les options que nous désirons.

$ make install
...
make[1]: Leaving directory '/root/Zabbix/zabbix-3.0.0alpha6'

Rien d'intéressant, je l'espère (sinon c'est que vous avez des erreurs)

Et hop, nous avons un Zabbix3 tout propre installé dans /usr/local/.

Ainsi, la configuration du serveur se trouve dans /usr/local/etc/zabbix_server.conf, et c'est là qu'il faudra indiquer les identifiants MySQL (options DBUser et celles qui suivent).

Installation avec MySQL

Par défaut, Debian8 vient sans serveur MySQL. Il faut donc en installer un:

$ apt install mysql-server

On s'infiltre dans notre base mysql et on créé une base Zabbix, un utilisateur Zabbix.

$ mysql -p
Enter password: 123456
Welcome to the MySQL monitor.  Commands end with ; or \g.
mysql> CREATE DATABASE zabbix;
Query OK, 1 row affected (0.00 sec)

mysql> CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'un_mot_de_passe_F0RT';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT SELECT, INSERT, DELETE, ALTER, CREATE, INDEX, DROP, UPDATE ON zabbix.* TO 'zabbix'@'localhost';
Query OK, 0 rows affected (0.00 sec)

On importe les fichiers utiles à Zabbix (qui sont dans /root/Zabbix/zabbix3.0.0-alpha6/database/mysql/):

$ cd /root/Zabbix/zabbix3.0.0-alpha6/database/mysql/
$ mysql -uzabbix -p zabbix < schema.sql
$ mysql -uzabbix -p zabbix < images.sql
$ mysql -uzabbix -p zabbix < data.sql

Il va vous demander trois fois le mot de passe Zabbix.

Installation du frontend PHP

Et oui, la force de Zabbix 3 réside dans son frontend. Il est juste ma-gni-fique.

Petite image de Zabbix

Bon, il nous faut principalement php-fpm, php-mysql (J'utilise Dotdeb, c'est la vie.)

On ajoute ces lignes dans /etc/apt/sources.list.d/dotdeb.list:

deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all

Puis on met à jour les repo' :

$ wget https://www.dotdeb.org/dotdeb.gpg
$ apt-key add dotdeb.gpg && rm dotdeb.gpg
$ apt update

Et on peut installer PHP !

$ apt install php7.0-fpm php7.0-gd php7.0-mysql

De retour dans notre dossier de travail, le fameux /root/Zabbix/zabbix3.0.0-alpha6/, on copie le contenu de frontends/php dans /var/www/zabbix/. (Le . à la fin de php/ permet de copier le contenu du dossier au lieu d'avoir un dossier /var/www/zabbix/php/)

$ mkdir -p /var/www/zabbix
$ cp -R frontends/php/. /var/www/zabbix/
$ chown -R www-data: /var/www/zabbix/

On configure php-fpm en créant une Pool Zabbix:

$ nano /etc/php/7.0/fpm/pool.d/zabbix.conf

On colle ce contenu:

[zabbix]
user = www-data
group = www-data
listen = /run/php/php7.0-zabbix.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 3

php_admin_value[memory_limit] = 1024M
php_admin_value[post_max_size] = 16M
php_admin_value[max_execution_time] = 300
php_admin_value[max_input_time] = 300
php_value[always_populate_raw_post_data]=-1
php_admin_value[date.timezone] = 'Europe/Paris'
php_value[post_max_size] = 33554432
php_value[upload_max_filesize] = 31457280
php_flag[file_uploads] = 1
php_value[max_file_uploads] = 20

On rajoute dans notre configuration Caddy:

zabbix.votre_ndd.fr {
        root /var/www/zabbix/
        fastcgi / /run/php/php7.0-zabbix.sock php
}

Et si ce n'est pas déjà fait, on ajoute Caddy au groupe www-data (sans quoi il n'aura pas accès au socket php-fpm): usermod -a -G www-data caddy

Si vous n'utilisez pas Caddy, c'est tant pis pour vous. C'est tellement plus simple de donner cette configuration là ! (et ce n'est pas le principal, ici ;D)

La suite de l'installation se fait en ligne, sur https://zabbix.votre_ndd.fr, mais je vous fais confiance. ;-)

Premier lancement

$ zabbix_server
zabbix_server [11779]: user zabbix does not exist
zabbix_server [11779]: cannot run as root!

Oops, on a oublié une étape. Il faut créer l'utilisateur Zabbix ! (-r précise que c'est un groupe/user système)

$ groupadd -r zabbix
$ useradd -r -g zabbix zabbix

Second lancement

Cette fois, c'est la bonne !

$ zabbix_server

Aucune sortie, tout est OK !
On peut surveiller les logs avec tail (si vous n'avez pas changé la configuration, c'est dans /tmp).

$ tail -f /tmp/zabbix_server.log

On lance aussi l'agent sur ce serveur: (n'oubliez pas le d)

$ zabbix_agentd

Et hop, de retour sur le frontend, vous pouvez gérer les hôtes, en ajouter ...

BONUS: Pour information, l'agent Zabbix 2 est compatible avec la version 3 du serveur. \o/

BONUS2: Pour mettre à jour de Zabbix3.0.0-alpha5 à alpha6, il faut lancer les commandes principales de ce tutoriel, à savoir:

# Etape 1
$ wget ...
$ tar xzf ...
$ cd ...

# Compilation
$ ./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-ssh2 --with-libcurl --with-libxml2
$ make install

# Restart
$ pkill -9 zabbix_agentd && zabbix_agentd
$ pkill -9 zabbix_server && zabbix_server

# Mise à jour du panel
$ cp -R frontends/php/. /var/www/zabbix/

La configuration du panel est même conservée ! :-)

(Vous pouvez confirmer que vous êtes en Alpha6 en regardant le haut du site : la barre est désormais blanche avec le logo à gauche, alors qu'avant la barre était bleue sans logo):

Avant:

Après:

PunKeel

PunKeel

INTP, Hacker, Développeur, Défenseur Open-Source, fan de Ghibli. Fan de nouvelles technologies, y compris systemd, mais allergique à Docker.

Read More