Instalação a partir de containers
Visão geral
Esta página descreve como implantar o Zabbix usando Docker ou Docker Compose.
Docker Compose é a forma mais rápida de implantar o Zabbix. Ele lê um arquivo de configuração e inicia automaticamente todos os contêineres que compõem uma instalação completa do Zabbix, na ordem correta.
Docker (implantação manual) alcança o mesmo resultado implantando cada componente passo a passo.
Desde o Zabbix 6.0, 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 superusuário ou a definição da variável/parâmetro de configuração log_bin_trust_function_creators = 1.
Consulte Scripts de criação do banco de dados para obter instruções sobre como definir a variável.
Observe que, se executada a partir de um console, a variável será definida apenas temporariamente e será removida quando um Docker for reiniciado.
Nesse caso, mantenha seu serviço SQL em execução, interrompa apenas o serviço zabbix-server executando docker compose down zabbix-server e depois docker compose up -d zabbix-server.
Como alternativa, você pode definir essa variável no arquivo de configuração.
Pré-requisitos
Antes de começar, certifique-se de que o Docker (1.12.0 ou posterior) esteja instalado no seu sistema. Caso não esteja, siga o guia de instalação do Docker. Para implantação com Docker Compose, o Docker Compose (2.24.0 ou posterior) também é necessário.
Alguns componentes do Zabbix exigem que portas específicas estejam abertas no host que executa o Docker (por exemplo, 10051/TCP para o Zabbix server, 162/UDP para traps SNMP).
Consulte Requirements para ver a lista completa de portas usadas pelos componentes do Zabbix.
Para o Zabbix server e o agent, a porta padrão pode ser alterada definindo a variável de ambiente ZBX_LISTENPORT no respectivo contêiner.
Imagens Docker disponíveis
O Zabbix fornece uma imagem Docker para cada componente do Zabbix, todas publicadas no Docker Hub. Cada imagem é usada para criar um contêiner que executa esse componente.
| Componente do Zabbix | Imagem Docker |
|---|---|
| agent | zabbix/zabbix-agent |
| agent 2 | zabbix/zabbix-agent2 |
| server (MySQL) | zabbix/zabbix-server-mysql |
| server (PostgreSQL) | zabbix/zabbix-server-pgsql |
| Interface web (Apache + MySQL) | zabbix/zabbix-web-apache-mysql |
| Interface web (Apache + PostgreSQL) | zabbix/zabbix-web-apache-pgsql |
| Interface web (Nginx + MySQL) | zabbix/zabbix-web-nginx-mysql |
| Interface web (Nginx + PostgreSQL) | zabbix/zabbix-web-nginx-pgsql |
| proxy (SQLite3) | zabbix/zabbix-proxy-sqlite3 |
| proxy (MySQL) | zabbix/zabbix-proxy-mysql |
| Java gateway | zabbix/zabbix-java-gateway |
| Serviço web | zabbix/zabbix-web-service |
| Armadilhas SNMP | zabbix/zabbix-snmptraps |
Para usar armadilhas SNMP, o contêiner de armadilhas SNMP deve compartilhar um volume com o contêiner do Zabbix server ou proxy (consulte como usar esta imagem no Docker Hub e o exemplo abaixo).
Todas as imagens dos componentes do Zabbix no Docker Hub são baseadas nas versões principais mais recentes dos sistemas operacionais suportados. Essas imagens são reconstruídas automaticamente quando as imagens do SO subjacentes são atualizadas.
Tags de imagem
Cada imagem oferece suporte a tags para selecionar o sistema operacional base e a versão do Zabbix:
zabbix/<image>:<os>-<version>
Valores <os> suportados:
alpine- Alpine Linuxubuntu- Ubuntucentos- CentOS Streamol- Oracle Linuxltsc2022- Windows 11 LTSC 2022 (somente Zabbix agent)
Valores <version> suportados:
latest- Versão estável mais recente do Zabbix no Alpine Linux<os>-latest- Versão estável mais recente do Zabbix no SO selecionado<os>-trunk- Build de desenvolvimento (nightly) mais recente no SO selecionado<os>-X.X-latest- Release secundária mais recente do Zabbix de uma versão principal específica do Zabbix no SO selecionado<os>-X.X.*- Release secundária específica do Zabbix no SO selecionado
Exemplos:
# Zabbix proxy (SQLite3) estável mais recente no Alpine Linux:
docker pull zabbix/zabbix-proxy-sqlite3:latest
# Zabbix proxy (SQLite3) estável mais recente no Ubuntu:
docker pull zabbix/zabbix-proxy-sqlite3:ubuntu-latest
# Build de desenvolvimento (nightly) mais recente do Zabbix server (MySQL) no Ubuntu:
docker pull zabbix/zabbix-server-mysql:ubuntu-trunk
# Release secundária 8.0 mais recente do Zabbix server (MySQL) no Alpine Linux:
docker pull zabbix/zabbix-server-mysql:alpine-8.0-latest
# Versão 8.0.1 do Zabbix server (MySQL) no Alpine Linux:
docker pull zabbix/zabbix-server-mysql:alpine-8.0.1
Docker Compose
Docker Compose é a maneira mais rápida de implantar o Zabbix. Ele lê um arquivo de configuração (arquivo Compose) e gerencia toda a configuração — baixando imagens Docker, criando uma rede interna entre os contêineres, configurando o armazenamento, inicializando o banco de dados e iniciando tudo na ordem correta.
O repositório official Zabbix Dockerfiles fornece arquivos Docker Compose prontos para uso e um sistema de configuração baseado em .env com suporte a diferentes sistemas operacionais, backends de banco de dados e configuração dos componentes do Zabbix.
1. Clone o repositório, navegue até ele e mude para a versão 8.0:
git clone https://github.com/zabbix/zabbix-docker.git
cd zabbix-docker
git checkout 8.0
2. (Opcional) Personalize a implantação com variáveis de ambiente. Esta etapa pode ser ignorada para uma configuração padrão.
3. Implante a configuração padrão — Zabbix server, interface web (executada no Nginx) e um backend de banco de dados (MySQL ou PostgreSQL), cada um em seu próprio contêiner no Alpine Linux.
# Com MySQL como banco de dados:
docker compose -f ./compose.yaml up -d
# Com PostgreSQL como banco de dados:
docker compose -f ./compose_pgsql.yaml up -d
Depois que os contêineres estiverem em execução (normalmente em 1–3 minutos), o Zabbix server será iniciado e a interface web estará disponível em http://localhost.
Use docker compose ps para verificar o status dos contêineres.
Todos os contêineres (exceto o contêiner zabbix-docker-server-db-init-1) devem ter o status Up.
Se algum mostrar Exited, verifique seus logs com docker logs <container-name>.
Variáveis de ambiente
Tanto o comportamento do Docker Compose quanto a configuração dos componentes do Zabbix podem ser personalizados usando variáveis de ambiente.
As variáveis no nível do Compose (definidas no arquivo .env) controlam quais imagens Docker, portas e intervalos de IP de rede são usados.
Você pode usar essas variáveis inline antes do comando docker compose ou editar o arquivo .env.
Por exemplo, o comando a seguir implanta uma configuração completa do Zabbix com vários contêineres usando uma imagem baseada em Ubuntu (em vez do Alpine Linux padrão) e expondo a interface web via Nginx em portas HTTP (8282) e HTTPS (8443) personalizadas:
OS=ubuntu \
ZABBIX_WEB_NGINX_HTTP_PORT=8282 \
ZABBIX_WEB_NGINX_HTTPS_PORT=8443 \
docker compose -f ./compose.yaml up -d
As variáveis no nível do componente (definidas nos arquivos env_vars/.env_<component>) controlam a configuração dos componentes do Zabbix.
Edite o respectivo arquivo .env_<component> antes de executar o comando docker compose.
Por exemplo, você pode ajustar a contagem de pollers passivos do Zabbix server e as configurações de cache, bem como configurar o fuso horário da interface web editando as seguintes variáveis:
# env_vars/.env_srv
ZBX_STARTPOLLERS=20
ZBX_CACHESIZE=64M
ZBX_HISTORYCACHESIZE=32M
# env_vars/.env_web
PHP_TZ=Europe/Paris
As variáveis de ambiente no nível do componente correspondem aos parâmetros de configuração dos componentes do Zabbix usando um estilo de nomenclatura diferente (por exemplo, ZBX_STARTPOLLERS corresponde a StartPollers).
Algumas variáveis são específicas do Docker, e alguns parâmetros de configuração não podem ser alterados (por exemplo, PIDFile e LogType).
Ao usar variáveis de ambiente, consulte a seção Environment variables na descrição da imagem Docker de cada componente no Docker Hub.
Volumes
O Docker Compose armazena dados persistentes no diretório zbx_env/, criado ao lado do arquivo Compose.
Esse diretório preserva os dados dos componentes entre reinicializações e atualizações dos contêineres.
O conteúdo de zbx_env/ é predefinido para a imagem de cada componente. Por exemplo:
zbx_env/etc/- usado pelo contêiner da interface web do Zabbixzbx_env/usr/ezbx_env/var/- usados pelo contêiner do server Zabbix
Para mais informações sobre cada volume, consulte a seção Allowed volumes na descrição da imagem Docker de cada componente no Docker Hub.
Makefile
O repositório Zabbix Dockerfiles também fornece um Makefile como um atalho para tarefas comuns do Docker Compose.
Em vez de usar o comando completo docker compose, você pode usar comandos make mais curtos (execute make help para ver as opções disponíveis):
# Implantação padrão (Zabbix server, interface web, MySQL, tudo em Alpine Linux)
make up
# Implantação personalizada (Zabbix server, interface web com portas Nginx personalizadas, PostgreSQL, tudo em Ubuntu)
make up \
OS=ubuntu \
DB=pgsql \
ZABBIX_WEB_NGINX_HTTP_PORT=8282 \
ZABBIX_WEB_NGINX_HTTPS_PORT=8443
Ao parar ou remover contêineres, sempre especifique o mesmo tipo de banco de dados que foi implantado (por exemplo, make down DB=pgsql).
Por padrão, make up inicia apenas um conjunto mínimo de serviços (Zabbix server, interface web e banco de dados).
Isso mantém a configuração leve e evita iniciar componentes que podem não ser necessários.
Para incluir componentes adicionais, você pode usar os seguintes perfis do Compose:
# Implantação padrão + Zabbix agent, Java gateway, serviço web e traps SNMP:
make up COMPOSE_PROFILES=full
# COMPOSE_PROFILES=full + Zabbix proxy (MySQL e SQLite3):
make up COMPOSE_PROFILES=all
Docker (implantação manual)
Use a implantação manual quando quiser implantar o Zabbix passo a passo, executar componentes individuais, integrá-los a um ambiente existente ou usar um runtime de contêiner alternativo, como o Podman.
Por exemplo, para implantar um proxy Zabbix, execute o seguinte comando:
docker run --name zabbix-proxy-sqlite3 \
-e ZBX_SERVER_HOST=192.0.2.0 \
-e ZBX_PROXYMODE=0 \
-e ZBX_HOSTNAME=zabbix-proxy-sqlite3 \
-v zabbix-proxy-data:/var/lib/zabbix/db_data \
--init \
-d \
zabbix/zabbix-proxy-sqlite3:alpine-8.0-latest
Este comando:
-
Baixa a imagem Docker
zabbix/zabbix-proxy-sqlite3:alpine-8.0-latest. -
Cria e inicia um contêiner
zabbix-proxy-sqlite3com base na imagem Docker (com as flags--inite-d). -
Configura o parâmetro
Serverdo proxy Zabbix por meio da variável de ambienteZBX_SERVER_HOST. Esse parâmetro especifica o endereço IP do server Zabbix do qual o proxy obterá os dados de configuração e para o qual enviará os dados coletados. Observe que outras variáveis necessárias para a operação do proxy ativo usam valores padrão e podem ser omitidas.
As variáveis de ambiente correspondem aos parâmetros de configuração dos componentes do Zabbix usando um estilo de nomenclatura diferente (por exemplo, ZBX_SERVER_HOST corresponde a Server).
Algumas variáveis são específicas do Docker, e alguns parâmetros de configuração não podem ser alterados (por exemplo, PIDFile e LogType).
Ao usar variáveis de ambiente, consulte a seção Environment variables na descrição da imagem Docker de cada componente no Docker Hub.
- Conecta um local de armazenamento gerenciado pelo Docker (por exemplo,
/var/lib/docker/volumes/zabbix-proxy-data/) ao diretório/var/lib/zabbixdo contêiner para que os dados do proxy Zabbix sejam armazenados permanentemente, mesmo que o contêiner seja removido.
Para mais informações sobre cada volume, consulte a seção Allowed volumes na descrição da imagem Docker de cada componente no Docker Hub.
Após implantar o contêiner do proxy Zabbix, você pode prosseguir para adicionar o proxy no seu frontend Zabbix e configurar hosts para serem monitorados por esse proxy.
Os exemplos abaixo abrangem três cenários adicionais de implantação:
- server Zabbix (MySQL) com Java gateway
- server Zabbix (PostgreSQL) com traps SNMP
- server Zabbix (MySQL) com Java gateway no RHEL 8
Para mais exemplos, consulte a descrição da imagem Docker de cada componente no Docker Hub.
Implantar o Zabbix server (MySQL) com Java gateway
Este exemplo mostra como implantar um Zabbix server com backend MySQL, um Java gateway para monitoramento JMX e uma interface web baseada em Nginx.
1. Crie uma rede Docker dedicada, para que todos os contêineres de componentes do Zabbix possam alcançar uns aos outros pelo nome do contêiner:
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
2. Execute um contêiner de server MySQL vazio (substitua zabbix_pwd e root_pwd por senhas fortes):
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 \
--restart unless-stopped \
-d mysql:8.4-oracle \
--character-set-server=utf8mb4 --collation-server=utf8mb4_bin \
--authentication-policy=caching_sha2_password
O MySQL deve estar totalmente inicializado antes de você executar o contêiner do Zabbix server na etapa 4; caso contrário, o esquema do Zabbix pode não ser carregado corretamente.
Para confirmar que o MySQL está pronto, execute docker logs mysql-server e prossiga somente quando vir /usr/sbin/mysqld: ready for connections.
3. Execute um contêiner do Zabbix Java gateway:
docker run --name zabbix-java-gateway -t \
--network=zabbix-net \
--restart unless-stopped \
-d zabbix/zabbix-java-gateway:alpine-8.0-latest
4. Execute um contêiner do Zabbix server e vincule-o ao contêiner do server MySQL (substitua zabbix_pwd e root_pwd pelas mesmas senhas usadas na etapa 2):
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-8.0-latest
Após executar o contêiner do Zabbix server, aguarde o Zabbix server concluir a inicialização do esquema do banco de dados.
Para confirmar que ele está pronto, execute docker logs zabbix-server-mysql e prossiga somente quando não vir mais Creating 'zabbix' schema in MySQL.
5. Execute um contêiner da interface web do Zabbix e vincule-o aos contêineres do Zabbix server e do server MySQL (substitua zabbix_pwd e root_pwd pelas mesmas senhas usadas na etapa 2):
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-8.0-latest
Depois que os contêineres estiverem ativos e em execução (normalmente em 1–3 minutos), o Zabbix server será iniciado e a interface web estará disponível em http://localhost.
Implantar o Zabbix server (PostgreSQL) com traps SNMP
Este exemplo mostra como implantar um Zabbix server com backend PostgreSQL, traps SNMP e uma interface web baseada em Nginx.
1. Crie uma rede Docker dedicada, para que todos os contêineres de componentes do Zabbix possam alcançar uns aos outros pelo nome do contêiner:
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
2. Execute um contêiner de server PostgreSQL vazio (substitua zabbix_pwd por uma senha forte):
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. Execute um contêiner de traps SNMP do 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-8.0-latest
4. Execute um contêiner do Zabbix server, vincule-o ao contêiner do server PostgreSQL e ao contêiner de traps SNMP (substitua zabbix_pwd pela mesma senha usada na etapa 2):
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-8.0-latest
Após executar o contêiner do Zabbix server, aguarde o Zabbix server concluir a inicialização do esquema do banco de dados.
Para confirmar que ele está pronto, execute docker logs zabbix-server-pgsql e prossiga somente quando não vir mais Creating 'zabbix' schema in PostgreSQL.
5. Execute um contêiner da interface web do Zabbix e vincule-o aos contêineres do Zabbix server e do server PostgreSQL (substitua zabbix_pwd pela mesma senha usada na etapa 2):
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-8.0-latest
Depois que os contêineres estiverem ativos e em execução (normalmente em 1–3 minutos), o Zabbix server será iniciado e a interface web estará disponível em http://localhost.
Implantar o Zabbix server (MySQL) com Java gateway no RHEL 8–10
Este exemplo mostra como implantar um Zabbix server com backend MySQL, um Java gateway para monitoramento JMX e uma interface web baseada em Nginx, tudo em execução no Red Hat Enterprise Linux 8, 9 ou 10.
No Red Hat Enterprise Linux, o runtime de contêiner recomendado é o Podman em vez do Docker. O Podman funciona de forma semelhante ao Docker, mas não requer um serviço em segundo plano em execução como root, o que o torna mais adequado para ambientes Red Hat.
1. Crie um novo pod com o nome zabbix e portas expostas para a interface web do Zabbix e o trapper do Zabbix server:
podman pod create --name zabbix -p 80:8080 -p 10051:10051
2. (Opcional) Execute um contêiner do Zabbix agent no local do pod zabbix:
podman run --name zabbix-agent \
-e ZBX_SERVER_HOST="127.0.0.1,localhost" \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-agent-80:latest
3. Crie um diretório ./mysql/ no host RHEL:
mkdir -p ./mysql
4. Execute um contêiner de server MySQL vazio (substitua zabbix_pwd e root_pwd por senhas fortes):
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.4 \
--character-set-server=utf8mb4 --collation-server=utf8mb4_bin \
--authentication-policy=caching_sha2_password
O MySQL deve estar totalmente inicializado antes de você executar o contêiner do Zabbix server na etapa 6; caso contrário, o esquema do Zabbix pode não ser carregado corretamente.
Para confirmar que o MySQL está pronto, execute podman logs mysql-server e prossiga somente quando vir /usr/sbin/mysqld: ready for connections.
5. Execute um 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-80
6. Execute um contêiner do Zabbix server (substitua zabbix_pwd e root_pwd pelas mesmas senhas usadas na etapa 4):
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-80
7. Execute um contêiner da interface web do Zabbix (substitua zabbix_pwd e root_pwd pelas mesmas senhas usadas na etapa 4):
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-80
O pod zabbix expõe a porta 80/TCP (HTTP) para a máquina host a partir da 8080/TCP do contêiner zabbix-web-mysql.