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 sudo y 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:

  1. Welcome: elige el idioma por defecto y pulsa Next step.
  2. 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.conf seguido de sudo systemctl restart php8.3-fpm.
  3. Configure DB connection: deja Database type en MySQL, Database host en localhost y Database port en 0 (valor por defecto). Escribe zabbix como nombre de base de datos y usuario, y your_db_password como contraseña. Deja Database TLS encryption desactivado, ya que la conexión es local.
  4. Settings: define un Zabbix server name (aparece en el título de la página) y tu Default time zone.
  5. 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
  • Server indica las IP que pueden consultar al agente en modo pasivo (el servidor se conecta al agente en el puerto 10050).
  • ServerActive es el destino al que el agente envía datos en modo activo (el agente se conecta al servidor en el puerto 10051).
  • Hostname debe 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:

  1. Host name: web-01, idéntico a Hostname en la configuración del agente.
  2. Templates: pulsa Select, abre el grupo Templates/Operating systems y elige Linux by Zabbix agent.
  3. Host groups: selecciona Linux servers.
  4. Interfaces: pulsa Add > Agent e introduce la IP del host y el puerto 10050.
  5. 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:

  1. Ve a Alerts > Media types y abre Email.
  2. Rellena SMTP server, SMTP server port (normalmente 587), SMTP helo (tu dominio) y SMTP email (la dirección remitente).
  3. Pon Connection security en STARTTLS y Authentication en Username and password, e introduce tus credenciales SMTP.
  4. 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:

  1. Ve a Users > Users y abre Admin (o tu propio usuario).
  2. 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:

  1. Ve a Alerts > Actions > Trigger actions.
  2. Abre la acción incluida Report problems to Zabbix administrators, que envía al grupo de usuarios Zabbix administrators al que pertenece Admin.
  3. 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.