Esta é uma tradução da página de documentação original em inglês. Ajude-nos a torná-la melhor.

5 Instalação por containers

Overview

This section describes how to deploy Zabbix with Docker or Docker Compose.

Zabbix officially provides:

  • Separate Docker images for each Zabbix component to run as portable and self-sufficient containers.
  • Compose files for defining and running multi-container Zabbix components in Docker.

Docker

A Zabbix fornece imagens em Docker para cada componente Zabbix, entregando contêineres portáveis e autossuficientes para acelerar o procedimento de implantação e atualização.

Os componentes Zabbix vêm com suporte aos bancos de dados MySQL e PostgreSQL, e suporte à Apache2 e Nginx Web Server. Tais soluções estão separadas em diferentes imagens.

Tags

Official Zabbix component images may contain the following tags:

Tag Description Example
latest The latest stable version of a Zabbix component based on Alpine Linux image. zabbix-agent:latest
<OS>-trunk The latest nightly build of the Zabbix version that is currently being developed on a specific operating system.

<OS> - the base operating system. Supported values:
alpine - Alpine Linux;
ltsc2019 - Windows 10 LTSC 2019 (agent only);
ol - Oracle Linux;
ltsc2022 - Windows 11 LTSC 2022 (agent only);
ubuntu - Ubuntu
zabbix agent:ubuntu-trunk
<OS>-latest The latest stable version of a Zabbix component on a specific operating system.

<OS> - the base operating system. Supported values:
alpine - Alpine Linux;
ltsc2019 - Windows 10 LTSC 2019 (agent only);
ol - Oracle Linux;
ltsc2022 - Windows 11 LTSC 2022 (agent only);
ubuntu - Ubuntu
zabbix-agent:ol-latest
<OS>-X.X-latest The latest minor version of a Zabbix component of a specific major version and operating system.

<OS> - the base operating system. Supported values:
alpine - Alpine Linux;
centos - CentOS (only for Zabbix 4.0)
ltsc2019 - Windows 10 LTSC 2019 (agent only);
ol - Oracle Linux;
ltsc2022 - Windows 11 LTSC 2022 (agent only);
ubuntu - Ubuntu

X.X - the major Zabbix version (supported: 4.0, 5.0, 6.0, 6.2).
zabbix-agent:alpine-6.0-latest
<OS>-X.X.* The latest minor version of a Zabbix component of a specific major version and operating system.

<OS> - the base operating system. Supported values:
alpine - Alpine Linux;
centos - CentOS (only for Zabbix 4.0)
ltsc2019 - Windows 10 LTSC 2019 (agent only);
ol - Oracle Linux;
ltsc2022 - Windows 11 LTSC 2022 (agent only);
ubuntu - Ubuntu

X.X - the major Zabbix version (supported: 4.0, 5.0, 6.0, 6.2).

* - the Zabbix minor version
zabbix-agent:alpine-6.4.1

Arquivos fonte para Docker

Todos podem acompanhar alterações nos arquivos Docker através do repositório oficial no github.com. Você também pode realizar um fork do projeto ou criar suas próprias imagens baseadas nos arquivos Docker oficiais.

Uso

Variáveis de ambiente

Todas as imagens de componentes Zabbix fornecem variáveis de ambiente para controlar a configuração. Estas variáveis de ambiente estão listadas em cada repositório dos componentes. Tais variáveis são opções vindas dos arquivos de configuração do Zabbix, mas com método de nomenclatura diferenciado. Por exemplo, ZBX_LOGSLOWQUERIES é o mesmo que a opção LogSlowQueries dos arquivos de configuração do Zabbix Server e Zabbix Proxy.

Algumas opções de configuração não podem ser alteradas. Por exemplo, PIDFile and LogType.

Alguns dos componentes possuem variáveis de ambiente específicas, que não existem nos arquivos de configuração oficiais do Zabbix:

Variável Componentes Descrição
DB_SERVER_HOST Server
Proxy
Web interface
Esta variável representa o IP ou nome DNS do servidor MySQL ou PostgreSQL.
Por padrão, seu valor é mysql-server ou postgres-server para MySQL ou PostgreSQL, respectivamente.
DB_SERVER_PORT Server
Proxy
Web interface
Esta variável representa a porta do servidor MySQL ou PostgreSQL.
Por padrão, seu valor é '3306' ou '5432', respectivamente.
MYSQL_USER Server
Proxy
Web-interface
Usuário do banco de dados MySQL.
Por padrão, seu valor é 'zabbix'.
MYSQL_PASSWORD Server
Proxy
Web interface
Senha do banco de dados MySQL.
Por padrão, seu valor é 'zabbix'.
MYSQL_DATABASE Server
Proxy
Web interface
Nome do banco de dados do Zabbix.
Por padrão, seu valor é 'zabbix' para Zabbix Server e 'zabbix_proxy' para Zabbix Proxy.
POSTGRES_USER Server
Web interface
Usuário do banco de dados PostgreSQL.
Por padrão, seu valor é 'zabbix'.
POSTGRES_PASSWORD Server
Web interface
Senha do banco de dados PostgreSQL.
Por padrão, seu valor é 'zabbix'.
POSTGRES_DB Server
Web interface
Nome do banco de dados do Zabbix.
Por padrão, seu valor é 'zabbix' para Zabbix Server e 'zabbix_proxy' para Zabbix Proxy.
PHP_TZ Web-interface Timezone no formato PHP. Lista completa de timezones suportados disponível em php.net.
Por padrão, seu valor é 'Europe/Riga'.
ZBX_SERVER_NAME Web interface Nome de instalação visível no canto superior direito da interface web.
Por padrão, seu valor é 'Zabbix Docker'
ZBX_JAVAGATEWAY_ENABLE Server
Proxy
Habilita comunicação com Zabbix Java Gateway para coleta de verificações relacionadas ao Java.
Por padrão, seu valor é "false"
ZBX_ENABLE_SNMP_TRAPS Server
Proxy
Habilita a funcionalidade SNMP Trap. Requer instância zabbix-snmptraps e volume /var/lib/zabbix/snmptraps compartilhado para Zabbix Server ou Zabbix Proxy.
Volumes

As imagens permitem utilizar alguns pontos de montagem. Estes pontos de montagem são diferentes e dependem do tipo de componente Zabbix:

Volume Descrição
Zabbix Agent
/etc/zabbix/zabbix_agentd.d O volume permite incluir arquivos *.conf e estende o Zabbix Agent usando a funcionalidade UserParameter
/var/lib/zabbix/modules O volume permite carregar módulos adicionais e estende o Zabbix Agent usando a funcionalidade LoadModule
/var/lib/zabbix/enc O volume é usado para armazenar arquivos relacionados a TLS. Estes nomes de arquivo são especificados usando as variáveis de ambiente ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE e ZBX_TLSPSKFILE
Zabbix Server
/usr/lib/zabbix/alertscripts O volume é usado para scripts de alerta customizados. É o parâmetro AlertScriptsPath no zabbix_server.conf
/usr/lib/zabbix/externalscripts O volume é usado por verificações externas. É o parâmetro ExternalScripts no zabbix_server.conf
/var/lib/zabbix/modules O volume permite carregar módulos adicionais e estende o Zabbix Server usando a funcionalidade LoadModule
/var/lib/zabbix/enc O volume é usado para armazenar arquivos relacionados a TLS. Estes nomes de arquivo são especificados usando as variáveis de ambiente ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE e ZBX_TLSPSKFILE
/var/lib/zabbix/ssl/certs O volume é usado como local para os arquivos de certificado de cliente SSL para autenticação de cliente. É o parâmetro SSLCertLocation no zabbix_server.conf
/var/lib/zabbix/ssl/keys O volume é usado como local para os arquivos de chave privada SSL para autenticação de cliente. É o parâmetro SSLKeyLocation no zabbix_server.conf
/var/lib/zabbix/ssl/ssl_ca O volume é usado como local para arquivos de certificado de autoridade (CA) para verificação SSL de certificado de servidor. É o parâmetro SSLCALocation no zabbix_server.conf
/var/lib/zabbix/snmptraps O volume é usado como local para o arquivo snmptraps.log. Ele pode ser compartilhado pelo conteiner zabbix-snmptraps e herdado usando a opção volumes_from do Docker durante a criação de uma nova instância do Zabbix Server. A funcionalidade de processamento de SNMP Trap pode ser habilitada pelo uso do volume compartilhado e alterando a variável de ambiente ZBX_ENABLE_SNMP_TRAPS para 'true'
/var/lib/zabbix/mibs O volume permite adicionar novos arquivos MIB. Ele não suporta subdiretórios, assim todas as MIBs devem estar em /var/lib/zabbix/mibs
Zabbix Proxy
/usr/lib/zabbix/externalscripts O volume é usado por verificações externas. É o parâmetro ExternalScripts no zabbix_proxy.conf
/var/lib/zabbix/modules O volume permite carregar módulos adicionais e estender o Zabbix Proxy usando a funcionalidade LoadModule
/var/lib/zabbix/enc O volume é usado para armazenar arquivos relacionados a TLS. Estes nomes de arquivo são especificados usando as variáveis de ambiente ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE e ZBX_TLSPSKFILE
/var/lib/zabbix/ssl/certs O volume é usado como local para os arquivos de certificado de cliente SSL para autenticação de cliente. É o parâmetro SSLCertLocation no zabbix_proxy.conf
/var/lib/zabbix/ssl/keys O volume é usado como local para os arquivos de chave privada SSL para autenticação de cliente. É o parâmetro SSLKeyLocation no zabbix_proxy.conf
/var/lib/zabbix/ssl/ssl_ca O volume é usado como local para arquivos de certificado de autoridade (CA) para verificação SSL de certificado de servidor. É o parâmetro SSLCALocation no zabbix_proxy.conf
/var/lib/zabbix/snmptraps O volume é usado como local para o arquivo snmptraps.log. Ele pode ser compartilhado pelo conteiner zabbix-snmptraps e herdado usando a opção volumes_from do Docker durante a criação de uma nova instância do Zabbix Server. A funcionalidade de processamento de SNMP Trap pode ser habilitada pelo uso do volume compartilhado e alterando a variável de ambiente ZBX_ENABLE_SNMP_TRAPS para 'true'
/var/lib/zabbix/mibs O volume permite adicionar novos arquivos MIB. Ele não suporta subdiretórios, assim todas as MIBs devem estar em /var/lib/zabbix/mibs
Zabbix Web Interface baseada em Apache2 Web Server
/etc/ssl/apache2 O volume permite habilitar o protocolo HTTPS para o Zabbix Web Interface. O volume deve conter os dois arquivos ssl.crt e ssl.key preparados para conexões Apache2 SSL
Zabbix Web Interface baseada em Nginx Web Server
/etc/ssl/nginx O volume permite habilitar o protocolo HTTPS para o Zabbix Web Interface. O volume deve conter os arquivos ssl.crt, ssl.key e dhparam.pem preparados para conexões Nginx SSL
Zabbix snmptraps
/var/lib/zabbix/snmptraps O volume contém o arquivo de log snmptraps.log nomeado com os SNMP Traps recebidos
/var/lib/zabbix/mibs O volume permite adicionar novos arquivos MIB. Ele não suporta subdiretórios, assim todas as MIBs devem estar em /var/lib/zabbix/mibs

Para informação adicional utilize os repositórios oficiais do Zabbix no Docker Hub.

Exemplos de uso

Exemplo 1

O exemplo demonstra como executar o Zabbix Server com suporte a banco de dados MySQL, Zabbix Web Interface baseada em Nginx Web Server e Zabbix Java Gateway.

1. Crie uma rede dedicada aos contêineres dos componentes Zabbix:

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

2. Inicie uma instância vazia de MySQL Server

# 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. Inicie uma instância do Zabbix Java Gateway

# docker run --name zabbix-java-gateway -t \
             --network=zabbix-net \
             --restart unless-stopped \
             -d zabbix/zabbix-java-gateway:alpine-5.4-latest

4. Inicie a instância do Zabbix Server e a associe à instância do MySQL Server recém-criada

# 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

A instância do Zabbix Server expõe a porta 10051/TCP (Zabbix trapper) para máquina local.

5. Inicie o Zabbix Web Interface e o associe às instâncias do MySQL Server e Zabbix Server

# 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

A instância do Zabbix Web Interface expõe a porta 80/TCP (HTTP) para a máquina local.

Exemplo 2

O exemplo demonstra como executar o Zabbix Server com suporte a PostgreSQL, Zabbix Web Interface baseada em Nginx Web Server e funcionalidade SNMP Trap.

1. Crie uma rede dedicada para os contêineres dos componentes Zabbix:

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

2. Inicie uma instância vazia do PostgreSQL Server

# 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. Inicie uma instância do Zabbix snmptraps

# 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

A instância do Zabbix snmptrap expõe a porta 162/UDP (SNMP traps) para a máquina local.

4. Inicie a instância do Zabbix Server e a associe com a instância do PostgreSQL Server

# 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

A instância do Zabbix Server expõe a porta 10051/TCP (Zabbix trapper) para a máquina local.

5. Inicie o Zabbix Web Interface e o associe às instâncias do PostgreSQL Server e Zabbix Server

# 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

A instância do Zabbix Web Interface expõe a porta 443/TCP (HTTPS) para a máquina local.
O diretório /etc/ssl/nginx deve conter certificado com o nome requerido.

Exemplo 3

O exemplo demonstra como executar o Zabbix Server com suporte a MySQL, Zabbix Web Interface baseada em Nginx Web Server e Zabbix Java Gateway usando podman em Red Hat 8.

1. Crie um novo pod com o nome zabbix e exponha as portas (web-interface, Zabbix server trapper):

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

2. (optional) Inicie o contêiner do Zabbix Agent no 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. Crie o diretório ./mysql/ na máquina e inicie o Oracle MySQL Server 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. Inicie o contêiner do Zabbix Server:

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. Inicie o contêiner do Zabbix Java Gateway:

podman run --name zabbix-java-gateway -t \
             --restart=always \
             --pod=zabbix \
             -d registry.connect.redhat.com/zabbix/zabbix-java-gateway-50

5. Inicie o contêiner do Zabbix Web-Interface:

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

O Pod zabbix expõe a porta 80/TCP (HTTP) para a máquina local a partir da porta 8080/TCP do contêiner zabbix-web-mysql.

Docker Compose

A Zabbix também fornece arquivos compose para definição e execução multi-container dos componentes Zabbix em Docker. Estes arquivos compose estão disponíveis no repositório oficial do Zabbix no github.com: https://github.com/zabbix/zabbix-docker. Estes arquivos compose estão disponíveis como exemplos, e estão sobrecarregados. Por exemplo, eles contém proxies com suporte a MySQL e SQLite3.

Há algumas versões diferentes de arquivos compose:

Nome do arquivo Descrição
docker-compose_v3_alpine_mysql_latest.yaml O arquivo compose executa a versão mais recente dos componentes do Zabbix 5.4 em Alpine Linux com suporte a MySQL.
docker-compose_v3_alpine_mysql_local.yaml O arquivo compose constrói localmente a versão mais recente do Zabbix 5.4 e executa os componentes Zabbix em Alpine Linux com suporte a MySQL.
docker-compose_v3_alpine_pgsql_latest.yaml O arquivo compose executa a versão mais recente dos componentes do Zabbix 5.4 em Alpine Linux com suporte a PostgreSQL.
docker-compose_v3_alpine_pgsql_local.yaml O arquivo compose constrói localmente a versão mais recente do Zabbix 5.4 e executa os componentes Zabbix em Alpine Linux com suporte a PostgreSQL.
docker-compose_v3_centos_mysql_latest.yaml O arquivo compose executa a versão mais recente dos componentes do Zabbix 5.4 em CentOS 8 com suporte a MySQL.
docker-compose_v3_centos_mysql_local.yaml O arquivo compose constrói localmente a versão mais recente do Zabbix 5.4 e executa os componentes Zabbix em CentOS 8 com suporte a MySQL.
docker-compose_v3_centos_pgsql_latest.yaml O arquivo compose executa a versão mais recente dos componentes do Zabbix 5.4 em CentOS 8 com suporte a PostgreSQL.
docker-compose_v3_centos_pgsql_local.yaml O arquivo compose constrói localmente a versão mais recente do Zabbix 5.4 e executa os componentes Zabbix em CentOS 8 com suporte a PostgreSQL.
docker-compose_v3_ubuntu_mysql_latest.yaml O arquivo compose executa a versão mais recente dos componentes do Zabbix 5.4 em Ubuntu 20.04 com suporte a MySQL.
docker-compose_v3_ubuntu_mysql_local.yaml O arquivo compose constrói localmente a versão mais recente do Zabbix 5.4 e executa os componentes Zabbix em Ubuntu 20.04 com suporte a MySQL.
docker-compose_v3_ubuntu_pgsql_latest.yaml O arquivo compose executa a versão mais recente dos componentes do Zabbix 5.4 em Ubuntu 20.04 com suporte a PostgreSQL.
docker-compose_v3_ubuntu_pgsql_local.yaml O arquivo compose constrói localmente a versão mais recente do Zabbix 5.4 e executa os componentes Zabbix em Ubuntu 20.04 com suporte a PostgreSQL.

Os arquivos compose disponíveis suportam a versão 3 do Docker Compose.

Armazenamento

Os arquivos compose são configurados para suportar armazenamento na máquina local. O Docker Compose criará um diretório zbx_env na pasta com o arquivo compose quando você executar os componentes do Zabbix utilizando um arquivo compose. O diretório conterá a mesma estrutura como descrita acima na seção de Volumes e diretório para armazenamento de banco de dados.

Há também volumes no modo somente-leitura para os arquivos /etc/localtime e /etc/timezone.

Arquivos de ambiente

No mesmo diretório com os arquivos compose no github.com você pode encontrar arquivos com variáveis de ambiente padrão para cada componente no arquivo compose. Estes arquivos de ambiente são nomeados como .env_<type of component>.

Exemplos

Exemplo 1

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

O comando fará o download das imagens mais recentes do Zabbix 5.4 para cada componente Zabbix e os executará de forma individual (detach mode).

Não esqueça de baixar os arquivos .env_<type of component> do repositório oficial do Zabbix no github.com com os arquivos compose.

Exemplo 2

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

Este comando fará o download da imagem base Ubuntu 20.04 (focal), então construirá os componentes do Zabbix 5.4 localmente e os executará de forma individual (detach mode).