Zabbix proporciona imágenes Docker para cada componente de Zabbix como contenedores portátiles y autosuficientes para acelerar el proceso de despliegue y actualización.
Los componentes de Zabbix vienen con soporte para bases de datos MySQL y PostgreSQL, así como soporte de servidor web Apache2 y Nginx. Estas imágenes se separan en imágenes diferentes
A partir de Zabbix 6.0, algunos triggers importantes necesitan ser creados durante la instalación. Si el log binario está habilitado para MySQL/MariaDB, se requieren privilegios de superusuario o configurar la variable/parámetro · log_bin_trust_function_creators = 1. Consulte Scripts de creación de bases de datos para instrucciones sobre cómo configurar la variable.
Tenga en cuenta que si se ejecuta desde consola, la variable solo se usará de forma temporal y se borrará cuando Docker se reinicie. En este caso, mantenga su servicio SQL en ejecución, parando solo el servicio de zabbix-server mediante el comando 'docker compose down zabbix-server' y arrancando con 'docker compose up -d zabbix-server'.
Como alternativa, puede configurar esta variable en el archivo de configuración.
Los componentes de Zabbix se proporcionan en las imágenes base de Ubuntu, Alpine Linux y CentOS:
Todas las imágenes están configuradas para reconstruir las últimas imágenes si las imágenes base son actualizadas.
Todos pueden seguir los cambios del archivo Docker usando el [repositorio oficial] de Zabbix (https://github.com/zabbix/zabbix-docker) en github.com. Puedes bifurcar el proyecto o hacer tu imágenes propias basadas en archivos oficiales de Docker.
Todos los componentes de Zabbix están disponibles en los siguientes repositorios Docker:
Además, hay compatibilidad con las capturas SNMP. Se proporciona como repositorio adicional (zabbix/zabbix-snmptraps) basado únicamente en Ubuntu Trusty. Podría estar vinculado con el servidor Zabbix y Proxy de Zabbix.
Cada repositorio de componentes de Zabbix contiene las siguientes etiquetas:
latest
: última versión estable de un componente Zabbix basado en Imagen de Alpine Linuxalpine-latest
: última versión estable de un componente Zabbix basado en la imagen de Alpine Linuxubuntu-latest
: última versión estable de un componente Zabbix basado en la imagen de Ubuntualpine-6.0-latest
: última versión menor de un componente Zabbix 6.0 basado en la imagen de Alpine Linuxubuntu-6.0-latest
: última versión menor de un componente Zabbix 6.0 basado en la imagen de Ubuntualpine-6.0.*
- diferentes versiones menores de un componente Zabbix 6.0 basado en la imagen de Alpine Linux, donde *
es la versión menor del componente Zabbixubuntu-6.0.*
- diferentes versiones menores de un componente Zabbix 6.0 basado en la imagen de Ubuntu, donde *
es la versión menor del componente ZabbixDespués de descargar las imágenes, inicie los contenedores ejecutando el comando docker run
seguido de argumentos adicionales para especificar las variables de entorno y/o los puntos de montaje requeridos. A continuación, se proporcionan algunos ejemplos de configuración.
Zabbix no debe ejecutarse como PID1/como un proceso init en los contenedores.
Todas las imágenes de componentes de Zabbix proporcionan variables de entorno para controlar la configuración. Estas variables de entorno se enumeran en cada repositorio de componentes. Estas variables de entorno son opciones de los archivos de configuración de Zabbix, pero con un método de denominación diferente. Por ejemplo, ZBX_LOGSLOWQUERIES
es igual a LogSlowQueries
de los archivos de configuración del servidor Zabbix y del proxy de Zabbix.
No se permite cambiar algunas de las opciones de configuración. Por ejemplo, PIDFile
y LogType
.
Algunos componentes tienen variables de entorno específicas, que no existen en los archivos de configuración oficiales de Zabbix:
Variable | Componentes | Descripción |
---|---|---|
DB_SERVER_HOST |
Servidor Proxy Interfaz web |
Esta variable es la dirección IP o el nombre DNS del servidor MySQL o PostgreSQL. De manera predeterminada, el valor es mysql-server o postgres-server para MySQL o PostgreSQL respectivamente |
DB_SERVER_PORT |
Servidor Proxy Interfaz web |
Esta variable es el puerto del servidor MySQL o PostgreSQL. De manera predeterminada, el valor es '3306' o '5432' respectivamente. |
MYSQL_USER |
Servidor Proxy Interfaz web |
Usuario de la base de datos MySQL. De manera predeterminada, el valor es 'zabbix'. |
MYSQL_PASSWORD |
Servidor Proxy Interfaz web |
Contraseña de la base de datos MySQL. De manera predeterminada, el valor es 'zabbix'. |
MYSQL_DATABASE |
Servidor Proxy Interfaz web |
Nombre de la base de datos de Zabbix. De manera predeterminada, el valor es 'zabbix' para el servidor Zabbix y 'zabbix_proxy' para el proxy Zabbix. |
POSTGRES_USER |
Servidor Interfaz web |
Usuario de la base de datos PostgreSQL. De manera predeterminada, el valor es 'zabbix'. |
POSTGRES_PASSWORD |
Servidor Interfaz web |
Contraseña de la base de datos PostgreSQL. De manera predeterminada, el valor es 'zabbix'. |
POSTGRES_DB |
Servidor Interfaz web |
Nombre de la base de datos de Zabbix. De manera predeterminada, el valor es 'zabbix'. |
PHP_TZ |
Interfaz web | Zona horaria en formato PHP. La lista completa de zonas horarias admitidas está disponible en php.net. De manera predeterminada, el valor es 'Europe/Riga'. |
ZBX_SERVER_NAME |
Interfaz web | Nombre de instalación de Zabbix visible en la esquina superior derecha de la interfaz web. De manera predeterminada, el valor es 'Zabbix Docker' |
ZBX_JAVAGATEWAY_ENABLE |
Servidor Proxy |
Habilita la comunicación con la puerta de enlace Java de Zabbix para recopilar comprobaciones relacionadas con Java. De manera predeterminada, el valor es "false" |
ZBX_ENABLE_SNMP_TRAPS |
Servidor Proxy |
Habilita la función de trampa SNMP. Requiere una instancia zabbix-snmptraps y un volumen compartido /var/lib/zabbix/snmptraps para el servidor Zabbix o el proxy Zabbix. |
Las imágenes permiten utilizar algunos puntos de montaje. Estos puntos de montaje son diferentes y dependen del tipo de componente de Zabbix:
Volumen | Descripción |
---|---|
Agente Zabbix | |
/etc/zabbix/zabbix_agentd.d | El volumen permite incluir archivos *.conf y ampliar el agente Zabbix utilizando la función UserParameter |
/var/lib/zabbix/modules | El volumen permite cargar módulos adicionales y ampliar el agente Zabbix utilizando la función LoadModule |
/var/lib/zabbix/enc | El volumen se utiliza para almacenar archivos relacionados con TLS. Estos nombres de archivo se especifican mediante las variables de entorno ZBX_TLSCAFILE , ZBX_TLSCRLFILE , ZBX_TLSKEY_FILE y ZBX_TLSPSKFILE |
Servidor Zabbix | |
/usr/lib/zabbix/alertscripts | El volumen se utiliza para scripts de alerta personalizados. Es el parámetro AlertScriptsPath en zabbix_server.conf |
/usr/lib/zabbix/externalscripts | El volumen lo utilizan las comprobaciones externas. Es el parámetro ExternalScripts en zabbix_server.conf |
/var/lib/zabbix/modules | El volumen permite cargar módulos adicionales y ampliar el servidor Zabbix mediante la función LoadModule |
/var/lib/zabbix/enc | El volumen se utiliza para almacenar archivos relacionados con TLS. Estos nombres de archivo se especifican mediante las variables de entorno ZBX_TLSCAFILE , ZBX_TLSCRLFILE , ZBX_TLSKEY_FILE y ZBX_TLSPSKFILE |
/var/lib/zabbix/ssl/certs | El volumen se utiliza como ubicación de los archivos de certificado de cliente SSL para la autenticación del cliente. Es el parámetro SSLCertLocation en zabbix_server.conf |
/var/lib/zabbix/ssl/keys | El volumen se utiliza como ubicación de los archivos de clave privada SSL para la autenticación del cliente. Es el parámetro SSLKeyLocation en zabbix_server.conf |
/var/lib/zabbix/ssl/ssl_ca | El volumen se utiliza como ubicación de los archivos de la autoridad de certificación (CA) para la verificación del certificado del servidor SSL. Es el parámetro SSLCALocation en zabbix_server.conf |
/var/lib/zabbix/snmptraps | El volumen se utiliza como ubicación del archivo snmptraps.log. Puede ser compartido por el contenedor zabbix-snmptraps y heredado utilizando la opción volumes_from Docker al crear una nueva instancia del servidor Zabbix. La función de procesamiento de trampas SNMP se puede habilitar utilizando un volumen compartido y cambiando la variable de entorno ZBX_ENABLE_SNMP_TRAPS a 'true' |
/var/lib/zabbix/mibs | El volumen permite agregar nuevos archivos MIB. No admite subdirectorios, todos los MIB deben ubicarse en /var/lib/zabbix/mibs |
Proxy Zabbix | |
/usr/lib/zabbix/externalscripts | El volumen es utilizado por comprobaciones externas. Es el parámetro ExternalScripts en zabbix_proxy.conf |
/var/lib/zabbix/db_data/ | El volumen permite almacenar archivos de base de datos en dispositivos externos. Compatible solo con proxy Zabbix con SQLite3 |
/var/lib/zabbix/modules | El volumen permite cargar módulos adicionales y ampliar el servidor Zabbix mediante la función LoadModule |
/var/lib/zabbix/enc | El volumen se utiliza para almacenar archivos relacionados con TLS. Estos nombres de archivo se especifican mediante las variables de entorno ZBX_TLSCAFILE , ZBX_TLSCRLFILE , ZBX_TLSKEY_FILE y ZBX_TLSPSKFILE |
/var/lib/zabbix/ssl/certs | El volumen se utiliza como ubicación de los archivos de certificado de cliente SSL para la autenticación del cliente. Es el parámetro SSLCertLocation en zabbix_proxy.conf |
/var/lib/zabbix/ssl/keys | El volumen se utiliza como ubicación de los archivos de clave privada SSL para la autenticación del cliente. Es el parámetro SSLKeyLocation en zabbix_proxy.conf |
/var/lib/zabbix/ssl/ssl_ca | El volumen se utiliza como ubicación de los archivos de la autoridad de certificación (CA) para la verificación del certificado del servidor SSL. Es el parámetro SSLCALocation en zabbix_proxy.conf |
/var/lib/zabbix/snmptraps | El volumen se utiliza como ubicación del archivo snmptraps.log. Puede ser compartido por el contenedor zabbix-snmptraps y heredado utilizando la opción volumes_from Docker al crear una nueva instancia del servidor Zabbix. La función de procesamiento de trampas SNMP se puede habilitar utilizando un volumen compartido y cambiando la variable de entorno ZBX_ENABLE_SNMP_TRAPS a 'true' |
/var/lib/zabbix/mibs | El volumen permite agregar nuevos archivos MIB. No admite subdirectorios, todos los MIB deben ubicarse en /var/lib/zabbix/mibs |
Interfaz web de Zabbix basada en el servidor web Apache2 | |
/etc/ssl/apache2 | El volumen permite habilitar HTTPS para la interfaz web de Zabbix. El volumen debe contener los dos archivos ssl.crt y ssl.key preparados para las conexiones SSL de Apache2 |
Interfaz web de Zabbix basada en el servidor web Nginx | |
/etc/ssl/nginx | El volumen permite habilitar HTTPS para la interfaz web de Zabbix. El volumen debe contener los dos archivos ssl.crt , ssl.key y dhparam.pem preparados para las conexiones SSL de Nginx |
Zabbix snmptraps | |
/var/lib/zabbix/snmptraps | El volumen contiene el archivo de registro snmptraps.log cuyo nombre incluye las trampas SNMP recibidas |
/var/lib/zabbix/mibs | El volumen permite agregar nuevos archivos MIB. No admite subdirectorios, todos los MIB deben ubicarse en /var/lib/zabbix/mibs |
Para obtener información adicional, use los repositorios oficiales de Zabbix en Docker Hub.
** Ejemplo 1 **
El ejemplo demuestra cómo ejecutar el servidor Zabbix con soporte a la base de datos MySQL, interfaz web de Zabbix basada en el servidor web Nginx y Zabbix Java gateway.
1. Crear una red dedicada para los contenedores componentes de Zabbix:
2. Iniciar la instancia vacía del servidor MySQL
docker run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--network=zabbix-net \
-d mysql:8.0 \
--restart unless-stopped \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
3. Iniciar la instancia Java gateway de Zabbix
docker run --name zabbix-java-gateway -t \
--network=zabbix-net \
--restart unless-stopped \
-d zabbix/zabbix-java-gateway:alpine-5.4-latest
4. Iniciar la instancia del servidor Zabbix y enlazar con la instancia creada del servidor MySQL
docker run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--network=zabbix-net \
-p 10051:10051 \
--restart unless-stopped \
-d zabbix/zabbix-server-mysql:alpine-5.4-latest
La instancia del servidor Zabbix expone el puerto 10051/TCP port (captura de Zabbix) a la máquina anfitrión.
5. Iniciar la interfaz web de Zabbix y enlazar la instancias creadas del servidor MySQL y del servidor Zabbix.
docker run --name zabbix-web-nginx-mysql -t \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--network=zabbix-net \
-p 80:8080 \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-mysql:alpine-5.4-latest
La instancia de la interfaz web de Zabbix expone el puerto 80/TCP (HTTP) a la máquina anfitrión.
** Ejemplo 2 **
El ejemplo demuestra cómo ejecutar el servidor Zabbix con soporte a la base de datos PostgreSQL, interfaz web de Zabbix basada en el servidor web Nginx y características de captura SNMP.
1. Crear una red dedicada para los contenedores componentes de Zabbix:
2. Iniciar la instancia vacía del servidor PostgreSQL
docker run --name postgres-server -t \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="zabbix_pwd" \
-e POSTGRES_DB="zabbix" \
--network=zabbix-net \
--restart unless-stopped \
-d postgres:latest
3. Iniciar la instancia snmptraps de Zabbix
docker run --name zabbix-snmptraps -t \
-v /zbx_instance/snmptraps:/var/lib/zabbix/snmptraps:rw \
-v /var/lib/zabbix/mibs:/usr/share/snmp/mibs:ro \
--network=zabbix-net \
-p 162:1162/udp \
--restart unless-stopped \
-d zabbix/zabbix-snmptraps:alpine-5.4-latest
La instancia snmptrap de Zabbix expone el puerto 162/UDP (captura SNMP) al host anfitrión.
4. Iniciar la instancia del servidor Zabbix y enlazar con la instancia creada del servidor PostgreSQL
docker run --name zabbix-server-pgsql -t \
-e DB_SERVER_HOST="postgres-server" \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="zabbix_pwd" \
-e POSTGRES_DB="zabbix" \
-e ZBX_ENABLE_SNMP_TRAPS="true" \
--network=zabbix-net \
-p 10051:10051 \
--volumes-from zabbix-snmptraps \
--restart unless-stopped \
-d zabbix/zabbix-server-pgsql:alpine-5.4-latest
La instancia del servidor de Zabbix expone el puerto 10051/UDP (captura Zabbix) al host anfitrión.
5. Iniciar la interfaz web de Zabbix y enlazar la instancias creadas del servidor PostgreSQL y del servidor Zabbix
docker run --name zabbix-web-nginx-pgsql -t \
-e ZBX_SERVER_HOST="zabbix-server-pgsql" \
-e DB_SERVER_HOST="postgres-server" \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="zabbix_pwd" \
-e POSTGRES_DB="zabbix" \
--network=zabbix-net \
-p 443:8443 \
-p 80:8080 \
-v /etc/ssl/nginx:/etc/ssl/nginx:ro \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-pgsql:alpine-5.4-latest
La instancia de la interfaz web de Zabbix expone el puerto 443/TCP (HTTPS) a la máquina anfitrión.
El directorio /etc/ssl/nginx debe contener el certificado con el nombre requerido.
** Ejemplo 3 **
El ejemplo demuestra cómo ejecutar el servidor Zabbix con soporte a la base de datos MySQL, interfaz web de Zabbix basada en el servidor web Nginx y Zabbix Java gateway usando podman
en Red Hat 8.
1. Crear un nuevo pod llamado zabbix
y exponer los puertos (interfaz web, servidor de captura Zabbix):
2. (opcional) Iniciar el contenedor del agente Zabbix en el pod zabbix
:
podman run --name zabbix-agent \
-eZBX_SERVER_HOST="127.0.0.1,localhost" \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-agent-50:latest
3. Crear el directorio./mysql/
en el host e iniciar el servidor Oracle MySQL 8.0:
podman run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-v ./mysql/:/var/lib/mysql/:Z \
--restart=always \
--pod=zabbix \
-d mysql:8.0 \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
3. Iniciar el contenedor del servidor Zabbix:
podman run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="127.0.0.1" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-e ZBX_JAVAGATEWAY="127.0.0.1" \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-server-mysql-50
4. Iniciar el contenedor Java Gateway de Zabbix:
podman run --name zabbix-java-gateway -t \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-java-gateway-50
5. Iniciar el contenedor de la interfaz web de Zabbix:
podman run --name zabbix-web-mysql -t \
-e ZBX_SERVER_HOST="127.0.0.1" \
-e DB_SERVER_HOST="127.0.0.1" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-web-mysql-50
El pod zabbix
expone el puerto 80/TCP (HTTP) a la máquina anfitrión desde el contenedor zabbix-web-mysql
8080/TCP
Zabbix también proporciona archivos de composición para definir y ejecutar componentes Zabbix de múltiples contenedores en Docker. Estos archivos de composición están disponibles en el repositorio oficial de Docker de Zabbix en github.com: https://github.com/zabbix/zabbix-docker. Estos archivos de composición se agregan como ejemplos, están sobrecargados. Por ejemplo, contienen servidores proxy con compatibilidad con MySQL y SQLite3.
Hay algunas versiones diferentes de archivos de composición:
Nombre de archivo | Descripción |
---|---|
docker-compose_v3_alpine_mysql_latest.yaml |
El archivo de composición ejecuta la última versión de los componentes Zabbix 6.0 en Alpine Linux con compatibilidad con bases de datos MySQL. |
docker-compose_v3_alpine_mysql_local.yaml |
El archivo de composición compila localmente la última versión de Zabbix 6.0 y ejecuta los componentes de Zabbix en Alpine Linux con soporte de base de datos MySQL. |
docker-compose_v3_alpine_pgsql_latest.yaml |
El archivo de composición ejecuta la última versión de los componentes de Zabbix 6.0 en Alpine Linux con soporte de base de datos PostgreSQL. |
docker-compose_v3_alpine_pgsql_local.yaml |
El archivo de composición compila localmente la última versión de Zabbix 6.0 y ejecuta los componentes de Zabbix en Alpine Linux con soporte de base de datos PostgreSQL. |
docker-compose_v3_centos_mysql_latest.yaml |
El archivo de composición ejecuta la última versión de los componentes de Zabbix 6.0 en CentOS 8 con soporte de base de datos MySQL. |
docker-compose_v3_centos_mysql_local.yaml |
El archivo de composición compila localmente la última versión de Zabbix 6.0 y ejecuta los componentes de Zabbix en CentOS 8 con soporte de base de datos MySQL. |
docker-compose_v3_centos_pgsql_latest.yaml |
El archivo de composición ejecuta la última versión de los componentes de Zabbix 6.0 en CentOS 8 con soporte de base de datos PostgreSQL. |
docker-compose_v3_centos_pgsql_local.yaml |
El archivo de composición compila localmente la última versión de Zabbix 6.0 y ejecuta los componentes de Zabbix en CentOS 8 con soporte de base de datos PostgreSQL. |
docker-compose_v3_ubuntu_mysql_latest.yaml |
El archivo de composición ejecuta la última versión de los componentes de Zabbix 6.0 en Ubuntu 20.04 con soporte de base de datos MySQL. |
docker-compose_v3_ubuntu_mysql_local.yaml |
El archivo de composición compila localmente la última versión de Zabbix 6.0 y ejecuta los componentes de Zabbix en Ubuntu 20.04 con soporte de base de datos MySQL. |
docker-compose_v3_ubuntu_pgsql_latest.yaml |
El archivo de composición ejecuta la última versión de los componentes de Zabbix 6.0 en Ubuntu 20.04 con soporte de base de datos PostgreSQL. |
docker-compose_v3_ubuntu_pgsql_local.yaml |
El archivo de composición compila localmente la última versión de Zabbix 6.0 y ejecuta los componentes de Zabbix en Ubuntu 20.04 con soporte de base de datos PostgreSQL. |
Los archivos de composición de Docker disponibles son compatibles con la versión 3 de Docker Compose.
Los archivos de composición están configurados para admitir el almacenamiento local en una máquina host. Docker Compose creará un directorio zbx_env
en la carpeta con el archivo de composición cuando ejecuta los componentes de Zabbix usando el archivo de composición. El directorio contendrá la misma estructura que la descrita anteriormente en la Sección Volumes y el directorio para el almacenamiento de la base de datos.
También hay volúmenes en modo de solo lectura para los archivos /etc/localtime
y /etc/timezone
.
En el mismo directorio con archivos de composición en github.com puede encontrar archivos con variables de entorno predeterminadas para cada componente en el archivo de composición. Estos archivos de entorno se denominan .env_<tipo de componente>
.
Los comandos que se enumeran a continuación son para Docker Compose V2. Si está utilizando Docker Compose V1, reemplace docker compose -f
por docker-compose -f
Ejemplo 1
El comando descargará las últimas imágenes de Zabbix 6.0 para cada componente Zabbix y los ejecutará en modo desconectado.
No olvide descargar los archivos .env_<tipo de componente>
del repositorio oficial Zabbix de github.com con archivos de redacción.
Ejemplo 2
El comando descargará la imagen base Ubuntu 20.04 (focal) y luego compilará los componentes de Zabbix 6.0 localmente y los ejecutará en modo separado.