Zabbix es una plataforma de monitorización de código abierto que recoge métricas de agentes, dispositivos SNMP y comprobaciones HTTP, las guarda en una base de datos SQL y abre problemas cuando se cumple un disparador (trigger). En este tutorial instalarás el servidor Zabbix 7.0 LTS, su interfaz web sobre Nginx y una base de datos MySQL en Ubuntu 24.04, protegerás la interfaz con HTTPS, añadirás servidores Linux con Zabbix agent 2 y la plantilla Linux incluida, crearás un ítem y un disparador propios y recibirás los problemas por correo electrónico.
Requisitos previos
Para seguir esta guía necesitas:
- Un servidor con Ubuntu 24.04 LTS para el servidor Zabbix, por ejemplo un VPS de CubePath, con al menos 2 vCPU, 4 GB de RAM y 40 GB de disco. Es suficiente para unos cientos de hosts monitorizados.
- Un usuario no root con privilegios
sudoy UFW activado con SSH permitido. - Un dominio con un registro A que apunte al servidor, al que llamaremos
your_domain. - Uno o más hosts con Ubuntu 24.04 o Debian 12 que quieras monitorizar.
- Una cuenta SMTP para enviar los correos de alerta.
Esta guía usa Zabbix 7.0, la versión de soporte extendido (LTS) actual, con soporte completo hasta 2027 y correcciones de seguridad hasta 2029.
Paso 1: Añadir el repositorio de Zabbix
Los paquetes de Zabbix de Ubuntu son anteriores a la 7.0, así que usarás el repositorio oficial de Zabbix. Zabbix publica un pequeño paquete que instala la definición del repositorio y su clave de firma:
cd /tmp
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo apt update
Comprueba que apt ve ahora los paquetes de Zabbix 7.0:
apt-cache policy zabbix-server-mysql
zabbix-server-mysql:
Installed: (none)
Candidate: 1:7.0.31-1+ubuntu24.04
Version table:
1:7.0.31-1+ubuntu24.04 500
500 https://repo.zabbix.com/zabbix/7.0/ubuntu noble/main amd64 Packages
La versión de parche será distinta; lo importante es que el candidato sea 7.0.x y venga de repo.zabbix.com.
Paso 2: Instalar el servidor, la interfaz web y el agente
Instala el servidor con soporte para MySQL, la interfaz PHP, su configuración para Nginx, los scripts del esquema de base de datos y Zabbix agent 2 (para que el propio servidor Zabbix se monitorice), junto con el servidor MySQL:
sudo apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2 mysql-server
Esto instala también Nginx y PHP-FPM 8.3 como dependencias. Comprueba que MySQL está en marcha:
systemctl status mysql --no-pager
● mysql.service - MySQL Community Server
Loaded: loaded (/usr/lib/systemd/system/mysql.service; enabled; preset: enabled)
Active: active (running) since Thu 2026-09-25 12:02:31 UTC; 1min ago
Paso 3: Crear la base de datos
En Ubuntu, la cuenta root de MySQL se autentica por el socket Unix, así que sudo mysql te da acceso sin contraseña. Abre una consola de MySQL:
sudo mysql
Crea la base de datos con la intercalación utf8mb4_bin que exige Zabbix y un usuario dedicado, y permite temporalmente que la importación del esquema cree funciones almacenadas. Sustituye your_db_password por una contraseña robusta:
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'your_db_password';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
SET GLOBAL log_bin_trust_function_creators = 1;
EXIT;
Importa el esquema y los datos iniciales. El comando pide la contraseña del usuario zabbix y tarda uno o dos minutos sin mostrar nada:
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
Terminada la importación, vuelve a desactivar el ajuste de funciones almacenadas:
sudo mysql -e "SET GLOBAL log_bin_trust_function_creators = 0;"
Verifica la importación contando las tablas:
sudo mysql -e "SELECT COUNT(*) AS tables FROM information_schema.tables WHERE table_schema = 'zabbix';"
+--------+
| tables |
+--------+
| 203 |
+--------+
El número exacto depende de la versión de parche; debe rondar las 200, no 0.
Paso 4: Configurar e iniciar el servidor Zabbix
Indica al servidor Zabbix cómo conectarse a la base de datos. Abre su archivo de configuración:
sudo nano /etc/zabbix/zabbix_server.conf
Busca la línea comentada # DBPassword= y añade la contraseña debajo. DBName=zabbix y DBUser=zabbix ya vienen definidos por defecto:
DBPassword=your_db_password
El archivo contiene una contraseña, así que comprueba que no lo puede leer cualquier usuario:
ls -l /etc/zabbix/zabbix_server.conf
-rw-r----- 1 root zabbix 26614 Sep 25 12:05 /etc/zabbix/zabbix_server.conf
Arranca el servidor y el agente local, y actívalos en el arranque:
sudo systemctl enable --now zabbix-server zabbix-agent2
Revisa el log del servidor. Un arranque correcto muestra la comprobación de versión de la base de datos y los procesos iniciados, sin errores cannot connect:
sudo tail -n 20 /var/log/zabbix/zabbix_server.log
4213:20260925:120712.418 current database version (mandatory/optional): 07000000/07000000
4213:20260925:120712.418 required mandatory version: 07000000
4213:20260925:120712.520 server #0 started [main process]
...
Confirma que el servidor escucha en el puerto 10051, al que se conectan los agentes en modo activo:
sudo ss -ltnp | grep 10051
Paso 5: Configurar Nginx para la interfaz web
El paquete zabbix-nginx-conf instala un bloque server en /etc/zabbix/nginx.conf y lo enlaza en el directorio conf.d de Nginx, pero sus líneas listen y server_name están comentadas. Edítalo:
sudo nano /etc/zabbix/nginx.conf
Descomenta las dos primeras líneas del bloque server y déjalas así:
server {
listen 80;
server_name your_domain;
No cambies el resto del archivo. Como el sitio por defecto de Nginx en Ubuntu también escucha en el puerto 80, desactívalo para que las peticiones a your_domain lleguen a Zabbix:
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Reinicia Nginx y PHP-FPM para que carguen la configuración de Zabbix (el paquete de la interfaz incluye su propio pool de PHP-FPM con los ajustes de PHP necesarios):
sudo systemctl restart nginx php8.3-fpm
sudo systemctl enable nginx php8.3-fpm
Abre HTTP y HTTPS, y el puerto 10051 para los agentes que funcionen en modo activo:
sudo ufw allow 'Nginx Full'
sudo ufw allow 10051/tcp
Paso 6: Activar HTTPS
El formulario de inicio de sesión no debe viajar por HTTP sin cifrar. Instala Certbot y solicita un certificado de Let's Encrypt; el plugin de Nginx añade TLS al bloque server de Zabbix y redirige HTTP a HTTPS:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your_domain
Cuando Certbot muestre Successfully deployed certificate, comprueba la renovación automática:
sudo certbot renew --dry-run
Paso 7: Completar el asistente web
Abre https://your_domain en el navegador. El instalador de Zabbix te guía por varias pantallas:
- Welcome: elige el idioma por defecto y pulsa Next step.
- Check of pre-requisites: todas las líneas deben mostrar OK. Si alguna falla, casi siempre se arregla con un ajuste de PHP en
/etc/zabbix/php-fpm.confseguido desudo systemctl restart php8.3-fpm. - Configure DB connection: deja Database type en
MySQL, Database host enlocalhosty Database port en0(valor por defecto). Escribezabbixcomo nombre de base de datos y usuario, yyour_db_passwordcomo contraseña. Deja Database TLS encryption desactivado, ya que la conexión es local. - Settings: define un Zabbix server name (aparece en el título de la página) y tu Default time zone.
- Pre-installation summary: revisa los datos y pulsa Next step. El instalador escribe
/etc/zabbix/web/zabbix.conf.php.
Pulsa Finish e inicia sesión con las credenciales por defecto: usuario Admin, contraseña zabbix.
Cambia esa contraseña de inmediato: ve a User settings > Profile (el icono de usuario al final del menú izquierdo), pulsa Change password y define una contraseña robusta.
Ve a Reports > System information. Zabbix server is running debe indicar Yes, y el host Zabbix server aparece en Monitoring > Hosts con el icono de disponibilidad ZBX en verde al cabo de un minuto, gracias al agente local.
Paso 8: Instalar Zabbix agent 2 en un host monitorizado
Ejecuta estos comandos en cada servidor que quieras monitorizar. Añade el mismo repositorio de Zabbix e instala solo el agente:
cd /tmp
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo apt update
sudo apt install zabbix-agent2
En Debian 12, descarga el paquete para Debian: https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.0+debian12_all.deb.
Edita la configuración del agente:
sudo nano /etc/zabbix/zabbix_agent2.conf
Define estos tres parámetros, sustituyendo your_zabbix_server_ip por la IP del servidor Zabbix y web-01 por un nombre único para este host:
Server=your_zabbix_server_ip
ServerActive=your_zabbix_server_ip
Hostname=web-01
Serverindica las IP que pueden consultar al agente en modo pasivo (el servidor se conecta al agente en el puerto 10050).ServerActivees el destino al que el agente envía datos en modo activo (el agente se conecta al servidor en el puerto 10051).Hostnamedebe coincidir exactamente con el nombre del host que crees en la interfaz; si no, las comprobaciones activas se rechazan.
Permite que el servidor Zabbix llegue al agente, y reinicia y activa el servicio:
sudo ufw allow from your_zabbix_server_ip to any port 10050 proto tcp
sudo systemctl restart zabbix-agent2
sudo systemctl enable zabbix-agent2
Desde el servidor Zabbix, prueba la conexión con zabbix_get:
sudo apt install zabbix-get
zabbix_get -s web01_ip -k agent.ping
1
Un 1 significa que el servidor puede consultar al agente. Un tiempo de espera agotado indica que el cortafuegos bloquea el puerto 10050; un error que menciona restricciones de acceso significa que falta la IP del servidor en Server= del agente.
Paso 9: Añadir el host con la plantilla Linux
En la interfaz web, ve a Data collection > Hosts y pulsa Create host:
- Host name:
web-01, idéntico aHostnameen la configuración del agente. - Templates: pulsa Select, abre el grupo Templates/Operating systems y elige Linux by Zabbix agent.
- Host groups: selecciona
Linux servers. - Interfaces: pulsa Add > Agent e introduce la IP del host y el puerto
10050. - Pulsa Add.
La plantilla añade un centenar de ítems (CPU, memoria, sistemas de archivos e interfaces de red descubiertos automáticamente), disparadores como High CPU utilization y Filesystem space is critically low, y gráficas. Al cabo de un minuto el icono ZBX se pone en verde. Ve a Monitoring > Latest data, filtra por el host web-01 y deberías ver valores llegando.
Paso 10: Crear un ítem y un disparador propios
Las plantillas cubren lo básico; para todo lo demás puedes añadir tu propia métrica con un UserParameter, que asocia una clave de ítem a un comando de shell en el agente. Como ejemplo, monitorizarás el número de usuarios con sesión iniciada.
En el host monitorizado, comprueba que el agente incluye el directorio zabbix_agent2.d:
grep '^Include' /etc/zabbix/zabbix_agent2.conf
Include=/etc/zabbix/zabbix_agent2.d/*.conf
Include=./zabbix_agent2.d/plugins.d/*.conf
Si falta la primera línea, añádela al final del archivo. Después crea un archivo para tus parámetros:
sudo nano /etc/zabbix/zabbix_agent2.d/custom.conf
UserParameter=custom.users.logged_in,who | wc -l
Prueba la clave en local y reinicia el agente para que cargue el nuevo parámetro:
sudo zabbix_agent2 -t custom.users.logged_in
sudo systemctl restart zabbix-agent2
custom.users.logged_in [s|1]
En la interfaz web, ve a Data collection > Hosts, pulsa Items junto a web-01 y después Create item:
- Name:
Usuarios con sesión - Type:
Zabbix agent - Key:
custom.users.logged_in - Type of information:
Numeric (unsigned) - Update interval:
1m
Pulsa Add y usa Test en el formulario del ítem o Monitoring > Latest data para ver el valor.
Ahora crea un disparador sobre él. Desde el mismo host, abre Triggers > Create trigger:
- Name:
Demasiados usuarios con sesión en {HOST.NAME} - Severity:
Warning - Expression:
last(/web-01/custom.users.logged_in)>5
Pulsa Add. La expresión lee el último valor del ítem en el host web-01 y abre un problema cuando supera 5. Para reutilizar el ítem y el disparador en muchos hosts, créalos en una plantilla en lugar de en el host y vincula esa plantilla a cada servidor.
Paso 11: Enviar los problemas por correo electrónico
Las notificaciones necesitan tres cosas: un tipo de medio configurado, una dirección de medio en un usuario y una acción que decida qué problemas se envían.
Configura el tipo de medio de correo:
- Ve a Alerts > Media types y abre Email.
- Rellena SMTP server, SMTP server port (normalmente
587), SMTP helo (tu dominio) y SMTP email (la dirección remitente). - Pon Connection security en
STARTTLSy Authentication enUsername and password, e introduce tus credenciales SMTP. - Asegúrate de que Enabled está marcado, pulsa Update y usa Test en la lista de tipos de medio para enviar un mensaje de prueba.
Asigna a un usuario una dirección donde recibir las alertas:
- Ve a Users > Users y abre
Admin(o tu propio usuario). - En la pestaña Media pulsa Add, elige Email, escribe la dirección, deja en Use if severity las gravedades que te interesen y pulsa Add y después Update.
Activa una acción que envíe los problemas:
- Ve a Alerts > Actions > Trigger actions.
- Abre la acción incluida Report problems to Zabbix administrators, que envía al grupo de usuarios
Zabbix administratorsal que perteneceAdmin. - En la pestaña Action, marca Enabled y pulsa Update.
Para probar toda la cadena, detén el agente en el host monitorizado:
sudo systemctl stop zabbix-agent2
A los pocos minutos, Monitoring > Problems muestra Linux: Zabbix agent is not available para web-01 y llega un correo. Vuelve a arrancar el agente y recibirás el correo de recuperación:
sudo systemctl start zabbix-agent2
Solución de problemas
La interfaz muestra "Zabbix server is not running". Revisa sudo systemctl status zabbix-server y /var/log/zabbix/zabbix_server.log. La causa habitual es un DBPassword incorrecto en /etc/zabbix/zabbix_server.conf.
El icono ZBX del host está en rojo con "Get value from agent failed: cannot connect". El servidor no llega al puerto 10050 del host. Prueba con zabbix_get -s web01_ip -k agent.ping y revisa UFW en el host.
Las comprobaciones activas fallan con "host not found". El Hostname de zabbix_agent2.conf no coincide con el nombre del host en la interfaz. Distingue entre mayúsculas y minúsculas.
Los ítems aparecen como "Not supported". Pasa el ratón por el icono rojo en la lista de ítems para ver el motivo. En un UserParameter, ejecuta sudo zabbix_agent2 -t <clave> en el host; el comando se ejecuta como el usuario zabbix, así que no puede necesitar privilegios de root.
Conclusión
Has instalado Zabbix 7.0 LTS con MySQL y Nginx en Ubuntu 24.04, has protegido la interfaz con HTTPS, has añadido un host Linux con Zabbix agent 2 y la plantilla incluida, has ampliado la monitorización con un ítem y un disparador propios y has activado las notificaciones por correo. Como siguientes pasos, usa el descubrimiento de red o el autorregistro de agentes (Alerts > Actions > Autoregistration actions) para añadir hosts de forma automática, monitoriza switches y routers con las plantillas SNMP y ajusta la retención de datos en Administration > Housekeeping a medida que crezca la base de datos.
