Instalando o Zabbix via Docker

Atualizado em: 02 de abril de 2019

Neste repositório do GitHub tem várias informações a cerca da construção 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 dou 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.

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.

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_MAIOR_ZABBIX=4.2
docker pull mysql:5.7
docker pull zabbix/zabbix-agent:ubuntu-$VERSAO_MAIOR_ZABBIX-latest
docker pull zabbix/zabbix-proxy-sqlite3:ubuntu-$VERSAO_MAIOR_ZABBIX-latest
docker pull zabbix/zabbix-server-mysql:ubuntu-$VERSAO_MAIOR_ZABBIX-latest
docker pull zabbix/zabbix-web-apache-mysql:ubuntu-$VERSAO_MAIOR_ZABBIX-latest

4) Inicie o conteiner docker do MySQL criando o banco de dados para o zabbix. Altere os dados em negrito conforme as necessissidades 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:5.7

Para ver o log, use o comando abaixo.

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 necessissidades 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_MAIOR_ZABBIX-latest

Para ver o log, use o comando abaixo.

docker logs -f zabbix-server

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

docker run -d --name zabbix-web \
 --restart always \
 -p 80:80 \
 -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_MAIOR_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 necessissidades do seu ambiente.

docker run -d --name zabbix-web \
 --restart always \
 -p 80:80 -p 443:443 \
 -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_MAIOR_ZABBIX-latest

Para ver o log, use o comando abaixo.

docker logs -f zabbix-web

7) Inicie o conteiner docker do Zabbix-Agent. Altere os dados em negrito e em vermelho conforme as necessissidades 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_MAIOR_ZABBIX-latest

Para ver o log, use o comando abaixo.

docker logs -f zabbix-agent

8) OPCIONAL – Inicie o conteiner docker do Zabbix-Proxy. Altere os dados em negrito e em vermelho conforme as necessissidades 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_MAIOR_ZABBIX-latest

Para ver o log, use o comando abaixo.

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 comando abaixo.

docker stop nome-conteiner

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

docker start nome-conteiner

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

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 necessissidades 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 /opt/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 necessissidades 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

36 comentários em “Instalando o Zabbix via Docker

  • Olha tentei fazer vezes fazendo dessa forma não conseguir, acabei fazendo de um outro tutorial que achei, a parte de instalar os Docker tudo ok, mas na hora de acessar web o Zabbix não aparece de jeito nenhum.

  • Boa tarde, Caio!

    Obrigado por reportar o problema.
    Houveram mudanças na passagem de alguns parâmetros e os conteireres do zabbix-server e zabbix-web não estavam conseguindo acessar o banco de dados.
    Eu li a documentação, testei as mudanças e atualizei o tutorial.

    Pode tentar novamente.

    Abraço e fique com Deus. 🙂

  • Bom dia, Leandro!

    O conteiner do Zabbix-Agent iniciado no mesmo host que o Zabbix-Server permite monitorar a si mesmo. :-).

    Outro caso de uso é que ao invés de você instalar o Zabbix-Agent manualmente em cada servidor GNU/Linux a ser monitorado, você instala o zabbix-agent via Docker e configura para se conectar ao host que executa o conteiner do Zabbix-Server ou Zabbix-Proxy.

    A mesma ideia serve para iniciar o conteiner do Zabbix-Proxy no host GNU/Linux que for destinado a este objetivo.

    No caso do tutorial, eu estou ensinando a instalar todos os conteineres no mesmo host para fins didáticos, mas isso pode ser separado de acordo com a necessidade.

    Abraço e fica com Deus.

  • Boa noite Aécio. Como vai?
    Estou com um problema.
    Quando subo um container do zabbix agent os dados do container são monitorados. Tem como eu monitorar os dados do host que hospeda o container usando o container do zabbix agent?

  • Bom dia, Thalles!

    Entendi o seu problema.

    No host a ser gerenciado, eu inicio o conteiner do Zabbix Agent conforme mostrado no passo 7 do tutorial e na interface web do Zabbix Server eu cadastro o host informando o IP ou nome DNS do computador que executa o conteiner e coloco no campo Nome do Host, o mesmo nome passado como parâmetro na inicialização do conteiner em “ZBX_HOSTNAME”.

    Dessa forma eu consigo ver os dados do host que executa o conteiner e não do conteiner em si.

    Segue algumas imagens de exemplo:

    http://blog.aeciopires.com/wp-content/uploads/2018/09/d.png

    Abraço e fica com Deus.

  • Boa noite Aécio.

    Primeiramente, obrigado pela resposta.

    Eu fiz exatamente como mencionado, inclusive antes de chegar em seu blog e também repeti o seu tutorial mas continuo com o problema.

    O container está compartilhando os recursos da máquina, então o load, por exemplo, é o mesmo valor no host e no container. Mas alguns itens, mostram que o que está sendo monitorado é o container, como por exemplo o hostname(está tendo o valor do hostname do container), e os monitoramentos de espaço em disco. O discover que uso descobriu somente os discos de dentro do container.

    O comando que estou usando é esse: docker run –rm –name zabbix-agent -e ZBX_HOSTNAME=”Maquina-Thales” -e ZBX_SERVER_HOST=”172.17.42.1″ -p 10050:10050 -d zabbix/zabbix-agent:centos-3.4.10

    O ip do server é esse pois estou usando um proxy em docker.

    Você enxerga algum erro meu?

    Obrigado.

  • Bom dia, Thales!

    Obrigado pelo envio de detalhes… Usei basicamente o mesmo comando que você mudando o valor de alguns parâmetros para estar em conformidade com o meu ambiente de teste.

    Realmente olhando com mais atenção percebi que aqui o hostname e uso do disco também estava sendo coletado do conteiner e não do host que hospeda o conteiner. Eu passei desapercebido ao olhar apenas para itens como a hora, uso da memória e CPU…

    Neste caso, a solução (seguindo a mesma lógica do passo 7) é a seguinte.

    VERSAO_MAIOR_ZABBIX=3.4

    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_MAIOR_ZABBIX-latest

    Observe a diferença nos parâmetros do comando que você usou com este novo.

    Lembrando que no caso do monitoramento do disco, o / do host que hospeda o conteiner aparecerá com /rootfs e o /home como /rootfs/home, pois ao subir o conteiner o / está sendo mapeado como um volume Docker em /rootfs.

    Eu ajustei isso no passo 7 do tutorial.

    Fonte: https://zabbix.org/wiki/Dockerized_Zabbix

  • Aécio bom dia. Queremos ter um Zabbix Proxy num ambiente que só tenho máquinas com Windows. Conseguimos instalar um Docker para Windows que rode o zabbix Proxy?

  • Boa tarde, Ricardo!

    De acordo com a documentação do Zabbix, só é possível instalar no Windows o Zabbix Agent. O Zabbix Proxy e Zabbix Server só funcionam em sistemas GNU/Linux ou Unix (Mac OS, FreeBSD, etc) (https://www.zabbix.com/documentation/current/manual/installation/requirements).

    Na documentação das imagens Docker do Zabbix Proxy não há suporte a Windows. (https://hub.docker.com/r/zabbix/zabbix-proxy-sqlite3).

    Em 2017, foi disponibilizada uma atualização no Windows e no Docker para permitir executar conteineres Linux no Windows, antes não era possível justamente porque um conteiner Docker é um processo que conversa com o kernel do sistema operacional que hospeda os conteineres… numa máquina virtual isso não acontece.

    Mas este tipo de execução não é nativo e requer algumas configurações… eu ainda não testei, então não posso dizer se vai ou não funcionar. Mas se quiser testar e saber mais sobre o assunto, comece pelos links abaixo.

    https://blog.docker.com/2017/09/preview-linux-containers-on-windows/
    https://forums.docker.com/t/enable-linux-containers-on-windows/45508/13
    https://www.lambda3.com.br/2017/10/contineres-linux-no-windows-nativamente-sem-mquina-virtual/
    https://tutorials.ubuntu.com/tutorial/tutorial-windows-ubuntu-hyperv-containers#0
    https://www.hanselman.com/blog/DockerAndLinuxContainersOnWindowsWithOrWithoutHyperVVirtualMachines.aspx

    Abraço e fica com Deus.

  • boa tarde Aecio Pires como que agente faz pra configurar o serviço de alerta via telegram no zabbix conteinerizado ?

  • Boa tarde Aécio. Não consigo validar o passo 7. Ao analisar os logs do agent vi que ele está passando o nome do host local e não do server.
    Muito bom o tutorial.

  • Boa noite, Helton!

    Eu não sei. Essa funcionalidade é nativa do Zabbix Agent? Se não for, acho que você terá que customizar uma imagem docker do Zabbix Agent para fazer isso ou então isso é configurado em outro local. Enfim, quando descobrir a solução, compartilha aqui.

    Abraço e fica com Deus.

  • Boa noite, Célio!

    Esse é o comportamento esperado.
    Tanto o Zabbix Server como o Zabbix Agent estão executando em conteineres diferentes no mesmo host.
    Ao executar o Zabbix Agent ele vai coletar dados do host e não do conteiner Docker que executa o Zabbix Server.

    É uma mudança de paradigma.

    Abraço e fica com Deus.

  • Boa tarde, Aécio!

    Estou eu, em 2019, instalando por esse tutorial.
    Por meio do pull baixei as imagens atualizadas e tudo está rodando redondo.
    Mas infelizmente não consigo pôr o zabbix-agent para conectar ao servidor.

    Verifiquei que a network utilizada no zabbix-agent era a “host” e não “briged” como por padrão os contêineres criados usam.
    Pus na mesma network, todos se pingam, mas infelizmente ainda dá erro de conexão do zabbix-agent com o zabbix-server. Verifiquei DNS, IP, PORTs e o que mais poderia não estar errado, infelizmente estou a 2 dias nessa e não consegui nenhuma solução pela internet.

    Sabe informar o que pode estar causando tal comportamento?

    Erro: active check configuration update from [zabbix-server:10051] started to fail (cannot resolve [zabbix-server])

  • Olá, Fábio!

    Se você observar os demais comentários deste post, verá que o agente está na network ‘host’ para permitir coletar dados da máquina que hospeda o conteiner do agente. Se ele ficasse na network ‘bridge’ ele coletaria dados apenas do conteiner do agente e não do host que o hospeda. Entendeu a diferença?

    Repeti os passos do tutorial. A mensagem de erro da checagem ativa aconteceu comigo. As causas/soluções foram:

    1- O host que hospeda o conteiner do zabbix-agent não estava cadastrado na interface web para ser monitorado. Aqui vale o cuidado de informar o IP da interface de rede do host e não do conteiner. Exemplo: 192.168.0.31

    2- O Zabbix Server tentava comunicação com agente informando o IP do conteiner do zabbix-server, mas ao criar o conteiner do zabbix-agent tinha sido informado o IP que hospeda o conteiner do zabbix-server. A solução pode ser remover o conteiner do Zabbix Agent e criá-lo novamente informando no parâmetro ‘ZBX_SERVER_HOST’ todos os IPs possíveis que podem ser usados pelo conteiner do Zabbix Server. Exemplo: -e ZBX_SERVER_HOST=”172.17.0.3,172.17.0.1,192.168.0.31″

    Dessa forma, o comando que cria o conteiner do Zabbix Agent seria:

    VERSAO_MAIOR_ZABBIX=4.0

    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="172.17.0.3,172.17.0.1,192.168.0.31" zabbix/zabbix-agent:ubuntu-$VERSAO_MAIOR_ZABBIX-latest

    Para descobrir qual o IP que foi atribuído ao conteiner do Zabbix Server, use o comando:

    docker inspect zabbix-server | grep "IPAddress"

    Abraço e fica com Deus

  • Oi, antes de tudo parabéns pelo manual..

    Não estou conseguindo fazer o zabbix-agent monitorar o server, no logs do container, mostra sempre conexão recusada…

    No parâmetro ZBX_SERVER_HOST, etou colocando o ip que é mostrado no comando abaixo:
    docker inspect zabbix-server | grep “IPAddress”

  • Primeiramente, parabenizar pelo material, muito bom.

    Não conheço nada de Docker, estou tendo o primeiro contato com ele a través desse material. Tive um problema recente com o mysql(mariadb) e acabei perdendo todos os dados de um sistema interno aqui da empresa. Não era nada importante, mas aconteceu. Com isso vi no docker a solução para que um sistema não interfira no funcionamento do outro e que em caso de pane eu consiga rapidamente portar a aplicação para outra maquina até resolver o problema na maquina de origem.

    Tenho uma maquina com ubuntu rodando mariadb, apache e php. Comecei a instalação usando o seu material, em alguns momentos deu conflito de porta no mysql(3306) e no apache(80), isso deveria acontecer? Onde pede o IP do host, devo colocar o IP da maquina linux ou especificar um IP para o docker dentro do range de IPs da minha rede.

    De antemão peço desculpas pelo nível das perguntas.

  • Bom dia, Madson!

    Fico alegre em saber que o material e conhecimento compartilhado está sendo útil no seu dia a dia.

    Onde tem o IP do Host é para colocar o IP do servidor físico ou da máquina virtual que executa os conteineres Docker.

    Quanto ao conflito de portas pode acontecere sim. Para resolver você muda a porta do host na opção -p PORTA-HOST:PORTA-CONTEINER.

    Exemplo:

    Para o primeiro conteiner do MySQL: seria -p 3306:3306.

    Para o segundo conteiner do MySQL (a ser executado no mesmo servidor ou máquina virtual que o primeiro conteiner MySQL) seria: -p 3307:3306.

    Conseguiu entender?

    Na página tem muitas informações sobre como aprender Docker:

    http://blog.aeciopires.com/primeiros-passos-com-docker/

    Bons estudos

    Abraço e fica com Deus.

  • Onde consigo encontrar as mudanças que fazem com que os conteireres do zabbix-server e zabbix-web passem a acessar o banco de dados?

  • Boa tarde Aécio, tudo bom?

    Seu tutorial é orientador. Muito bom a iniciativa!
    Parabéns!

    Uso na empresa que estou o Rancher para fazer a orquestração dos dockers.
    Quero subir o zabbix para fazer o monitoramento.

    Mas estou enfrentando o problema da não conexão do agente com o server-zabbix.
    Estou fazendo na minha máquina o teste e ta dando a mensagem:
    no active checks on server [192.168.168.68:10051]: host [albatroz-pc] not found

    O comando do em docker é:

    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.168.68″ zabbix/zabbix-agent:ubuntu-$VERSAO_MAIOR_ZABBIX-latest

    Aonde estou errando? pode me ajudar por favor?

    Agradecido desde já

  • Boa tarde, Israel!

    Muito obrigado pelo retorno e que bom saber que o tutorial está sendo útil no seu dia a dia.

    Pela mensagem do log, significa que o Zabbix Server não esta coletando itens via agente zabbix no modo ativo, mas a configuração que você fez é suficiente para monitorar usando o agente no modo passivo que é o padrão.

    Entenda a diferença entre modo passivo e ativo no link abaixo

    https://www.zabbix.com/documentation/4.2/manual/appendix/items/activepassive

    Abraço e fica com Deus

  • Boa tarde, Roberto!

    Leia com calma e atenção os comandos e parâmetros mostrados no tutorial que você conseguirá entender o que precisa ser feito para o conteiner do Zabbix Web e Zabbix Server acessar o banco de dados.

    Abraço e fica com Deus

  • Bom dia, Renato!

    Me sinto honrado em saber que o conteúdo do post lhe ajudou de alguma forma.

    Muito obrigado por desenvolver e compartilhar este arquivo.

    Eu consegui entender o que você implementou e já fiz um fork.

    Abraço e fica com Deus.

  • Oi Aécio, bom dia.

    Primeiramente, obrigado pelo tutorial tão explicativo e detalhado, consegui executar todos os passos com sucesso, com exceção do passo 7. Você poderia me ajudar?

    O Agente zabbix não está UP segundo o servidor Zabbix, é exibida a seguinte mensagem “Zabbix agent on Zabbix server is unreachable for 5 minutes”. Eu vi seu comentário em resposta ao “Fabio”, sobre adicionar mais outros IPs na variável ” -e ZBX_SERVER_HOST” mas não deu certo também…

    Me ajuda a entender mais isso, por que o agente zabbix tem que monitorar a máquina hospedeira? Não é pra monitorar o próprio servidor zabbix que está em um container?

    Eu não entendi o motivo de usar o tipo de interface de rede “host” mas aí você especifica nas variáveis o hostname da máquina física, e no IP do Server Host, você coloca o IP do container do Servidor Zabbix.

    Fiquei bem confuso nisso, você poderia ajudar a solucionar este problema?

  • Bom dia, Clauber!

    Obrigado pelo feedback e é bom saber que o conteúdo está lhe ajudando de alguma forma.

    O conteiner do Agente Zabbix não vai conseguir monitorar o Zabbix Server que está dentro de outro conteiner da mesma forma que é feita numa máquina virtual.

    O conteiner do Agente Zabbix monitora o Docker Host, que também executa o conteiner do Zabbix Server.

    No fim das contas o funcionamento da comunicação entre o Zabbix Server e o Agente Zabbix fica semelhante ao de uma máquina virtual, mas com uma mudança de paradigma aqui. Fica mais complexo entender mesmo…

    O conteiner do Agente Zabbix está usando a interface host que é para acessar os conteineres e também resolver o nome DNS usando as configurações de DNS definidas no Docker host no arquivo /etc/resolv.conf e/ou manualmente no arquivo /etc/hosts. Onde lá eu posso criar nomes estáticos e apontar para IPs dos conteineres do Zabbix Server, Zabbix Web… para facilitar a configuração, caso esses conteineres mudem de IP após um restart do Docker Host ou dos próprios conteineres. É por isso que também defini o IP do conteiner do Zabbix Server na variável de ambiente… (porque no tutorial eu não estou criando o nome no arquivo /etc/hosts… mas se criar, eu passo o nome e não o IP do conteiner). Isso também é necessário porque quando o Zabbix Server vai conversar com o Agente Zabbix, ele chega através do IP do conteiner e não do IP do Docker Host, entende? Mas aí na interface web do Zabbix, eu coloco o IP do Docker Host ou um nome que aponte para esse IP no cadastro do host Zabbix Server para evitar alterar esse cadastro toda vez que o IP do conteiner do Zabbix Server mudar.

    Eu sei que ficou confuso entender… talvez eu não tenha encontrado a didática certa para mostrar… Se conseguir entender e tiver uma forma mais simples de explicar, me avisa que alterarei o conteúdo do post.

    Abraço e fica com Deus!

  • Aécio, obrigado pela atenção e disponibilidade em nos ajudar com nossas dúvidas.

    Estou instalando um script php que faz o registro de chamado no Glpi quando uma ação um incidente é disparado no Zabbix.
    Esse script é colocado na pasta /usr/lib/zabbix/externalscripts e o fiz no container zabbix-server, seria esse container o correto? ou seria o zabbix-web?
    Caso afirmativo, como faço para testar, pois no zabbix-server não tem PHP, consigo chamar o script a partir do zabbix-web(que tem php instalado) apontando para o diretorio no zabbix-server?

  • Aécio, obrigado pelo esclarecimento. De fato, agora eu entendi o que você falou.

    Nas instalações padrões do Zabbix (sem ser em container) o zabbix-agent é o próprio zabbix-server (fazendo uma analogia dentro do ambiente Docker), por isso lá dentro do host Zabbix Server na interface web o IP está 127.0.0.1, ou seja, o zabbix-agent é ele mesmo.

    Só que trazendo pro ambiente Docker eles são coisas diferentes (estão em containers diferentes) então essas configurações precisam ser mudadas… daí eu me questionei “Por que não só iniciar o container do zabbix-agent com a network “bridge” e na interface web do servidor zabbix apontar pro IP do container do zabbix-agent dentro do host Zabbix Server?”

    Mas aí você respondeu: “Não queremos monitorar apenas o container zabbix-agent mas sim todos os containers”. Dessa forma, precisamos iniciar o container do zabbix-agent com a network “host” pra que a própria máquina física (hospedeira) seja o zabbix-agent, então apontamos na variável de ambiente “ZBX_SERVER_HOST” todos os IPs possíveis do container zabbix-server pra comunicação entre ambos, e na hora de configurar na interface web o host Zabbix Server, basta trocar o 127.0.0.1 já que o zabbix-agent não é mais o próprio servidor zabbix, mas agora é a máquina hospedeira, trocando então para o endereço da máquina física, no seu exemplo, o IP 192.168.0.31.

    Ufa, realmente é beeeeem complicado entender isso. Eu li e reli várias e várias vezes já tava super confuso mas consegui captar a ideia no final das contas, eu acho… pelo menos aqui eu consegui eliminar a mensagem de alerta. Obrigado pelos esclarecimentos. Foram de grande ajuda, seu blog é sensacional, eu que sou novo nessa área de DevOps consegui compreender perfeitamente. Abraço 🙂

  • Boa noite, Clauber!

    Você entendeu a ideia perfeitamente e explicou melhor que eu. Isso ajudará outras pessoas com a mesma dúvida.

    Obrigado pelo retorno!

    Abraço e fica com Deus

  • Boa noite, Madson!

    Eu entendi o seu problema, mas isso é algo que ainda não precisei fazer. Você conseguiu resolver? Pode compartilhar a solução?

    Abraço e fica com Deus

Deixe uma resposta

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