Instalar Zabbix 7.0 LTS en Ubuntu 24.04
Guía para instalar Zabbix 7.0 LTS en Ubuntu 24.04: repositorio, esquema MySQL, nginx y agent2, con soluciones al error de contraseña y otros fallos.
Qué va a crear
Un único VPS con Ubuntu 24.04 que ejecuta toda la pila de Zabbix 7.0 LTS: el daemon zabbix-server que consulta y genera alertas, una base de datos MariaDB/MySQL que almacena todas las métricas, un frontend PHP servido por nginx y zabbix-agent2, que recopila métricas del propio equipo. Cuando esté operativo, lo apunta a un segundo servidor, asocia una plantilla y recibe un correo en cuanto se llena un disco o se detiene un servicio.
Zabbix consume más recursos que una herramienta de página de estado: es un sistema de series temporales real, con plantillas, triggers, escalado y retención del historial. La mayoría de los problemas se concentran en tres pasos que se suelen omitir: importar el esquema de la base de datos, establecer la contraseña de la base de datos que el servidor realmente lee y descomentar dos líneas en la configuración de nginx. Si esos pasos son correctos, el resto se completa con un asistente. Si sólo necesita comprobaciones de disponibilidad y una página de estado que pueda compartir, un monitor de estado ligero como Uptime Kuma lo hace en un contenedor; Zabbix compensa su consumo cuando necesita umbrales por métrica y escalado entre muchos hosts.
Use la línea 7.0 LTS: el servidor, el frontend, agent2 y el esquema están versionados conjuntamente, y recibe correcciones de seguridad durante años. Antes de copiar el nombre de archivo del repositorio que aparece abajo, consulte brevemente la página oficial de descargas de Zabbix. El paquete de lanzamiento latest sólo configura el repositorio 7.0; no selecciona una versión concreta: apt instala los paquetes 7.0.x que tenga el repositorio, que es lo que permite obtener la versión más reciente. La página también puede mostrar paquetes de lanzamiento 7.0-N numerados, pero ese número versiona la configuración del repositorio, no la compilación de Zabbix. Todos los demás comandos de esta guía son estables en toda la línea 7.0.
Dimensionamiento, puertos y requisitos previos
Suponga un VPS KVM Ubuntu 24.04 recién instalado con acceso como root o mediante sudo. Sea realista con los recursos: 2 GB de RAM y dos vCPU son el mínimo práctico para ejecutar el servidor, la base de datos, nginx y PHP en un mismo equipo que monitoriza varios hosts. Un equipo con 1 GB arranca, pero la base de datos se queda sin memoria a medida que crece el historial. Planifique 4 GB cuando supere varias decenas de hosts y, por encima de cien, traslade la base de datos a otro servidor. El uso de disco aumenta según el número de elementos que recopile y el tiempo que conserve el historial. Reserve unos pocos gigabytes al principio. El proceso housekeeper elimina los datos antiguos según los periodos de retención configurados.
Puertos: 80 y 443 para el frontend, públicos o restringidos a su propia IP. El servidor escucha en TCP 10051 para recibir datos enviados por los agentes activos, y cada agente escucha en TCP 10050 para que el servidor lo consulte. Si hay un firewall delante, abra sólo los puertos que vaya a exponer. Conviene crear un registro DNS A para el frontend, porque querrá instalar en él un certificado válido. Un servidor Zabbix monitoriza todos los demás servicios que ejecuta, por lo que forma parte de la pila de self-hosting más amplia que conviene ejecutar en 2026 y no debe añadirse como una ocurrencia posterior.
Paso 1: Añadir el repositorio oficial de Zabbix 7.0
El paquete zabbix-release hace una sola cosa: coloca en el sistema la lista de fuentes de apt y la clave de firma. Instálelo y 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 exacta de zabbix-release que muestra. Un apt update correcto muestra una línea repo.zabbix.com y ninguna advertencia sobre la 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. Vuelva a ejecutar dpkg -i y actualice de nuevo.
Paso 2, Instale el servidor, el frontend y el agente
Instale de una vez el servidor compilado para MySQL, el frontend PHP, la configuración de nginx, los archivos de esquema SQL y agent2.
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 y ajuste los pasos de configuración de la base de datos que aparecen a continuación. zabbix-sql-scripts contiene el esquema que importará a continuación. En 7.0 es un paquete independiente. Si lo omite, la ruta de importación aparecerá como inexistente más adelante. Ninguno de estos paquetes instala un motor de base de datos. Instale MariaDB ahora si el servidor todavía no tiene uno.
sudo apt install -y mariadb-server
sudo systemctl enable --now mariadbPaso 3: crear la base de datos con el juego de caracteres correcto
Zabbix exige una intercalación concreta: sólo admite utf8mb4 con utf8mb4_bin o el utf8 anterior (también llamado utf8mb3) con utf8_bin, y su documentación recomienda encarecidamente utf8mb4 con utf8mb4_bin, que es la combinación utilizada en esta guía. Abra un 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 durante la importación. El esquema de Zabbix crea triggers deterministas durante la importación, y una cuenta que no sea SUPER, como zabbix, no puede crearlos mientras el registro binario está habilitado. MySQL 8 habilita el registro binario de forma predeterminada, y algunas compilaciones de MariaDB gestionadas también lo hacen (MariaDB estándar no). Si omite la opción en un servidor con el registro binario habilitado, la importación se detiene con ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled. Al establecerla como root se evita el problema; desactívela de nuevo después de la importación. Anote la contraseña exactamente: la configuración del servidor necesita la misma cadena, byte por byte.
Paso 4, importar el esquema (el paso que se omite con frecuencia)
Esta es la causa más común por la que un frontend recién instalado no carga: la base de datos que creó está vacía. Cargue en ella el esquema incluido en zabbix-sql-scripts.
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | \
mysql --default-character-set=utf8mb4 -uzabbix -p zabbixSolicita la contraseña de zabbix, tarda entre treinta y sesenta segundos en un VPS pequeño y no muestra nada si termina correctamente; en este caso, que no haya salida es normal. zcat: /usr/share/zabbix-sql-scripts/mysql/server.sql.gz: No such file or directory significa que el paquete zabbix-sql-scripts no está instalado (vuelva al paso 2). ERROR 1045 (28000): Access denied for user 'zabbix'@'localhost' significa que la contraseña o la concesión del paso 3 es incorrecta. Cuando termine, vuelva a desactivar el indicador 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 doesn't exist, significa que el esquema se ha cargado.
Paso 5, establezca la contraseña de la base de datos en zabbix_server.conf
El servidor lee las credenciales de la base de datos desde /etc/zabbix/zabbix_server.conf. Sólo es necesario establecer la contraseña; DBName y DBUser ya tienen zabbix como valor predeterminado. Quite el comentario de la línea # DBPassword= y establézcala:
DBName=zabbix
DBUser=zabbix
DBPassword=choose-a-strong-passwordLa contraseña debe coincidir byte por byte con la definida en el paso 3. Un DBPassword vacío o incorrecto es la causa más habitual del aviso «Zabbix server is not running» que aparecerá más adelante: el daemon se inicia, no puede autenticarse en la base de datos y termina. No se muestra ninguna indicación en pantalla. Sólo lo registra el log.
Paso 6, Configure nginx para el frontend
El paquete zabbix-nginx-conf instala un bloque de servidor en /etc/zabbix/nginx.conf y lo enlaza en nginx desde /etc/nginx/conf.d/zabbix.conf, pero incluye las líneas listen y server_name comentadas. Por eso, nginx no sirve contenido para Zabbix hasta que las edite:
server {
listen 80;
server_name zabbix.example.com;
...
}Use su dominio o la IP pública del servidor si todavía no tiene DNS. Hay dos puntos importantes. El sitio de bienvenida predeterminado de Ubuntu para nginx también escucha en el puerto 80 y está marcado como servidor predeterminado. Por eso, responde a cualquier solicitud cuyo nombre no coincida con otro bloque. Elimínelo para evitar que se cargue la página incorrecta: sudo rm -f /etc/nginx/sites-enabled/default. Si /etc/nginx/conf.d/zabbix.conf no existe por algún motivo, algo conocido en algunos paquetes, cree el enlace manualmente con sudo ln -s /etc/zabbix/nginx.conf /etc/nginx/conf.d/zabbix.conf. Después, pruebe la configuración y recargue nginx:
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 predeterminado como el bloque de Zabbix reclaman default_server. Elimine el sitio predeterminado y vuelva a realizar la prueba. Con más frecuencia, la prueba se completa con sólo una advertencia de conflicting server name, pero el navegador sigue mostrando la página de bienvenida simple. Eso indica que el sitio predeterminado está respondiendo porque el nombre de la solicitud no coincide. Al eliminarlo se corrige el problema.
Paso 7, Inicie y habilite los servicios
Inicie el servidor, el agente, PHP-FPM y nginx, y habilítelos para que sigan activos 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 se inició y sigue activo:
sudo systemctl status zabbix-server --no-pager
sudo tail -n 20 /var/log/zabbix/zabbix_server.logUn registro correcto termina con el servidor iniciado y sus procesos housekeeper, poller y trapper en ejecución. Si aparece [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 nada que 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. Complete estos pasos:
- Bienvenida, seleccione un idioma.
- Comprobación de requisitos previos, todas las filas deberían mostrar OK de forma predeterminada; el conjunto de paquetes
/etc/zabbix/php-fpm.confya aumenta los límites de PHP que necesita Zabbix. - Configurar la conexión a la base de datos, seleccione MySQL como tipo de base de datos, use el host
localhost, el puerto0(que indica el puerto o socket predeterminado), el nombre de la base de datoszabbix, el usuariozabbixy la contraseña del paso 3. Las credenciales incorrectas o la ausencia del esquema se detectan aquí. - Configuración, mantenga el host del servidor de Zabbix
localhost, el puerto10051y asigne un nombre a la instalación. - Resumen previo a la instalación, después seleccione Instalar; el asistente escribirá
/etc/zabbix/web/zabbix.conf.php. - Finalizar, inicie sesión como
Admin(con A mayúscula) usando la contraseñazabbixy cambie esa contraseña inmediatamente en Usuarios.
Si el asistente muestra Cannot create the configuration file, el usuario web no puede escribir en /etc/zabbix/web/. Descargue el zabbix.conf.php que ofrece, colóquelo allí manualmente con sudo y seleccione Finalizar.
Paso 9: Añadir el host local y asociar una plantilla
Zabbix no se supervisa automáticamente. Vaya a Data collection → Hosts → Create host, establezca el nombre del host en zabbix-server, añádalo al grupo Linux servers y agregue una interfaz de Agent con la IP 127.0.0.1 y el puerto 10050. En Templates, asocie Linux by Zabbix agent (la variante de consulta pasiva; Linux by Zabbix agent active utiliza el envío desde el agente). Guarde los cambios.
En menos de un minuto, la fila del host muestra una etiqueta ZBX verde y las métricas aparecen en Monitoring → Latest data. Una etiqueta ZBX roja indica que el servidor no puede llegar al agente. Este caso se explica más adelante y no implica un error en este paso.
Paso 10: un trigger útil y una alerta por correo
La plantilla Linux by Zabbix agent ya incluye triggers para CPU alta, memoria insuficiente y discos llenos, por lo que tendrá alertas en cuanto la asocie. Para ver cómo se crea uno, añada uno propio: abra el host, vaya a Triggers → Create trigger, asígnele el nombre Root filesystem over 90% full on {HOST.NAME}, establezca la gravedad en High y use esta expresión:
last(/zabbix-server/vfs.fs.dependent.size[/,pused])>90vfs.fs.dependent.size[/,pused] es el elemento de porcentaje utilizado que crea el descubrimiento del sistema de archivos de la plantilla para el sistema de archivos raíz (la plantilla Linux de 7.0 recopila vfs.fs.get una vez y deriva elementos dependientes por punto de montaje), por lo que el trigger se activa sin recopilar datos adicionales. Guárdelo.
Un trigger sólo cambia el color de una fila del panel hasta que una acción notifica a alguien. En Alerts → Media types → Email, configure el servidor SMTP, el puerto, la dirección del remitente, la seguridad de la conexión (normalmente STARTTLS) y las credenciales del relay, si son necesarias. Use Test; si falla, la ruta SMTP es incorrecta y debe corregirse antes de depender de ella para una alerta real. Asigne una dirección al usuario Admin en Users → Users → Admin → Media → Add y seleccione las gravedades que deben generar notificaciones. Después, configure la acción en Alerts → Actions → Trigger actions → Create action: añada una condición como Trigger severity >= Warning y, en Operations, envíe la notificación a Admin mediante Email. Guárdela y habilítela. ¿Prefiere un sistema de chat? Zabbix 7.0 incluye tipos de medio webhook para Slack, Discord y Telegram, pero cada uno necesita su propia configuración del servicio en lugar de los parámetros SMTP: Telegram, por ejemplo, requiere crear un bot mediante BotFather, introducir su token en el parámetro api_token del tipo de medio y especificar el ID del chat del destinatario en el campo Send to del usuario. Siga el README de la integración, habilite el tipo de medio, asígnelo a un usuario y úselo en una acción igual que Email.
Supervisar otro servidor con el agente
Para supervisar otro servidor, añada también allí el repositorio de Zabbix. Ubuntu 24.04 no incluye paquetes propios de Zabbix. Después, instale sólo 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. Establezca Server con la IP del servidor de Zabbix para la consulta pasiva y, para las comprobaciones activas, establezca ServerActive y un Hostname único que coincida con el host que cree en el frontend:
Server=10.0.0.10
ServerActive=10.0.0.10
Hostname=web-01Ejecute sudo systemctl restart zabbix-agent2 y abra el puerto TCP 10050 desde el servidor de Zabbix hasta este equipo. El reinicio es necesario: el paquete inició el agente en cuanto terminó la instalación, con el valor incluido en Server=127.0.0.1, y el agente sólo lee su archivo cuando se inicia. enable --now lo encontraría ya en ejecución y no cambiaría nada. Por tanto, el agente seguiría rechazando al servidor de Zabbix. El inicio durante el arranque ya está configurado porque el paquete también habilitó la unidad. Vuelva al frontend, cree un host cuya interfaz Agent apunte a la IP de ese equipo, vincule la plantilla Linux y el host empezará a informar en menos de un minuto.
Modos de fallo y los mensajes que verá
El frontend muestra Error connecting to database o un error de base de datos. En el paso de base de datos del asistente, Access denied for user 'zabbix'@'localhost' (using password: YES) significa que la contraseña no coincide con la del paso 3 o que nunca se ejecutó GRANT. Si la conexión con la base de datos funciona pero el frontend muestra The frontend does not match Zabbix database o Table 'zabbix.users' doesn't exist, la importación del esquema del paso 4 se omitió o falló. Vuelva a ejecutarla 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 llegar a un servidor en ejecución. Hay tres causas, en este orden de probabilidad. El servicio está detenido. Compruebe systemctl status zabbix-server e inícielo. El servicio se ejecuta, pero no puede acceder a su base de datos. El registro muestra [Z3001] connection to database 'zabbix' failed: [1045] Access denied, lo que significa que DBPassword es incorrecto o está vacío. O el frontend apunta al servidor equivocado, almacenado como host localhost y puerto 10051 en /etc/zabbix/web/zabbix.conf.php. Ubuntu no incluye SELinux de forma predeterminada, por lo que la causa relacionada con el socket de SELinux que mencionan las guías de RHEL no se aplica. Aquí, casi siempre el problema es la contraseña de la base de datos o un servicio detenido.
El host muestra una etiqueta roja ZBX; error del elemento 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. Compruebe systemctl status zabbix-agent2 y confirme ListenPort=10050. Un tiempo de espera en lugar de «conexión rechazada» significa que un firewall está descartando el puerto 10050. El mensaje relacionado Received empty response from Zabbix Agent. Assuming that agent dropped connection because of access permissions. significa que el agente es accesible, pero su línea Server= no incluye la IP del servidor Zabbix. Añádala y reinicie el agente.
Página de bienvenida predeterminada de nginx o 502 Bad Gateway. La página de bienvenida indica que el sitio predeterminado sigue habilitado o que el bloque de Zabbix no está enlazado. Elimine /etc/nginx/sites-enabled/default y confirme que existe /etc/nginx/conf.d/zabbix.conf, como se indica en el paso 6. Un 502 significa que nginx llegó a PHP, pero PHP-FPM está detenido o escucha en otro socket. Inicie php8.3-fpm y compruebe que el socket fastcgi_pass del bloque de Zabbix coincide con el pool en ejecución.
Copias de seguridad, actualizaciones y TLS
La base de datos contiene todo el historial, así que haga copias con mysqldump según un calendario y conserve el volcado fuera del servidor:
mysqldump --single-transaction zabbix | gzip > zabbix-$(date +%F).sql.gzLos archivos de configuración de /etc/zabbix son pequeños y también conviene guardarlos, pero se pueden reconstruir; los datos no. La restauración es el proceso inverso: cree la base de datos, importe el volcado y apunte la configuración a ella.
Las actualizaciones dentro de la línea 7.0 son ejecuciones normales de apt update && apt upgrade; el servidor aplica las migraciones del esquema en el siguiente arranque, así que actualice los paquetes y reinicie zabbix-server. Pasar a una línea principal futura es una migración deliberada. Lea las notas de actualización, haga primero un volcado de la base de datos y espere un cambio irreversible del esquema. Precisamente por ese salto irreversible debe fijar una línea LTS y mantenerse en ella.
No deje el frontend en HTTP sin cifrar. Cuando el DNS apunte al servidor, instale un certificado con Certbot y Let's Encrypt en nginx para Ubuntu 24.04, que modifica el bloque del servidor para escuchar en 443 y redirigir 80. Mientras refuerza un servidor que inicia sesión para supervisar todos los demás servidores que administra, proteja también su SSH con fail2ban para bloquear intentos de fuerza bruta contra SSH. Una sesión de supervisión no debe transmitirse en texto claro, y su puerta de entrada no debe quedar expuesta a intentos de adivinar contraseñas.
FAQ
¿Necesito 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 y archivos de registro. Es la opción habitual para los servidores que administra. La monitorización sin agente cubre los dispositivos donde no puede instalar software: SNMP para switches e impresoras, ping ICMP para comprobar la conectividad, comprobaciones HTTP para endpoints e IPMI para el estado del hardware. La mayoría de las implementaciones reales combinan ambas opciones.
¿Por qué el frontend indica que el servidor de Zabbix no está en ejecución?
El frontend funciona, pero no puede conectarse a un proceso zabbix-server activo. Normalmente, el servidor se inició, no pudo iniciar sesión porque DBPassword en zabbix_server.conf es incorrecto o está vacío, y terminó de inmediato. Ejecute systemctl status zabbix-server y lea /var/log/zabbix/zabbix_server.log; una línea [Z3001] connection to database ... failed lo confirma. Corrija la contraseña y reinicie el servicio. El aviso desaparecerá en menos de un minuto.
¿Tengo que usar MySQL o puedo usar PostgreSQL?
Ambos son totalmente compatibles: zabbix-server-mysql con MariaDB o MySQL, como se hace en esta guía, o zabbix-server-pgsql con PostgreSQL. En instalaciones pequeñas, la elección apenas importa. En instalaciones grandes, PostgreSQL con la extensión TimescaleDB particiona las tablas de histórico y hace que las tareas de mantenimiento sean mucho más económicas. Por eso los sitios grandes suelen elegirlo. Elija una opción y manténgala. Migrar más adelante requiere una exportación y una importación completas, no cambiar una opción de configuración.
¿Cuánta RAM necesita un servidor Zabbix todo en uno?
Para un único equipo que monitoriza varios hosts, 2 GB es un mínimo realista y 4 GB ofrecen margen cuando se superan varias decenas de hosts. La memoria se utiliza principalmente para la caché de la base de datos y los procesos de sondeo del servidor. Un VPS de 1 GB funciona, pero deja sin recursos a la base de datos a medida que crece el histórico. Por encima de cien hosts, coloque 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.
¿Zabbix es demasiado para un par de servidores?
Puede serlo. Si sólo necesita saber si un servicio está activo y disponer de una página que pueda compartir, una herramienta más ligera como Uptime Kuma para monitorización de disponibilidad y estado se implementa más rápido y resulta más fácil de consultar de un vistazo. Elija Zabbix cuando necesite umbrales por métrica, gráficos históricos, hosts basados en plantillas y reglas de escalado. Son funciones que un comprobador de disponibilidad sencillo no puede proporcionar en un conjunto de servidores.