Serveur de monitoring Zabbix sur Nginx et FreeBSD

Rédigé par Jérôme / 23 février 2015 / Aucun commentaire

Zabbix est un logiciel de supervision complet qui unifie monitoring et métrologie. Le données peuvent être collectées via un Agent, SNMP, ou encore IPMI. Le soft est livré avec un certain nombre de templates pour les profils les plus courants, et les fonctionnalités avancées permettent répondre aux besoins plus complexes.
Fiable, très complet et relativement léger, il se pose en concurrent sérieux de Nagios (et ses plugins/dérivés). La prise en main, peut toute fois se révéler un peu difficile au début, mais on peut compter sur une documentation de référence très à jour.

Voici donc un tuto afin d'installer Zabbix/Nginx/MySQL sur FreeBSD

Installation de MySQL

# pkg install mysql55-server
# cp /usr/local/share/mysql/my-huge.cnf /usr/local/etc/my.cnf

Ajouter au fichier  /etc/rc.conf :
...
mysql_enable="YES"
mysql_dbdir="/usr/local/db/mysql"

Démarrage du service
# service mysql-server start

Création du mot de passe root de MySQL
# mysqladmin -u root password

Installation de Zabbix Agent

# pkg install zabbix22-agent

Ajouter au fichier  /etc/rc.conf :
...
zabbix_agentd_enable="YES"

Création des fichiers de configuration de l'agent :
# cd /usr/local/etc/zabbix22/
# mkdir /var/log/zabbix/ && chown zabbix:zabbix /var/log/zabbix/

Créer le fichier : /usr/local/etc/zabbix22/zabbix_agentd.conf :
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=1
EnableRemoteCommands=1
Server=127.0.0.1, monitoring.organisation.net
Include=/usr/local/etc/zabbix22/zabbix_agentd.conf.d/

Nous allons créer un script afin de monitorer la base MySQL. Il faudra penser à activer le template correspondant dans l'interface web.
Créer fichier : /usr/local/etc/zabbix22/zabbix_agentd.conf.d/userparameter_mysql.conf
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/usr/local/etc/zabbix22 /usr/local/bin/mysql -N | awk '{print $$2}'
UserParameter=mysql.size[*],echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema='$1'")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name='$2'");" | HOME=/usr/local/etc/zabbix22 /usr/local/bin/mysql -N
UserParameter=mysql.ping,HOME=/usr/local/etc/zabbix22 /usr/local/bin/mysqladmin ping | grep -c alive
UserParameter=mysql.version, /usr/local/bin/mysql -V
Création d'un user MySQL pour l'agent Zabbix :
# set MDP=MotDePasseAleatoire
# mysql -uroot -p -e "GRANT USAGE ON *.* TO 'zabbix_agent'@'localhost' IDENTIFIED BY '${MDP}' ; flush privileges"
# mysql -uzabbix_agent -p${MDP} -e "status"
# echo "[client]" > /usr/local/etc/zabbix22/.my.cnf
# echo "user=zabbix_agent" >> /usr/local/etc/zabbix22/.my.cnf
# echo "password=${MDP}" >> /usr/local/etc/zabbix22/.my.cnf
# chown zabbix:zabbix /usr/local/etc/zabbix22/.my.cnf
# chmod 600 /usr/local/etc/zabbix22/.my.cnf

Démarrage du service :
# service zabbix_agentd start

On vérifie bon démarrage depuis le log :
# cat /var/log/zabbix/zabbix_agentd.log

Installation de Zabbix Server

# pkg install zabbix22-server fping nmap

Création de la base mysql :
# mysql -uroot -p
mysql> create database zabbix character set utf8;
mysql> CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost' IDENTIFIED BY 'password';
mysql> quit
# cd /usr/local/share/zabbix22/server/database/mysql/
# mysql -uroot -p zabbix < schema.sql && mysql -uroot -p zabbix < images.sql && mysql -uroot -p zabbix < data.sql

Ajouter au /etc/rc.conf :
...
zabbix_server_enable="YES"

# cd /usr/local/etc/zabbix22/
# cp zabbix_server.conf.sample zabbix_server.conf
# chmod 660 zabbix_server.conf

Modifier /usr/local/etc/zabbix22/zabbix_server.conf :
LogFile=/var/log/zabbix/zabbix_server.log
...
LogFileSize=10
...
DBUser=zabbix
DBPassword=SuperMotDePasse
...
FpingLocation=/usr/local/sbin/fping
Fping6Location=/usr/local/sbin/fping6

Démarrage du service :
# service zabbix_server start

On vérifie que le log :
# cat /var/log/zabbix/zabbix_server.log

Installion de Zabbix Frontend


Enfin, installation de nginx, php et zabbix-frontend :
# pkg install nginx php5 zabbix22-frontend nmap
# chown -R www:www /usr/local/www/zabbix22

Ajout à /etc/rc.conf :
...
nginx_enable="YES"
php_fpm_enable="YES"

# cd /usr/local/etc
# cp php.ini-production php.ini && chmod 644 php.ini

Edition de /usr/local/etc/php.ini :
...
post_max_size = 16M
...
max_execution_time = 300
...
max_input_time = 300
...
date.timezone = Europe/Paris
...

Démarrage du service php-fpm :
# service php-fpm start

# cd /usr/local/etc/nginx/
# chmod 644 nginx.conf

Editer nginx.conf :
...
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';
...
gzip  on;
    server {
        listen       443;
        server_name  localhost;

        ssl                  on;
        ssl_certificate      ssl/wildcard.organisation.net.crt;
        ssl_certificate_key  ssl/wildcard.organisation.net.key;

        ssl_session_timeout  5m;

        ssl_protocols  SSLv2 SSLv3 TLSv1;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers   on;        location / {
        root   /usr/local/www/zabbix22;
        index  index.html index.htm index.php;
    }

...

        location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /usr/local/www/zabbix22$fastcgi_script_name;
        include        fastcgi_params;
    }
...
        location ~ /\.ht {
            deny  all;
        }
    }

# mkdir /usr/local/etc/nginx/ssl

Placer les fichiers certificat SSL dans /usr/local/etc/nginx/ssl (à défaut, créer un certificat pour l'occasion)

Et enfin démarrage du serveur web :
# service nginx start

Écrire un commentaire

Quelle est la cinquième lettre du mot rtvifn ? :

buffin.net

"Le cloud n'existe pas, vous utilisez juste l'ordinateur de quelqu'un d'autre."