Sidebar

#5 Instalación desde contenedores

Docker

Zabbix proporciona imágenes Docker para cada componente de Zabbix como contenedores portátiles y autosuficientes para acelerar procedimiento de despliegue y actualización.

Los componentes de Zabbix vienen con soporte para bases de datos MySQL y PostgreSQL, Soporte de servidor web Apache2 y Nginx. Estas imágenes se separan en imágenes diferentes

Imágenes base de Docker

Los componentes de Zabbix se proporcionan en las imágenes base de Ubuntu, Alpine Linux y CentOS:

Imagen Versión
alpine 3.12
ubuntu 20.04 (focal)
centos 8

Todas las imágenes están configuradas para reconstruir las últimas imágenes si las imágenes base son actualizadas.

Fuentes de archivos Docker

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.

Estructura

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.

Versiones

Cada repositorio de componentes de Zabbix contiene las siguientes etiquetas:

  • latest - última versión estable de un componente Zabbix basado en Imagen de Alpine Linux
  • alpine-latest - última versión estable de un componente Zabbix basado en la imagen de Alpine Linux
  • ubuntu-latest - última versión estable de un componente Zabbix basado en la imagen de Ubuntu
  • alpine-5.4-latest - última versión menor de un componente Zabbix 5.4 basado en la imagen de Alpine Linux
  • ubuntu-5.4-latest - última versión menor de un componente Zabbix 5.4 basado en la imagen de Ubuntu
  • alpine-5.4.* - diferentes versiones menores de un componente Zabbix 5.4 basado en la imagen de Alpine Linux, donde * es la versión menor de componente Zabbix
  • ubuntu-5.4.* - diferentes versiones menores de un componente Zabbix 5.4 basado en la imagen de Ubuntu, donde * es la versión menor de Zabbix componente

Uso

Variables de entorno

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 nomenclatura diferente. Por ejemplo, ZBX_LOGSLOWQUERIES es igual a LogSlowQueries del servidor Zabbix y los archivos de configuración del proxy Zabbix.

Algunas de las opciones de configuración no se pueden cambiar. Por ejemplo, PIDFile y LogType.

Algunos de los 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 el nombre IP o DNS del servidor MySQL o PostgreSQL.
Por defecto, 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.
Por defecto, el valor es '3306' o '5432' respectivamente.
MYSQL_USER Servidor
Proxy
Interfaz web
Usuario de la base de datos MySQL.
Por defecto, el valor es 'zabbix'.
MYSQL_PASSWORD Servidor
Proxy
Interfaz web
Contraseña de la base de datos MySQL.
Por defecto, el valor es 'zabbix'.
MYSQL_DATABASE Servidor
Proxy
Interfaz web
Nombre de la base de datos Zabbix.
De forma predeterminada, el valor es 'zabbix' para el servidor Zabbix y 'zabbix_proxy' para el proxy Zabbix.
POSTGRES_USER Servidor
Interfaz web
Usuario de base de datos PostgreSQL.
Por defecto, el valor es 'zabbix'.
POSTGRES_PASSWORD Servidor
Interfaz web
Contraseña de la base de datos PostgreSQL.
Por defecto, el valor es 'zabbix'.
POSTGRES_DB Servidor
Interfaz web
Nombre de la base de datos Zabbix.
De forma predeterminada, el valor es 'zabbix' para el servidor Zabbix y 'zabbix_proxy' para el proxy Zabbix.
PHP_TZ Interfaz web Zona horaria en formato PHP. La lista completa de zonas horarias admitidas está disponible en php.net.
Por defecto, el valor es 'Europa/Riga'.
ZBX_SERVER_NAME Interfaz web Nombre de instalación de Zabbix visible en la esquina superior derecha de la interfaz web.
Por defecto, el valor es 'Zabbix Docker'
ZBX_JAVAGATEWAY_ENABLE Servidor
Proxy
Habilita la comunicación con la puerta de enlace Zabbix Java para recopilar comprobaciones relacionadas con Java.
De forma predeterminada, el valor es "falso"
ZBX_ENABLE_SNMP_TRAPS Servidor
Proxy
Habilita la función de captura SNMP. Requiere la instancia de zabbix-snmptraps y el volumen compartido /var/lib/zabbix/snmptraps para el servidor Zabbix o el proxy Zabbix.
Volúmenes

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 extender el agente Zabbix usando la función UserParameter
/var/lib/zabbix/modules El volumen permite cargar módulos adicionales y extender el agente Zabbix usando la función LoadModule
/var/lib/zabbix/enc El volumen se utiliza para almacenar archivos relacionados con TLS. Estos nombres de archivo se especifican utilizando las variables de entorno ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE y ZBX_TLSPSKFILE
Servidor Zabbix
/usr/lib/zabbix/alertscripts El volumen se usa para scripts de alerta personalizados. Es el parámetro AlertScriptsPath en zabbix_server.conf
/usr/lib/zabbix/externalscripts El volumen es utilizado por comprobaciones externas. Es el parámetro ExternalScripts en zabbix_server.conf
/var/lib/zabbix/modules El volumen permite cargar módulos adicionales y extender el servidor Zabbix usando la función LoadModule
/var/lib/zabbix/enc El volumen se utiliza para almacenar archivos relacionados con TLS. Estos nombres de archivo se especifican utilizando 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 usa como ubicación de los archivos de la autoridad certificadora (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. Podría ser compartido por el contenedor zabbix-snmptraps y heredado usando la opción volumes_from Docker al crear una nueva instancia del servidor Zabbix. La función de procesamiento de trampas SNMP podría habilitarse usando 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, todas las MIB deben colocarse 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/modules El volumen permite cargar módulos adicionales y extender el servidor Zabbix usando la función LoadModule
/var/lib/zabbix/enc El volumen se utiliza para almacenar archivos relacionados con TLS. Estos nombres de archivo se especifican utilizando 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 usa como ubicación de los archivos de la autoridad certificadora (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. Podría ser compartido por el contenedor zabbix-snmptraps y heredado usando la opción volumes_from Docker al crear una nueva instancia del servidor Zabbix. La función de procesamiento de trampas SNMP podría habilitarse usando 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, todas las MIB deben colocarse en /var/lib/zabbix/mibs
Interfaz web 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 conexiones Apache2 SSL
Interfaz web 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 conexiones Nginx SSL
Snmptraps de Zabbix
/var/lib/zabbix/snmptraps El volumen contiene el archivo de registro snmptraps.log nombrado con las capturas SNMP recibidas
/var/lib/zabbix/mibs El volumen permite agregar nuevos archivos MIB. No admite subdirectorios, todos los MIB deben colocarse en /var/lib/zabbix/mibs

Para obtener información adicional, use los repositorios oficiales de Zabbix en el Centro de Docker.

Ejemplos de uso

** 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:

# docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net

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:

# docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net

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

Zabbix server instance exposes the 10051/TCP port (Zabbix trapper) to host machine.

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):

podman pod create --name zabbix -p 80:8080 -p 10051:10051

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-mysql8080/TCP

Docker Compose

Zabbix proporciona archivos de composición también para definir y ejecutar los componentes de Zabbix de varios contenedores en Docker. Estos archivos de redacción están disponible en el repositorio oficial de Zabbix docker en github.com: https://github.com/zabbix/zabbix-docker. Estos archivos de redacción se agregan como ejemplos, están sobrecargados. Por ejemplo, contienen proxies con compatibilidad con MySQL y SQLite3.

Hay algunas versiones diferentes de archivos de redacción:

Nombre de archivo Descripción
docker-compose_v3_alpine_mysql_latest.yaml El archivo de redacción ejecuta la última versión de los componentes de Zabbix 5.4 en Alpine Linux con compatibilidad con la base de datos MySQL.
docker-compose_v3_alpine_mysql_local.yaml El archivo de composición compila localmente la última versión de Zabbix 5.4 y ejecuta los componentes de Zabbix en Alpine Linux con compatibilidad con la base de datos MySQL.
docker-compose_v3_alpine_pgsql_latest.yaml El archivo de redacción ejecuta la última versión de los componentes de Zabbix 5.4 en Alpine Linux con compatibilidad con la base de datos PostgreSQL.
docker-compose_v3_alpine_pgsql_local.yaml El archivo de composición compila localmente la última versión de Zabbix 5.4 y ejecuta los componentes de Zabbix en Alpine Linux con compatibilidad con la base de datos PostgreSQL.
docker-compose_v3_centos_mysql_latest.yaml El archivo de redacción ejecuta la última versión de los componentes de Zabbix 5.4 en CentOS 8 con compatibilidad con la base de datos MySQL.
docker-compose_v3_centos_mysql_local.yaml El archivo de composición compila localmente la última versión de Zabbix 5.4 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 redacción ejecuta la última versión de los componentes de Zabbix 5.4 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 5.4 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 5.4 en Ubuntu 20.04 con soporte de base de datos MySQL.
docker-compose_v3_ubuntu_mysql_local.yaml El archivo de composición construye localmente la última versión de Zabbix 5.4 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 redacción ejecuta la última versión de los componentes de Zabbix 5.4 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 5.4 y ejecuta los componentes de Zabbix en Ubuntu 20.04 con soporte de base de datos PostgreSQL.

Los archivos de redacción de Docker disponibles son compatibles con la versión 3 de Docker Compose.

Almacenamiento

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.

Archivos de entorno

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>.

Ejemplos

Ejemplo 1

# git checkout 5.4
       # docker-compose -f ./docker-compose_v3_alpine_mysql_latest.yaml hasta -d

El comando descargará las últimas imágenes de Zabbix 5.4 para cada componente de Zabbix y ejecutar de modo separado.

No olvides descargar los archivos .env_<tipo de componente> de repositorio oficial de Zabbix en github.com con archivos de composición.

Ejemplo 2

# git checkout 5.4
       # docker-compose -f ./docker-compose_v3_ubuntu_mysql_local.yaml arriba -d

El comando descargará la imagen base Ubuntu 20.04 (focal), luego compilará los componentes de Zabbix 5.4 localmente y ejecutar de modo separado.