Zabbix es un sistema de monitorización muy completo, nos permite tanto colectar estadísticas como configurar alarmas basadas en los datos recolectados, las alarmas pueden ser notificadas de diversas formas, email, jabber o a través de cualquier script abriendo así un sin fin de posibilidades.
Zabbix se compone de varios elementos:
- ZBX Server: Servidor central en el que se consultan estadísticas y se disparan alarmas.
- ZBX DB: Servidor de base de datos en el que se almacena la información recolectada por los zbx-agents.
- ZBX Agents: Agentes instalados en cada uno de los servidores que deseamos monitorizar.
- ZBX Proxy: Servidor intermedio al que envian los datos los agentes, de este modo zbx funciona mejor en una red con cortes, entornos limitados por FWs, etc
En este manual solo vamos a intalar el servidor de zabbix con la base de datos y el agente.
Comenzamos con la instalación de la base de datos:
dev-db/mysql latin1 -ssl
emerge --config =dev-db/mysql-5.6.26
/etc/init.d/mysql start
mysql_secure_installation
rc-update add mysql default
Ahora procedemos con el zabbix server:
net-analyzer/zabbix agent -curl frontend -ipv6 -java -ldap libxml2 mysql -odbc -openipmi -oracle -postgres -proxy server -snmp -sqlite -ssh -static -xmpp
Creamos la base de datos:
mysql> CREATE DATABASE zabbix DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
mysql> USE mysql;
mysql> GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@localhost IDENTIFIED by 'PASSWORD';
mysql> FLUSH PRIVILEGES;
mysql> USE zabbix;
Cargamos las tablas necesarias con su estructura:
mysql> SOURCE /usr/share/zabbix/database/mysql/schema.sql
mysql> SOURCE /usr/share/zabbix/database/mysql/data.sql
mysql> SOURCE /usr/share/zabbix/database/mysql/images.sql
Configuramos el vhost para utilizar fast-cgi:
cp /usr/bin/php-fpm /var/www/cgi-bin/zabbix/
chown -R zabbix:zabbix /var/www/cgi-bin/zabbix/
vi /etc/conf.d/apache2
APACHE2_OPTS="-D INFO -D SSL -D LANGUAGE -D FASTCGI"
<VirtualHost *:80>
ServerAdmin kr0m@alfaexploit.com
DocumentRoot /var/www/zabbix
ServerName zabbix.alfaexploit.com
ErrorLog /var/log/apache2/zabbix.alfaexploit.error_log
CustomLog /var/log/apache2/zabbix.alfaexploit.access_log combined
DirectoryIndex index.php index.htm index.html
ScriptAlias /local-bin /var/www/cgi-bin/zabbix
AddHandler application/x-httpd-php5 php
Action application/x-httpd-php5 /local-bin/php-fpm
FastCgiExternalServer /var/www/cgi-bin/zabbix/php-fpm -socket /var/run/php-fpm_zabbix.sock
<Directory "/var/www/cgi-bin/zabbix">
Options -Indexes ExecCGI
Order allow,deny
Allow from all
</Directory>
<Directory "/var/www/zabbix">
options -Indexes FollowSymLinks
AllowOverride All
order allow,deny
Allow from all
</Directory>
# Monitoring status:
<LocationMatch "/(ping|status)">
SetHandler php-fastcgi-virt
Action php-fastcgi-virt /local-bin/php-fpm virtual
</LocationMatch>
</VirtualHost>
rc-update add apache2 default
cd /var/www/
ln -s /usr/share/webapps/zabbix/2.2.5/htdocs/ zabbix
chown -R zabbix:zabbix /var/www/zabbix
chown -R zabbix:zabbix /usr/share/webapps/zabbix/2.2.5/htdocs/
Configuramos el pool de fast-cgi para el vhost de zabbix:
[zabbix]
user = zabbix
group = zabbix
listen = /var/run/php-fpm_zabbix.sock
listen.owner = apache
listen.group = apache
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
ping.response = pong
php_admin_value[post_max_size] = 16M
php_admin_value[max_execution_time] = 300
php_admin_value[max_input_time] = 300
php_admin_value[date.timezone] = Europe/Madrid
php_admin_value[always_populate_raw_post_data] = -1
php_admin_value[date.timezone] = Europe/Madrid
Damos de alta los servicios:
zabbix-agent 10050/tcp Zabbix Agent
zabbix-agent 10050/udp Zabbix Agent
zabbix-trapper 10051/tcp Zabbix Trapper
zabbix-trapper 10051/udp Zabbix Trapper
Configuramos los parámetros de conexión con la base de datos:
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=******
ListenIP=0.0.0.0
Arrancamos servicios:
/etc/init.d/zabbix-agentd start
rc-update add zabbix-server default
rc-update add zabbix-agentd default
Accedemos a la interfaz web donde aparecerá un instalador:
http://zabbix.alfaexploit.com
Asistente
Accedemos al zabbix y cambiamos el password y el tema(opcional):
Admin
zabbix
Profile -> Change password
Theme -> Dark Orange
Media -> Email
Configuramos los parámetros de email para que funcionen las notificaciones básicas:
Administration -> Media types -> Email
SMTP server
SMTP helo
SMTP email
Nos aseguramos de que monitorizamos el propio zbx server:
Configuration -> Hosts -> Zabbix server -> Status debe estar: Monitored
Esperamos unos segundos y deberían de salir gráficas de la cpu:
Monitoring -> Graphs
Si esperamos 30min descubrirá las interfaces de red y comenzará a pintar gráficas de tráfico
En los servidores a monitorizar compilamos zabbix con la use flag agent:
net-analyzer/zabbix agent -curl -frontend -ipv6 -java -ldap -libxml2 -mysql -odbc -openipmi -oracle -postgres -proxy -server -snmp -sqlite -ssh -static -xmpp
Como nota final algunas recomendaciones:
- MySQL: Es recomendable utilizar partitioning e ir eliminando datos viejos mediante crones, esto nos ayudará a no consumir el espacio en disco con datos obsoletos y obtendremos un mayor rendimiento ya que las tablas son mas pequeñas.
- ZBX-Proxy: Los proxys suelen ser equipos con escasos recursos ya que no los necesitan, en caso de crecer el número de servidores en una localización determinada es preferible montar un segundo proxy a aumentar los recursos del existente.