instalar zabbix 7.0 lts en ubuntu 24.04
Guía para instalar Zabbix 7.0 LTS en Ubuntu 24.04. Incluye configuración de MariaDB, nginx y agent2. Solución a errores de esquema y archivos de nginx.
Qué vas a construir
Un VPS único con Ubuntu 24.04 que ejecuta el stack completo de Zabbix 7.0 LTS: el daemon zabbix-server para el muestreo y las alertas, una base de datos MariaDB/MySQL para almacenar cada métrica, un frontend en PHP servido por nginx y zabbix-agent2 para recolectar métricas del propio equipo. Una vez configurado, lo vinculas a un segundo servidor, aplicas una plantilla y recibes un correo electrónico en cuanto un disco se llena o un servicio falla.
Zabbix es más robusto que una herramienta de páginas de estado: es un sistema de series temporales real con plantillas, triggers, escalado y retención de historial. La mayoría de los errores ocurren en tres pasos que se suelen omitir: importar el esquema de la base de datos, configurar la contraseña de la base de datos que el servidor utiliza y descomentar dos líneas en la configuración de nginx. Si realizas estos pasos correctamente, el resto es sencillo. Si solo necesitas comprobaciones de estado (up/down) y una página de estado compartible, un monitor de estado ligero como Uptime Kuma lo hace en un solo contenedor; Zabbix es la opción adecuada cuando necesitas umbrales por métrica y escalado en múltiples hosts.
Usa la línea 7.0 LTS: su servidor, frontend, agent2 y esquema están versionados en conjunto, y recibirá parches de seguridad durante años. Antes de copiar el nombre del repositorio de abajo, revisa la página oficial de descargas de Zabbix; el paquete de lanzamiento latest siempre apunta a la versión más reciente de la rama 7.0, pero si prefieres fijar una versión 7.0-N exacta, la página también lista ese nombre de archivo. Todos los demás comandos aquí son estables para toda la línea 7.0.
Dimensionamiento, puertos y requisitos previos
Asuma un VPS Ubuntu 24.04 KVM recién instalado con privilegios root o sudo. Sea realista con los recursos: 2 GB de RAM y dos vCPUs son el mínimo real para ejecutar el servidor, la base de datos, nginx y PHP en una sola máquina monitoreando un grupo pequeño de hosts. Un servidor de 1 GB arranca, pero la base de datos se queda sin recursos a medida que crece el historial; planifique 4 GB al superar unas pocas decenas de hosts, y al superar los cien hosts, mueva la base de datos a su propio servidor. El espacio en disco aumenta según la cantidad de elementos que recolecte y el tiempo que mantenga el historial; reserve unos pocos gigabytes para empezar; el proceso de limpieza eliminará los datos antiguos según los periodos de retención que configure.
Puertos: 80 y 443 para el frontend, ya sea público o restringido a su propia IP. El servidor escucha en el puerto TCP 10051 para recibir datos de agentes activos, y cada agente escucha en el puerto TCP 10050 para que el servidor realice el polling. Abra únicamente lo que necesite exponer si tiene un firewall delante. Es recomendable tener un registro DNS A para el frontend, ya que necesitará un certificado real para este. Un servidor Zabbix monitorea todos los demás servicios que ejecute, por lo que debe integrarse en el stack de self-hosting recomendado para 2026 en lugar de añadirlo como una solución improvisada.
Paso 1 — Añadir el repositorio oficial de Zabbix 7.0
El paquete zabbix-release realiza una única acción: añade la lista de fuentes de apt y la clave de firma al sistema. Instálelo y luego actualice el índice.
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 updateSi wget devuelve 404 Not Found, el nombre del archivo ha cambiado; abra la página de descargas de Zabbix, seleccione Ubuntu 24.04 y copie la URL zabbix-release exacta que se muestra. Un apt update limpio muestra una línea repo.zabbix.com y no presenta advertencias de clave; The following signatures couldn't be verified because the public key is not available significa que el paquete de la versión no instaló su clave, por lo que debe ejecutar dpkg -i nuevamente y actualizar de nuevo.
Paso 2 — Instalar el servidor, el frontend y el agente
Instale el servidor compilado para MySQL, el frontend en PHP, la configuración de nginx, los archivos del esquema SQL y agent2 en un solo paso.
sudo apt install -y zabbix-server-mysql zabbix-frontend-php \
zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2zabbix-server-mysql es el servidor compilado para MySQL/MariaDB; para PostgreSQL instale zabbix-server-pgsql en su lugar y ajuste los pasos de la base de datos a continuación. zabbix-sql-scripts contiene el esquema que debe importar a continuación; es un paquete separado en la versión 7.0, y omitirlo es la causa de que la ruta de importación falle más adelante. Ninguno de estos paquetes instala un motor de base de datos, así que instale MariaDB ahora si el equipo no tiene uno instalado.
sudo apt install -y mariadb-server
sudo systemctl enable --now mariadbPaso 3 — Crear la base de datos con el juego de caracteres correcto
Zabbix requiere una colación específica: la base de datos debe ser utf8mb4 con utf8mb4_bin. De lo contrario, la importación fallará a mitad del proceso con errores de foreign-key. Abra una shell de root con sudo mysql y ejecute:
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER zabbix@localhost IDENTIFIED BY 'choose-a-strong-password';
GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost;
SET GLOBAL log_bin_trust_function_creators = 1;
FLUSH PRIVILEGES;La línea SET GLOBAL actúa como medida de seguridad para la importación. El esquema de Zabbix crea funciones almacenadas. Una cuenta que no sea SUPER, como zabbix, no puede crearlas si el binary logging está activo. MySQL 8 tiene el binary logging habilitado por defecto; algunas versiones gestionadas de MariaDB también lo tienen (la versión estándar de MariaDB no). Si omite este flag en un servidor con binary logging activado, la importación se detendrá con ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled. Ejecutarlo como root soluciona este problema; desactive el flag nuevamente tras la importación. Anote la contraseña con exactitud: la configuración del servidor requiere la misma cadena byte por byte.
Paso 4 — Importar el schema (el paso que la gente omite)
Esta es la causa más común por la que un frontend recién instalado no carga: la base de datos creada está vacía. Cargue el schema incluido en zabbix-sql-scripts en ella.
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | \
mysql --default-character-set=utf8mb4 -uzabbix -p zabbixEl proceso solicitará la contraseña de zabbix, tardará entre treinta y sesenta segundos en un VPS pequeño y no mostrará mensajes si tiene éxito; la ausencia de salida es el comportamiento correcto. zcat: /usr/share/zabbix-sql-scripts/mysql/server.sql.gz: No such file or directory indica que el paquete zabbix-sql-scripts no está instalado (vuelva al Paso 2). ERROR 1045 (28000): Access denied for user 'zabbix'@'localhost' indica que la contraseña o el permiso del Paso 3 es incorrecto. Una vez finalizado, desactive nuevamente el flag de seguridad:
sudo mysql -e "SET GLOBAL log_bin_trust_function_creators = 0;"Confirme la carga con sudo mysql -e "SELECT COUNT(*) FROM zabbix.users;" — un número, y no un error de doesn't exist, significa que el schema se ha importado correctamente.
Paso 5 — Configurar la contraseña de la base de datos en zabbix_server.conf
El servidor lee sus credenciales de la base de datos desde /etc/zabbix/zabbix_server.conf. Solo es necesario configurar la contraseña; DBName y DBUser ya tienen por defecto el valor zabbix. Descomente la línea # DBPassword= y asígnela:
DBName=zabbix
DBUser=zabbix
DBPassword=choose-a-strong-passwordLa contraseña debe ser idéntica, byte por byte, a la del Paso 3. Una DBPassword vacía o incorrecta es la causa principal del error "Zabbix server is not running" que aparecerá más adelante: el demonio inicia, falla al autenticarse y finaliza el proceso. No habrá mensajes en pantalla; la información solo estará disponible en el log.
Paso 6 — Configurar nginx para el frontend
El paquete zabbix-nginx-conf instala un server block en /etc/zabbix/nginx.conf y crea un enlace simbólico en nginx desde /etc/nginx/conf.d/zabbix.conf, pero las líneas listen y server_name vienen comentadas. Nginx no servirá nada para Zabbix hasta que las edites:
server {
listen 80;
server_name zabbix.example.com;
...
}Usa tu dominio o la IP pública del servidor si aún no tienes DNS. Hay dos problemas comunes. El sitio de bienvenida por defecto de nginx en Ubuntu también escucha en el puerto 80 y está marcado como el servidor por defecto; esto hace que gane ante cualquier petición cuyo nombre no coincida. Elimina dicho sitio o se cargará la página incorrecta: sudo rm -f /etc/nginx/sites-enabled/default. Si /etc/nginx/conf.d/zabbix.conf falta (un error conocido del paquete), crea el enlace manualmente con sudo ln -s /etc/zabbix/nginx.conf /etc/nginx/conf.d/zabbix.conf. Luego, verifica y recarga:
sudo nginx -t
sudo systemctl reload nginxnginx -t debería mostrar test is successful. Si muestra nginx: [emerg] a duplicate default server for 0.0.0.0:80, tanto el sitio por defecto como el bloque de Zabbix están reclamando el puerto default_server; elimina el sitio por defecto y vuelve a probar. Con frecuencia, la prueba pasa con solo una advertencia de conflicting server name, pero el navegador sigue mostrando la página de bienvenida; esto ocurre porque el sitio por defecto gana al no haber coincidencia de nombre; eliminarlo soluciona el problema.
Paso 7 — Iniciar y habilitar los servicios
Inicie el servidor, el agente, PHP-FPM y nginx, y habilítelos para que se inicien automáticamente tras un reinicio.
sudo systemctl restart zabbix-server zabbix-agent2 nginx php8.3-fpm
sudo systemctl enable zabbix-server zabbix-agent2 nginx php8.3-fpmUbuntu 24.04 incluye PHP 8.3, por lo que el servicio FPM es php8.3-fpm; el paquete zabbix-nginx-conf ejecuta su frontend bajo ese mismo proceso maestro. Confirme que el servidor inició y permanece activo:
sudo systemctl status zabbix-server --no-pager
sudo tail -n 20 /var/log/zabbix/zabbix_server.logUn log correcto termina con el servidor iniciado y sus procesos housekeeper, poller y trapper en ejecución. Si observa [Z3001] connection to database 'zabbix' failed: [1045] Access denied for user 'zabbix'@'localhost', el DBPassword del Paso 5 no coincide; corríjalo y reinicie. Una línea [Z3005] query failed: [1146] Table 'zabbix.dbversion' doesn't exist indica que omitió la importación del esquema en el Paso 4, por lo que el servidor no tiene datos para leer.
Paso 8 — Finalizar el asistente de configuración web
Acceda a http://your-domain-or-ip. Se abrirá el asistente de configuración de Zabbix. Siga estos pasos:
- Welcome — elija un idioma.
- Check of pre-requisites — todas las filas deben mostrar OK por defecto; el pool de
/etc/zabbix/php-fpm.confincluido ya ajusta los límites de PHP que Zabbix requiere. - Configure DB connection — tipo de base de datos MySQL, host
localhost, puerto0(esto equivale al puerto o socket por defecto), nombre de la base de datoszabbix, usuariozabbixy la contraseña del Paso 3. Los errores de credenciales o la falta de un esquema se detectan en este punto. - Settings — mantenga el host del servidor Zabbix en
localhost, el puerto en10051y asigne un nombre a la instalación. - Pre-installation summary, luego Install — el asistente genera
/etc/zabbix/web/zabbix.conf.php. - Finish — inicie sesión como
Admin(A mayúscula) con la contraseñazabbix, y cambie esa contraseña inmediatamente en la sección Users.
Si el asistente reporta Cannot create the configuration file, el usuario web no puede escribir en /etc/zabbix/web/ — descargue el archivo zabbix.conf.php que se ofrece, colóquelo manualmente usando sudo y haga clic en Finish.
Paso 9 — Añadir el host local y vincular una plantilla
Zabbix no se monitoriza a sí mismo automáticamente. Vaya a Data collection → Hosts → Create host, establezca el nombre del host como zabbix-server, añádalo al grupo Linux servers y añada una interfaz de tipo Agent con la IP 127.0.0.1 y el puerto 10050. En la sección Templates, vincule Linux by Zabbix agent (la variante de passive-poll; Linux by Zabbix agent active utiliza agent push). Guarde los cambios.
En menos de un minuto, la fila del host mostrará una etiqueta ZBX en verde y las métricas aparecerán en Monitoring → Latest data. Una etiqueta ZBX en rojo indica que el servidor no puede alcanzar al agent; este error se explica más adelante y no es un fallo de este paso.
Paso 10 — Un trigger útil y una alerta por email
La plantilla Linux by Zabbix agent ya incluye triggers para CPU alta, memoria baja y discos llenos, por lo que recibirá alertas en cuanto la vincule. Para ver cómo se construye uno, añada el suyo: abra el host, vaya a Triggers → Create trigger, asígnele el nombre Root filesystem over 90% full on {HOST.NAME}, establezca la severidad en High y use esta expresión:
last(/zabbix-server/vfs.fs.dependent.size[/,pused])>90vfs.fs.dependent.size[/,pused] es el ítem de porcentaje de uso que la discovery de filesystem de la plantilla crea para el filesystem raíz (la plantilla de Linux 7.0 recolecta vfs.fs.get una sola vez y deriva los ítems dependientes por punto de montaje), por lo que el trigger se activa sin recolección de datos adicional. Guarde los cambios.
Un trigger solo cambia el color de una fila en el dashboard hasta que una action notifica a alguien. En Alerts → Media types → Email, configure el servidor SMTP, el puerto, la dirección del remitente, la seguridad de conexión (normalmente STARTTLS) y las credenciales de relay; luego use Test — si falla, la ruta SMTP es incorrecta antes de que dependa de ella cualquier alerta real. Asigne una dirección al usuario Admin en Users → Users → Admin → Media → Add y elija qué severidades deben notificar. Después, configúrelo en Alerts → Actions → Trigger actions → Create action: añada una condición como Trigger severity >= Warning y, en Operations, envíe al Admin vía Email. Guarde y habilite la acción. ¿Prefiere chat? Zabbix 7.0 incluye media types de webhook para Slack, Discord y Telegram; se configuran exactamente igual que Email y se asignan a un usuario.
Monitoreo de un segundo servidor con el agente
Para monitorear otro servidor, agregue también el repositorio de Zabbix en él —Ubuntu 24.04 no incluye paquetes de Zabbix por defecto— y luego instale solo el agente:
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 -y zabbix-agent2Edite /etc/zabbix/zabbix_agent2.conf, configure Server con la IP del servidor Zabbix (para polling pasivo) y, para chequeos activos, configure ServerActive junto con un Hostname único que coincida con el host creado en el frontend:
Server=10.0.0.10
ServerActive=10.0.0.10
Hostname=web-01Ejecute sudo systemctl enable --now zabbix-agent2 y abra el puerto TCP 10050 desde el servidor Zabbix hacia esta máquina. En el frontend, cree un host cuya interfaz Agent apunte a la IP de esa máquina, vincule la plantilla de Linux y el reporte se realizará en menos de un minuto.
Modos de fallo y los strings que verá
El frontend muestra Error connecting to database o un error de base de datos. En el paso de DB del wizard, Access denied for user 'zabbix'@'localhost' (using password: YES) significa que la contraseña no coincide con el Paso 3 o que el GRANT nunca se ejecutó. Si la base de datos conecta pero el frontend reporta The frontend does not match Zabbix database o Table 'zabbix.users' doesn't exist, la importación del schema en el Paso 4 se omitió o falló; ejecútela de nuevo en una base de datos recién creada.
Banner naranja: Zabbix server is not running: the information displayed may not be current. El frontend está activo pero no puede alcanzar un servidor en vivo. Tres causas posibles, la primera es la más probable. El servicio está detenido; revise systemctl status zabbix-server e inícielo. El servicio funciona pero no puede alcanzar su base de datos; el log muestra [Z3001] connection to database 'zabbix' failed: [1045] Access denied, lo que significa que la DBPassword es incorrecta o está vacía. O el frontend apunta al servidor incorrecto, guardado como host localhost puerto 10051 en /etc/zabbix/web/zabbix.conf.php. En Ubuntu no hay SELinux por defecto, por lo que la causa de SELinux-socket que mencionan las guías de RHEL no aplica; aquí casi siempre es la contraseña de la base de datos o un servicio detenido.
El host muestra una etiqueta roja ZBX; error de item Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused. El agente no se está ejecutando o no está escuchando. Revise systemctl status zabbix-agent2 y confirme ListenPort=10050. Un timeout en lugar de "connection refused" significa que un firewall está descartando el puerto 10050. El Received empty response from Zabbix Agent. Assuming that agent dropped connection because of access permissions. relacionado significa que el agente es alcanzable pero su línea Server= no incluye la IP del servidor Zabbix; agréguela y reinicie el agente.
Página de bienvenida de nginx o 502 Bad Gateway. La página de bienvenida significa que el sitio por defecto sigue habilitado o el bloque de Zabbix no está enlazado; elimine /etc/nginx/sites-enabled/default y confirme que /etc/nginx/conf.d/zabbix.conf existe, como en el Paso 6. Un 502 significa que nginx alcanzó PHP pero PHP-FPM está caído o escuchando en un socket diferente; inicie php8.3-fpm y verifique que el socket fastcgi_pass en el bloque de Zabbix coincida con el pool en ejecución.
Backups, upgrades, and TLS
La base de datos contiene todo el historial; realice copias de seguridad con mysqldump de forma programada y guarde el dump fuera del servidor:
mysqldump --single-transaction zabbix | gzip > zabbix-$(date +%F).sql.gzLos archivos de configuración /etc/zabbix son pequeños y también es recomendable guardarlos, pero se pueden reconstruir; los datos no. La restauración es el proceso inverso: cree la base de datos, importe el dump y configure la ruta hacia ella.
Las actualizaciones dentro de la línea 7.0 son ejecuciones ordinarias de apt update && apt upgrade; el servidor aplica las migraciones de esquema en el siguiente inicio, por lo que solo debe actualizar los paquetes y reiniciar zabbix-server. Un cambio a una línea mayor futura es un movimiento deliberado: lea las notas de actualización, realice un dump de la base de datos primero y considere que el cambio de esquema es irreversible. Ese cambio irreversible es la razón exacta por la que se debe fijar una versión LTS y permanecer en ella.
No deje el frontend en HTTP simple. Una vez que el DNS apunte al servidor, instale un certificado usando Certbot y Let's Encrypt en nginx para Ubuntu 24.04, lo cual reescribirá el server block para escuchar en el puerto 443 y redirigir el 80. Mientras asegura un servidor que inicia sesión para monitorear sus otros servidores, bloquee también su SSH con fail2ban para banear intentos de fuerza bruta en SSH. Una sesión de monitoreo no debe viajar en texto plano, y su acceso principal no debe estar expuesto a ataques de adivinación de contraseñas.
FAQ
¿Es necesario el agente de Zabbix o puedo monitorizar sin él?
Ambas opciones funcionan. El agente (agent2) proporciona métricas detalladas por host —CPU, memoria, discos, procesos, servicios, archivos de log— y es la opción estándar para servidores bajo su control. La monitorización sin agente (agentless) cubre dispositivos donde no es posible instalar software: SNMP para switches e impresoras, ICMP ping para conectividad, comprobaciones HTTP para endpoints e IPMI para el estado del hardware. La mayoría de los despliegues reales combinan ambos métodos.
¿Por qué la interfaz web indica que el servidor Zabbix no se está ejecutando?
La interfaz funciona pero no puede conectar con un proceso zabbix-server activo. Normalmente el servidor se inicia, pero el inicio de sesión falla porque el DBPassword en zabbix_server.conf es incorrecto o está vacío, y el proceso se detiene. Ejecute systemctl status zabbix-server y revise /var/log/zabbix/zabbix_server.log; una línea [Z3001] connection to database ... failed lo confirmará. Corrija la contraseña y reinicie; el aviso desaparecerá en un minuto.
¿Debo usar MySQL o puedo usar PostgreSQL?
Ambos son totalmente compatibles: zabbix-server-mysql con MariaDB o MySQL, como en esta guía, o zabbix-server-pgsql con PostgreSQL. Para instalaciones pequeñas la elección es irrelevante. Para instalaciones grandes, PostgreSQL con la extensión TimescaleDB particiona las tablas de historial y reduce el coste de mantenimiento, razón por la cual los entornos grandes lo prefieren. Elija uno y manténgase con él; migrar posteriormente requiere una exportación e importación completa, no un simple cambio de configuración.
¿Cuánta RAM necesita un servidor Zabbix all-in-one?
Para un único equipo que monitorice unos pocos hosts, 2 GB es el mínimo realista y 4 GB es suficiente para superar las pocas decenas de hosts; la memoria se destina principalmente al cache de la base de datos y a los pollers del servidor. Un VPS de 1 GB puede funcionar, pero la base de datos sufrirá falta de recursos a medida que el historial crezca. Con más de cien hosts, separe la base de datos en su propio servidor y ajuste su buffer pool en lugar de añadir más RAM a una sola máquina.
¿Es Zabbix excesivo para solo un par de servidores?
Puede serlo. Si solo necesita saber si un equipo está activo y tener una página para compartir, una herramienta más ligera como Uptime Kuma para monitorización de estado y disponibilidad es más rápida de configurar y más fácil de leer de un vistazo. Elija Zabbix cuando necesite umbrales por métrica, gráficos históricos, plantillas de hosts y reglas de escalado, funciones que un pinger simple no puede ofrecer para un parque de equipos.