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

5 Instalação a partir de containers

Docker

O Zabbix fornece Docker imagens para cada componente do Zabbix como containers portáveis e autosufiencientes, acelerando o procedimento de implantação e atualização.

Os componentes do Zabbix vêm com suporte para banco de dados MySQL e PostgreSQL, e suporte para servidores web Apache2 e Nginx. Essas imagens são dividas em diferentes imagens.

Desde a versão do Zabbix 6.0, os triggers determinísticos precisam ser criados durante a instalação. Se o log binário estiver habilitado para MySQL/MariaDB, isso requer privilégios de superuser ou a configuração da variable/configuration parameter log_bin_trust_function_creators = 1. Para instruções sobre como configurar a variável, consulte Database creation scripts
Observe que, se estiver executando a partir de um console, a variável será definida apenas temporariamente e será removida quando um Docker for reiniciado. Nesse caso, mantenha o serviço SQL rodando, apenas pare o serviço zabbix-server executando 'docker compose down zabbix-server' e, em seguida, 'docker compose up -d zabbix-server'.
Se preferir, você pode definir essa variável no arquivo de configuração.

Imagens base Docker

Os componentes Zabbix são disponibilizados em imagens construídas sobre Ubuntu, Alpine Linux e CentOS:

Image Version
alpine 3.12
ubuntu 20.04 (focal)
centos 8

Todas as imagens são configuradas para reconstruir as últimas imagens caso alguma das imagens base receba atualização.

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.

Estrutura

Todos os componentes Zabbix estão disponíveis nos seguintes repositórios Docker:

Adicionalmente há suporte para SNMP Trap. Ele é fornecido através de repositório adicional (zabbix/zabbix-snmptraps) baseado apenas em Ubuntu Trusty. Tal solução pode ser associada com Zabbix Server e Zabbix Proxy.

Versões

Cada repositório de componentes Zabbix contém as seguintes tags:

  • latest - versão estável mais recente de um componente Zabbix baseado em imagem Alpine Linux
  • alpine-latest - versão estável mais recente de um componente Zabbix baseado em imagem Alpine Linux
  • ubuntu-latest - versão estável mais recente de um componente Zabbix baseado em imagem Ubuntu
  • alpine-5.4-latest - versão secundária (minor version) mais recente de um componente Zabbix 5.4 baseado em imagem Alpine Linux
  • ubuntu-5.4-latest - versão secundária (minor version) mais recente de um componente Zabbix 5.4 baseado em imagem Ubuntu
  • alpine-5.4.* - diferentes versões secundárias (minor versions) de um componente Zabbix 5.4 baseado em imagem Alpine Linux, onde * representa a versão secundária do componente Zabbix
  • ubuntu-5.4.* - diferentes versões secundárias (minor versions) de um componente Zabbix 5.4 baseado em imagem Ubuntu, onde * representa a versão secundária do componente Zabbix

Initial configuration

After downloading the images, start the containers by executing docker run command followed by additional arguments to specify required environment variables and/or mount points. Some configuration examples are provided below.

Zabbix must not be run as PID1/as an init process in containers.

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