Como instalar o Zabbix com Docker Compose e Docker Secrets (Zabbix 7.0 LTS)

Implantar o Zabbix 7.0 LTS com o Docker Compose permite subir toda a estrutura de monitoramento de forma integrada e isolada em contêineres.

Diferente de configurações básicas que armazenam senhas em texto puro em arquivos .env (vulneráveis a vazamentos em repositórios Git e legíveis via docker inspect), esta arquitetura utiliza Docker Secrets. Com essa abordagem, as credenciais do banco de dados trafegam montadas apenas em memória RAM (tmpfs em /run/secrets/), atendendo às boas práticas de segurança para ambientes corporativos e de produção.

Componentes da Arquitetura

Para que o Zabbix funcione de forma completa, a estrutura sobe quatro serviços integrados em uma rede dedicada:

  1. MySQL Server (8.0): Banco de dados relacional responsável por armazenar configurações, métricas e históricos.
  2. Zabbix Server (7.0 LTS): O núcleo da solução, encarregado de processar as coletas, calcular triggers e disparar alertas.
  3. Zabbix Web Apache (7.0 LTS): Interface gráfica web para gerenciamento, visualização de gráficos, mapas e dashboards.
  4. Zabbix Agent 2 (7.0 LTS): Agente moderno escrito em Go para monitorar a saúde do próprio ambiente local com suporte a checagens simultâneas.

Pré-requisitos

  • Sistema operacional Linux (Ubuntu Server ou Debian recomendados).
  • Docker e o plugin Docker Compose v2 instalados. Clique aqui para instalar.
  • Portas livres no servidor:
    • 8080 (Interface Web HTTP)
    • 8443 (Interface Web HTTPS)
    • 10051 (Comunicação do Zabbix Server)
    • 10050 (Comunicação do Zabbix Agent)
  • Conhecimento básico de terminal Linux e permissões de sudo.

Passo 1: Criar a Estrutura de Diretórios e Proteção Git

Crie a pasta principal do projeto, o diretório restrito para os segredos e os diretórios de persistência para scripts de alerta e configurações personalizadas do agente:

mkdir -p ~/zabbix/secrets
mkdir -p ~/zabbix/zbx_env/usr/lib/zabbix/alertscripts
mkdir -p ~/zabbix/zbx_env/etc/zabbix/zabbix_agentd.d
cd ~/zabbix

Configurar o .gitignore

Para evitar que senhas ou arquivos locais sejam enviados acidentalmente para um repositório Git (GitHub/GitLab), crie um arquivo .gitignore na raiz do projeto:

cat > .gitignore <<'EOF'
secrets/
*.txt
zbx_env/
EOF

Vamos explicar o que esse script faz:

  • Abaixo estamos ignorando segredos e senhas:
    secrets/
    *.txt
  • Em seguida vamos ignorar diretórios de ambiente local e finalizar o script:
    zbx_env/
    EOF

Se dermos um ls nessa pasta vamos ver que foram criados os diretórios:

Passo 2: Criar os Segredos do Docker (Docker Secrets)

Crie os arquivos contendo a senha do usuário root do MySQL e a senha do usuário zabbix.

Atenção: Substitua os valores de exemplo abaixo por senhas fortes antes de executar os comandos. Utilizamos o comando printf em vez de echo para evitar que uma quebra de linha oculta (\n) seja gravada no final do arquivo de senha.

Inicialmente vamos definir a senha de root do MySQL:

printf "mysql123" > secrets/mysql_root_password.txt

Depois, vamos definir a senha senha do usuário ‘zabbix’ no banco de dados:

printf "zabbix123" > secrets/mysql_password.txt

Lembre-se de definir senhas fortes, estamos usando senhas genéricas aqui apenas porque é um tutorial educativo.

Você pode verificar os arquivos recém criados com o comando ls.

Restringir as permissões no Linux

Aplique o princípio do menor privilégio para garantir que apenas o proprietário da conta consiga acessar a pasta e ler os arquivos de senha:

chmod 700 secrets
chmod 644 secrets/*.txt

Passo 3: Criar o arquivo docker-compose.yaml

Crie o arquivo de orquestração dos contêineres. Esta configuração já inclui:

  • O parâmetro --log-bin-trust-function-creators=1 no MySQL 8.0, permitindo que o Zabbix Server crie as triggers e funções iniciais do banco sem precisar da senha de root.
  • Verificação de saúde (healthcheck) para garantir que o Zabbix Server só inicie após o banco de dados estar 100% operacional.

cat > docker-compose.yaml <<'EOF'
services:
  # 1. Banco de Dados MySQL 8.0
  mysql-server:
    image: mysql:8.0
    container_name: mysql-server
    command:
      - mysqld
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_bin
      - --default-authentication-plugin=mysql_native_password
      - --log-bin-trust-function-creators=1
    volumes:
      - mysql-data:/var/lib/mysql
    environment:
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql_root_password
      - MYSQL_PASSWORD_FILE=/run/secrets/mysql_password
    secrets:
      - mysql_root_password
      - mysql_password
    restart: always
    networks:
      - zabbix-net
    healthcheck:
      test: ["CMD-SHELL", "mysqladmin ping -h localhost -u root -p$$(cat /run/secrets/mysql_root_password) --silent"]
      interval: 10s
      timeout: 5s
      retries: 5

  # 2. Zabbix Server (7.0 LTS)
  zabbix-server:
    image: zabbix/zabbix-server-mysql:ubuntu-7.0-latest
    container_name: zabbix-server
    ports:
      - "10051:10051"
    volumes:
      - ./zbx_env/usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts
    environment:
      - DB_SERVER_HOST=mysql-server
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD_FILE=/run/secrets/mysql_password
    secrets:
      - mysql_password
    restart: always
    networks:
      - zabbix-net
    depends_on:
      mysql-server:
        condition: service_healthy

  # 3. Zabbix Web Frontend (Apache)
  zabbix-web:
    image: zabbix/zabbix-web-apache-mysql:ubuntu-7.0-latest
    container_name: zabbix-web
    ports:
      - "8080:8080"
      - "8443:8443"
    environment:
      - ZBX_SERVER_HOST=zabbix-server
      - ZBX_SERVER_PORT=10051
      - DB_SERVER_HOST=mysql-server
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD_FILE=/run/secrets/mysql_password
      - PHP_TZ=America/Sao_Paulo
    secrets:
      - mysql_password
    restart: always
    networks:
      - zabbix-net
    depends_on:
      mysql-server:
        condition: service_healthy
      zabbix-server:
        condition: service_started

  # 4. Zabbix Agent 2
  zabbix-agent:
    image: zabbix/zabbix-agent2:ubuntu-7.0-latest
    container_name: zabbix-agent
    environment:
      - ZBX_SERVER_HOST=zabbix-server
      - ZBX_SERVER_PORT=10051
      - ZBX_HOSTNAME=Zabbix server
    volumes:
      - ./zbx_env/etc/zabbix/zabbix_agentd.d:/etc/zabbix/zabbix_agentd.d:ro
    ports:
      - "10050:10050"
    restart: always
    networks:
      - zabbix-net
    depends_on:
      - zabbix-server

networks:
  zabbix-net:
    driver: bridge

volumes:
  mysql-data:

secrets:
  mysql_root_password:
    file: ./secrets/mysql_root_password.txt
  mysql_password:
    file: ./secrets/mysql_password.txt
EOF

Vamos colar o script e pressionar Enter.

Podemos verificar que foi criado o arquivo “docker-compose.yaml” com o comando ls .

Passo 4: Iniciar os Contêineres

Suba todos os serviços em segundo plano (background):

sudo docker compose up -d

Podemos verificar na figura acima que foram feitos os downloads dos containers e em seguida as configurações de rede e volumes e somente depois foram iniciados os containers.

Nota sobre a primeira execução: O MySQL e o Zabbix Server levarão de 1 a 3 minutos para criar toda a estrutura inicial do banco de dados. (vai demorar)

Passo 5: Verificar os Logs de Inicialização

Monitore os logs do Zabbix Server para acompanhar a criação das tabelas e o início dos serviços:

sudo docker compose logs -f zabbix-server

Aguarde até visualizar a confirmação de que os processos foram iniciados sem erros críticos:

Você verá algo semelhante ao que vemos na figura abaixo:

Pressione Ctrl + C para sair da visualização de logs.

Passo 6: Acessar a Interface Web

Abra o seu navegador e acesse o endereço IP do servidor na porta 8080 (ou localhost se estiver na máquina local):

http://SEU_IP:8080

Utilize as credenciais padrão de fábrica do Zabbix:

  • Usuário: Admin (com a letra “A” maiúscula)
  • Senha: zabbix

Pode demorar um pouco, mas depois veremos uma tela como na figura abaixo.

Passo 7: Configurar o Host “Zabbix server” para Usar o Agente

O Zabbix vem pré-configurado com um host chamado Zabbix server apontando para o IP 127.0.0.1:10050. Como o agente está rodando em outro contêiner na rede Docker, é necessário ajustar a interface de conexão:

No menu lateral esquerdo da interface web, acesse Coleta de dados (Data collection) → Hosts.

Clique sobre o nome do host Zabbix server.

  1. Na seção Interfaces, localize a linha correspondente ao tipo Agent.

Faça as seguintes alterações:

Conectar em (Connect to): Altere de IP para DNS.

Nome DNS (DNS name): Digite zabbix-agent (em letras minúsculas e sem espaços).

Porta (Port): Mantenha 10050.

Clique no botão Atualizar (Update) no final da página.

Passo 8: Confirmar a Disponibilidade

Aguarde de 1 a 2 minutos e retorne à tela Coleta de dados → Hosts. Observe a coluna Disponibilidade (Availability): o ícone ZBX ficará verde, confirmando que o agente está respondendo às coletas do servidor.

Agora, ao clicar em Dashboards vamos ver o zabbix server sendo monitorado.

Caso o ícone permaneça vermelho ou cinza, teste a comunicação manualmente executando:

sudo docker exec -it zabbix-server zabbix_get -s zabbix-agent -k agent.version

Monitoramento de Contêiner vs. Máquina Física:

O agente em contêiner monitora os recursos isolados do próprio contêiner. Caso queira monitorar o hardware e os processos reais do sistema operacional hospedeiro (host Linux), instale o pacote zabbix-agent2 diretamente no sistema operacional do servidor ou mapeie os diretórios /proc e /sys no contêiner do agente.

Comandos Úteis para o Dia a Dia

ComandoDescrição
sudo docker compose up -dInicia todos os serviços em segundo plano
sudo docker compose downPara e remove os contêineres (os dados permanecem salvos no volume)
sudo docker compose psExibe o status atual dos contêineres
sudo docker compose logs -fExibe os logs de todos os serviços em tempo real
sudo docker compose logs zabbix-serverExibe apenas os logs do Zabbix Server
sudo docker exec -it zabbix-agent bashAcessa o terminal interno do contêiner do agente para testes

Recomendações Finais de Segurança

  • Altere a senha padrão do Admin: Assim que realizar o primeiro login na interface web, vá em Administração → Usuários, clique em Admin e altere a senha padrão (zabbix) por questão de segurança.
  • Rotina de Backup: Agende backups periódicos do banco de dados executando o mysqldump diretamente no contêiner do MySQL:

  • sudo docker exec mysql-server mysqldump -u root -p$(sudo cat secrets/mysql_root_password.txt) zabbix > backup_zabbix.sql
  • Atualizações: Quando quiser atualizar os contêineres para versões mais recentes da série 7.0 LTS, execute sudo docker compose pull e, em seguida, sudo docker compose up -d.

Veja mais:

Instalação do Zabbix

Adicionar Host Zabbix

Zabbix: Monitorar Máquina Windows

Monitorar seu Roteador com Zabbix: Guia para Iniciantes

Zabbix Tags: Como Organizar e Filtrar Alertas de Monitoramento

Zabbix FIM: Monitoramento de Integridade de Arquivos

Como instalar o Zabbix com Docker Compose e Docker Secrets (Zabbix 7.0 LTS)

Zabbix Appliance no VirtualBox

Como instalar o Zabbix no Raspberry Pi

Zabbix site

Juliana Mascarenhas

Data Scientist and Master in Computer Modeling by LNCC.
Computer Engineer