Instalando o Zabbix via Docker

Atualizado em: 14 de junho de 2021

Neste repositório do GitHub tem várias informações sobre o uso das imagens oficiais do Zabbix no Docker.

Se você não sabe o que é Docker, recomendo começar lendo os links abaixo. Vale a pena conhecer essa tecnologia.

http://blog.aeciopires.com/palestra-transportando-as-aplicacoes-entre-varios-ambientes-com-docker/
http://blog.aeciopires.com/primeiros-passos-com-docker/

Também realizo curso de Docker: http://blog.aeciopires.com/curso-docker


Neste tutorial, será mostrado como executar o Zabbix usando conteineres Docker, o que deixa a instalação bem simples e rápida. Será mostrado como iniciar os conteineres Zabbix e MySQL persistindo os dados.

0) Instale o Docker seguindo um dos tutoriais abaixo.

1) Crie um diretório para persistir os dados do MySQL.

sudo mkdir -p /docker/mysql/zabbix/data

2) OPCIONAL – Crie o diretório de certificado para uso do Zabbix via HTTPS (isso é recomendado por questões de segurança). Depois disso, copie o arquivo do certificado, da autoridade certificadora chave pública e privada para esse diretório.

sudo mkdir -p /docker/zabbix/ssl

3) Baixe a última versão das imagens docker do MySQL, Zabbix-Agent, Zabbix-ProxyZabbiz-Server e Zabbix-Web.

VERSAO_ZABBIX=5.4
docker pull mysql:8
docker pull zabbix/zabbix-agent:ubuntu-$VERSAO_ZABBIX-latest
docker pull zabbix/zabbix-proxy-sqlite3:ubuntu-$VERSAO_ZABBIX-latest
docker pull zabbix/zabbix-server-mysql:ubuntu-$VERSAO_ZABBIX-latest
docker pull zabbix/zabbix-web-apache-mysql:ubuntu-$VERSAO_ZABBIX-latest

4) Inicie o conteiner docker do MySQL criando o banco de dados para o Zabbix. Altere os dados em negrito conforme as necessidades do seu ambiente.

docker run -d --name mysql-zabbix \
 --restart always \
 -p 3306:3306 \
 -v /docker/mysql/zabbix/data:/var/lib/mysql \
 -e MYSQL_HOST=172.17.0.1 \
 -e MYSQL_ROOT_PASSWORD=secret \
 -e MYSQL_DATABASE=zabbix \
 -e MYSQL_USER=zabbix \
 -e MYSQL_PASSWORD=zabbix \
 mysql:8 \
--default-authentication-plugin=mysql_native_password \
--character-set-server=utf8 \
--collation-server=utf8_bin

Para ver o log, use o seguinte comando.

docker logs -f mysql-zabbix

5) Inicie o conteiner docker do Zabbix-Server acessando o banco de dados criado no MySQL. Altere os dados em negrito conforme as necessidades do seu ambiente.

docker run -d --name zabbix-server \
 --restart always \
 -p 10051:10051 \
 -e MYSQL_ROOT_PASSWORD="secret" \
 -e DB_SERVER_HOST="172.17.0.1" \
 -e DB_SERVER_PORT="3306" \
 -e MYSQL_USER="zabbix" \
 -e MYSQL_PASSWORD="zabbix" \
 -e MYSQL_DATABASE="zabbix" \
zabbix/zabbix-server-mysql:ubuntu-$VERSAO_ZABBIX-latest

Para ver o log, use o seguinte comando.

docker logs -f zabbix-server

6) Inicie o conteiner Zabbix-Web SEM HTTPS. Altere os dados em negrito conforme as necessidades do seu ambiente.

docker run -d --name zabbix-web \
 --restart always \
 -p 80:8080 \
 -e DB_SERVER_HOST="172.17.0.1" \
 -e DB_SERVER_PORT="3306" \
 -e MYSQL_USER="zabbix" \
 -e MYSQL_PASSWORD="zabbix" \
 -e MYSQL_DATABASE="zabbix" \
 -e ZBX_SERVER_HOST="172.17.0.1" \
 -e PHP_TZ="America/Sao_Paulo" \
 zabbix/zabbix-web-apache-mysql:ubuntu-$VERSAO_ZABBIX-latest

Ou inicie o conteiner docker do Zabbix-Web COM HTTPS acessando o banco de dados criado no MySQL e o conteiner Zabbix-Server. Altere os dados em negrito conforme as necessidades do seu ambiente.

docker run -d --name zabbix-web \
 --restart always \
 -p 80:8080 -p 443:8443 \
 -v /docker/zabbix/ssl/file_certificado.crt:/etc/ssl/apache2/ssl.crt \
 -v /docker/zabbix/ssl/file_certificado.key:/etc/ssl/apache2/ssl.key \
 -e DB_SERVER_HOST="172.17.0.1" \
 -e DB_SERVER_PORT="3306" \
 -e MYSQL_USER="zabbix" \
 -e MYSQL_PASSWORD="zabbix" \
 -e MYSQL_DATABASE="zabbix" \
 -e ZBX_SERVER_HOST="172.17.0.1" \
 -e PHP_TZ="America/Sao_Paulo" \
 zabbix/zabbix-web-apache-mysql:ubuntu-$VERSAO_ZABBIX-latest

Para ver o log, use o seguinte comando.

docker logs -f zabbix-web

7) Inicie o conteiner docker do Zabbix-Agent. Altere os dados em negrito e em vermelho conforme as necessidades do seu ambiente.

docker run -d --name zabbix-agent \
 --net=host \
 --hostname "$(hostname)" \
 --privileged \
 -v /:/rootfs \
 -v /var/run:/var/run \
 --restart always \
 -p 10050:10050 \
 -e ZBX_HOSTNAME="$(hostname)" \
 -e ZBX_SERVER_HOST="IP_OU_NOME_DNS_ZABBIX_SERVER" \
 zabbix/zabbix-agent:ubuntu-$VERSAO_ZABBIX-latest

Para ver o log, use o seguinte comando.

docker logs -f zabbix-agent

8) OPCIONAL – Inicie o conteiner docker do Zabbix-Proxy. Altere os dados em negrito e em vermelho conforme as necessidades do seu ambiente.

docker run -d --name zabbix-proxy \
 --restart always \
 -p 10053:10050 \
 -e ZBX_HOSTNAME="$(hostname)" \
 -e ZBX_SERVER_HOST="IP_OU_NOME_DNS_ZABBIX_SERVER" \
 zabbix/zabbix-proxy-sqlite3:ubuntu-$VERSAO_ZABBIX-latest

Para ver o log, use o seguinte comando.

docker logs -f zabbix-proxy

9) Acesse o Zabbix na URL http://IP-Servidor (com HTTP) ou https://IP-Servidor (com HTTPS). O login é Admin e a senha padrão é zabbix.

10) Se quiser parar o conteiner, é só executar o seguinte comando.

docker stop nome-conteiner

11) Para iniciá-lo novamente, execute o seguinte comando.

docker start nome-conteiner

12) Para remover um conteiner, use os seguintes comandos.

docker stop nome-conteiner
docker rm nome-conteiner

13) Para obter mais informações sobre o Zabbix, sobre as imagens docker e como customizar parâmetros de configuração, acesse os links abaixo.

Há um projeto independente, chamado Monitoring Artist, que oferece um plus de funcionalidades ao Zabbix usando imagens Docker. Vale a pena conferir.
14) OPCIONAL – Se precisar fazer o dump de todos os bancos de dados do conteiner MySQL criado anteriormente, use o comando abaixo. Altere os dados em negrito e em vermelho conforme as necessidades do seu ambiente.
docker exec mysql-zabbix sh -c 'exec mysqldump zabbix -uroot -p"MYSQL_ROOT_PASSWORD"' > /home/zabbix.sql
Lembrando que os dados do banco são persistidos no diretório /docker/mysql/zabbix/data do Docker Host no qual o conteiner está sendo executado.
15- OPCIONAL – Se precisar restaurar o dump, siga os passos abaixo.
Remova o banco antigo e crie-o novamente.
docker exec -i -t mysql-zabbix /bin/bash

root@4f39b60a2dde:/# mysql -u root -p
Enter password: 

mysql> drop database zabbix;
mysql> create database zabbix;
mysql> quit

root@4f39b60a2dde:/# exit

Restaure o dump no banco novo. Altere os dados em negrito e em vermelho conforme as necessidades do seu ambiente.

docker stop zabbix-web
docker stop zabbix-server
docker exec -i mysql-zabbix /usr/bin/mysql -uroot -pMYSQL_ROOT_PASSWORD --database=zabbix < /home/zabbix.sql
docker start zabbix-server
docker start zabbix-web

ou

docker stop zabbix-web
docker stop zabbix-server
cat /home/zabbix.sql | docker exec mysql-zabbix sh -c 'exec /usr/bin/mysql -u root --password="MYSQL_ROOT_PASSWORD" zabbix'
docker start zabbix-server
docker start zabbix-web

55 comentários em “Instalando o Zabbix via Docker

  • Depois de instalado o zabbix não está monitorando o server.

    Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused

    como posso resolver ?

  • Bom dia, Bruno!

    Provavelmente, este erro está ocorrendo porque você está utilizando o endereço 127.0.0.1 para que o contêiner do zabbix-agent acesse o contêiner do zabbix-server (onde ambos estão sendo executados no mesmo servidor físico/virtual).

    Se este for o seu caso, troque o 127.0.0.1 pelo IP 172.17.0.1 (IP da interface docker0 criado automaticamente pelo Docker no servidor que executa os contêineres ou troque por outro IP que aparece na interface de rede do servidor físico/virtual). Dessa forma um contêiner tentará se comunicar com outro usando a interface de rede do servidor físico/virtual.

    Do ponto de vista do contêiner, se você usar 127.0.0.1, ele tentará acessar usando a interface localhost do próprio contêiner e não do servidor físico/virtual que executa os contêineres. Isso geralmente causa confusão quando estamos trabalhando com contêineres.

    Abraço.

  • Fiz isso e agora está com outro erro.

    Received empty response from Zabbix Agent at [172.17.0.1]. Assuming that agent dropped connection because of access permissions

  • Aécio, não estou conseguindo monitorar o zabbix via agent, baseado nas informações que adicionei abaixo, consegue me dizer o que pode ser ?

    docker run -d –name zabbix-agent \
    –net=host \
    –hostname “$(hostname)” \
    –privileged \
    -v /:/rootfs \
    -v /var/run:/var/run \
    –restart always \
    -p 10050:10050 \
    -e ZBX_HOSTNAME=”$(hostname)” \
    -e ZBX_SERVER_HOST=”192.168.31.78″ \
    zabbix/zabbix-agent:centos-$VERSAO_ZABBIX-latest

    [root@zabbix_frontend_srv01 ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    71dd8a0c690b zabbix/zabbix-agent:centos-5.0-latest “/sbin/tini — /usr/…” 6 minutes ago Up 2 minutes zabbix-agent
    5bf997930c3c zabbix/zabbix-web-apache-mysql:centos-5.0-latest “docker-entrypoint.sh” About an hour ago Up 2 minutes 8443/tcp, 0.0.0.0:80->8080/tcp zabbix-web
    14062eaf6e85 zabbix/zabbix-server-mysql:centos-5.0-latest “/sbin/tini — /usr/…” 2 hours ago Up 2 minutes 0.0.0.0:10051->10051/tcp zabbix-server

    Starting Zabbix Agent [zabbix_frontend_srv01]. Zabbix 5.0.9 (revision 4d07aaa).
    Press Ctrl+C to exit.

    7:20210323:182908.938 Starting Zabbix Agent [zabbix_frontend_srv01]. Zabbix 5.0.9 (revision 4d07aaa).
    7:20210323:182908.954 **** Enabled features ****
    7:20210323:182908.954 IPv6 support: YES
    7:20210323:182908.954 TLS support: YES
    7:20210323:182908.954 **************************
    7:20210323:182908.955 using configuration file: /etc/zabbix/zabbix_agentd.conf
    7:20210323:182908.957 agent #0 started [main process]
    74:20210323:182908.959 agent #1 started [collector]
    75:20210323:182908.961 agent #2 started [listener #1]
    76:20210323:182908.973 agent #3 started [listener #2]
    77:20210323:182908.977 agent #4 started [listener #3]
    78:20210323:182908.984 agent #5 started [active checks #1]
    78:20210323:182909.553 active check configuration update from [192.168.31.78:10051] started to fail (cannot connect to [[192.168.31.78]:10051]: [111] Connection refused)
    78:20210323:183009.625 active check configuration update from [192.168.31.78:10051] is working again
    78:20210323:183009.625 no active checks on server [192.168.31.78:10051]: host [zabbix_frontend_srv01] not found

  • Oi, Edgar!

    Você cadastrou na interface web do zabbix o host zabbix_frontend_srv01 com o IP 192.168.31.78?

    Outro detalhe é que talvez o contêiner esteja enviando a requisição ao Zabbix usando outro IP de interface de rede, por exemplo o IP do contêiner.
    Vocẽ consegue pegar o IP do conteiner do zabbix-agent com o seguinte comando:

    docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' CONTAINER_NAME-OR-ID_CONTAINER

    Em todo caso, se o problema for esse, o IP do contêiner é dinâmico, muda toda vez que você recriá-lo e por isso não adianta cadastrar um host com este IP na interface web do Zabbix.

    Uma alternativa é instalar no host do server o agente da forma tradicional mesmo ou pedir ajudar na comunidade Zabbix-BR em um dos canais citados na página: http://zabbixbrasil.org/?page_id=2151

    Abraço.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *