Instalando o Zabbix via Docker

Atualizado em: 06 de abril de 2023

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

As instruções oficiais para instalação do Zabbix com Docker estão disponíveis em: https://www.zabbix.com/documentation/current/en/manual/installation/containers

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, Mibs e SNMP Traps.

sudo mkdir -p /docker/zabbix/mysql/data \
 /docker/zabbix/snmptraps \
 /docker/zabbix/mibs

Atenção: O volume permite adicionar novos arquivos de MIB (Management Information Bases). Esse volume não suporta subdiretórios, todos os arquivos de MIBs devem ser colocados em /docker/zabbix/mibs. Fonte: https://www.zabbix.com/documentation/current/en/manual/installation/containers

2) OPCIONAL – Crie o diretório de certificado para uso do Zabbix via HTTPS (isso é recomendado por questões de segurança).

sudo mkdir -p /docker/zabbix/ssl

Depois disso, copie o arquivo do certificado, da autoridade certificadora chave pública e privada para esse diretório.

3) Baixe as imagens Docker de alguns componentes do Zabbix. Altere os valores conforme as necessidades do seu ambiente.

ZABBIX_VERSION=ubuntu-6.4-latest

docker pull mysql:8
docker pull zabbix/zabbix-agent:${ZABBIX_VERSION}
docker pull zabbix/zabbix-proxy-sqlite3:${ZABBIX_VERSION}
docker pull zabbix/zabbix-server-mysql:${ZABBIX_VERSION}
docker pull zabbix/zabbix-web-nginx-mysql:${ZABBIX_VERSION}
docker pull zabbix/zabbix-snmptraps:${ZABBIX_VERSION}

4) Crie um rede virtual no Docker dedicada aos componentes do Zabbix. Altere os valores conforme as necessidades do seu ambiente.

ZABBIX_SUBNET="172.20.0.0/16"
ZABBIX_IP_RANGE="172.20.240.0/20"

docker network create --subnet ${ZABBIX_SUBNET} --ip-range ${ZABBIX_IP_RANGE} zabbix-net

docker network inspect zabbix-net

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

docker run -d --name zabbix-mysql \
 --restart always \
 -p 3306:3306 \
 -v /docker/zabbix/mysql/data:/var/lib/mysql \
 -e MYSQL_ROOT_PASSWORD=secret \
 -e MYSQL_DATABASE=zabbix \
 -e MYSQL_USER=zabbix \
 -e MYSQL_PASSWORD=zabbix \
 --network=zabbix-net \
 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 zabbix-mysql

6) Inicie o conteiner docker do Zabbix SNMP Trap. Altere os valores conforme as necessidades do seu ambiente.

docker run -d --name zabbix-snmptraps -t \
 --restart always \
 -p 162:1162/udp \
 -v /docker/zabbix/snmptraps:/var/lib/zabbix/snmptraps:rw \
 -v /docker/zabbix/mibs:/usr/share/snmp/mibs:ro \
 --network=zabbix-net \
 zabbix/zabbix-snmptraps:${ZABBIX_VERSION}

Para ver o log, use o seguinte comando.

docker logs -f zabbix-snmptraps

7) Inicie o conteiner docker do Zabbix-Server. Altere os valores conforme as necessidades do seu ambiente.

docker run -d --name zabbix-server \
 --restart always \
 -p 10051:10051 \
 -e DB_SERVER_HOST="zabbix-mysql" \
 -e DB_SERVER_PORT="3306" \
 -e MYSQL_ROOT_PASSWORD="secret" \
 -e MYSQL_DATABASE="zabbix" \
 -e MYSQL_USER="zabbix" \
 -e MYSQL_PASSWORD="zabbix" \
 -e ZBX_ENABLE_SNMP_TRAPS="true" \
 --network=zabbix-net \
 --volumes-from zabbix-snmptraps \
 zabbix/zabbix-server-mysql:${ZABBIX_VERSION}

Para ver o log, use o seguinte comando.

docker logs -f zabbix-server

8) Inicie o conteiner Zabbix-Web SEM HTTPS. Altere os valores conforme as necessidades do seu ambiente.

docker run -d --name zabbix-web \
 --restart always \
 -p 80:8080 \
 -e ZBX_SERVER_HOST="zabbix-server" \
 -e DB_SERVER_HOST="zabbix-mysql" \
 -e DB_SERVER_PORT="3306" \
 -e MYSQL_ROOT_PASSWORD="secret" \
 -e MYSQL_DATABASE="zabbix" \
 -e MYSQL_USER="zabbix" \
 -e MYSQL_PASSWORD="zabbix" \
 -e PHP_TZ="America/Sao_Paulo" \
 --network=zabbix-net \
 zabbix/zabbix-web-nginx-mysql:${ZABBIX_VERSION}

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 valores conforme as necessidades do seu ambiente.

OBS.: No fim deste tutorial, tem a seção EXTRA: Criando um certificado auto-assinado para uso com o Nginx, que pode ser utilizada como exemplo para configurar o uso do Nginx com HTTPS.

docker run -d --name zabbix-web \
 --restart always \
 -p 80:8080 -p 443:8443 \
 -v /docker/zabbix/ssl/ssl.crt:/etc/ssl/nginx/ssl.crt \
 -v /docker/zabbix/ssl/ssl.key:/etc/ssl/nginx/ssl.key \
 -v /docker/zabbix/ssl/dhparam.pem:/etc/ssl/nginx/dhparam.pem \
 -e ZBX_SERVER_HOST="zabbix-server" \
 -e DB_SERVER_HOST="zabbix-mysql" \
 -e DB_SERVER_PORT="3306" \
 -e MYSQL_ROOT_PASSWORD="secret" \
 -e MYSQL_DATABASE="zabbix" \
 -e MYSQL_USER="zabbix" \
 -e MYSQL_PASSWORD="zabbix" \
 -e PHP_TZ="America/Sao_Paulo" \
 --network=zabbix-net \
 zabbix/zabbix-web-nginx-mysql:${ZABBIX_VERSION}

Para ver o log, use o seguinte comando.

docker logs -f zabbix-web

9) Inicie o conteiner docker do Zabbix-Agent. Altere os valores conforme as necessidades do seu ambiente.

docker run -d --name zabbix-agent \
 --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.1" \
 -e ZBX_PASSIVESERVERS="${ZABBIX_IP_RANGE}" \
 zabbix/zabbix-agent:${ZABBIX_VERSION}

Para ver o log, use o seguinte comando.

docker logs -f zabbix-agent

10) OPCIONAL – Inicie o conteiner docker do Zabbix-Proxy. Altere os valores 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="zabbix-server" \
 -e ZBX_ENABLE_SNMP_TRAPS="true" \
 --network=zabbix-net \
 --volumes-from zabbix-snmptraps \
 zabbix/zabbix-proxy-sqlite3:${ZABBIX_VERSION}

Para ver o log, use o seguinte comando.

docker logs -f zabbix-proxy

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

Lembre-se de cadastrar o Zabbix Proxy e o Host com o Zabbix Agent instalado.

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

docker stop nome-conteiner

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

docker start nome-conteiner

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

docker stop nome-conteiner
docker rm nome-conteiner

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

https://scaron.info/blog/improve-your-nginx-ssl-configuration.html

http://zabbixbrasil.org/?page_id=7

https://blog.zabbix.com/zabbix-docker-containers/7150/

https://www.youtube.com/watch?v=ScKlF0ICVYA

https://www.zabbix.com/documentation/current/manual/installation/containers

16) 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. Lembrando que os dados do banco são persistidos no diretório /docker/zabbix/mysql/data do Docker Host no qual o conteiner está sendo executado.

docker exec zabbix-mysql sh -c 'exec mysqldump zabbix -uroot -p"MYSQL_ROOT_PASSWORD"' > /home/zabbix.sql

17- OPCIONAL – Se precisar restaurar o dump, siga os passos abaixo.

Remova o banco antigo e crie-o novamente.

docker exec -i -t zabbix-mysql /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 valores conforme as necessidades do seu ambiente.

docker stop zabbix-web
docker stop zabbix-server

docker exec -i zabbix-mysql /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 zabbix-mysql sh -c 'exec /usr/bin/mysql -u root --password="MYSQL_ROOT_PASSWORD" zabbix'

docker start zabbix-server
docker start zabbix-web

EXTRA: Criando um certificado auto-assinado para uso com o Nginx

Instale o pacote opensssl.

No Debian/Ubuntu:

sudo apt-get -y install openssl

No CentOS:

sudo yum install -y openssl

Agora crie uma chave privada RSA. Execute os comandos abaixo. Será necessário definir uma senha para a chave privada.

sudo mkdir -p /docker/zabbix/ssl
cd /docker/zabbix/ssl
sudo openssl genrsa -aes256 -out ssl.key 4096

sudo cp ssl.key ssl.key.org
sudo openssl rsa -in ssl.key.org -out ssl.key

sudo chmod 755 ssl.key
sudo rm ssl.key.org

Agora crie uma requisição de assinatura de certificado com validade para 1000 anos (ou 365000 dias). Execute o comando abaixo.

openssl req -new -sha256 -days 365000 -key ssl.key -out ssl.csr

Durante a execução do comando acima será solicitado a senha da chave privada e os dados do certificado e que serão exibidos no navegador do usuário. Veja o exemplo abaixo.

  • Country Name (2 letter code) [GB]:BR
  • State or Province Name (full name) [Berkshire]:Estado
  • Locality Name (eg, city) [Newbury]:Cidade
  • Organization Name (eg, company) [My Company Ltd]: Minha empresa LTDA
  • Organizational Unit Name (eg, section) []:Meu setor de trabalho
  • Common Name (eg, your name or your server’s hostname) []:nomeservidor.empresa.com.br
  • Email Address []:email@empresa.com.br
  • Please enter the following ‘extra’ attributes
  • to be sent with your certificate request
  • A challenge password []: (deixe vazia, apertando ENTER)
  • An optional company name []: (deixe vazia, apertando ENTER)

Agora assine o certificado.

sudo openssl x509 -req -days 3650 -sha256 -in ssl.csr -signkey ssl.key -out ssl.crt

Usando, o comando acima, você estará assinando o certificado com validade de 1000 anos (aproximadamente 365000 dias). Se quiser mudar este tempo, altere a quantidade de dias no parâmetro -days.

Agora crie um par de chaves Diffie-Hellman com o seguinte comando:

sudo openssl dhparam -out dhparam.pem 4096

82 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

  • Boa tarde Aécio, parabéns pelo ótimo tutorial. Estamos iniciando a criação de um ambiente de monitoramento usando zabbix e gostaria de saber se é uma boa prática criar um ambiente de testes do Zabbix usando docker? Meu objetivo principal não seria comparar performance mas sim pode testar configurações em um outro ambiente.

  • Boa noite Aécio, primeiramente muito obrigado, seu conteúdo foi muito esclarecedor. Estou trabalhando com a versão 4.4 do zabbix, mas estou rodando os containers em um swarm, sendo assim meu container server, front e db estão sendo executado em hosts diferentementes. Até aí não tenho problemas todas os containers estão se comunicando normalmente pelo stack contudo não consigo monitorar o host onde o container do server está sendo executado, consegue me dar uma luz de como posso tratar isso?

  • Bom dia, Luiz!

    Muito obrigado pelo feedback. Que bom saber que lhe foi útil.

    Neste mesmo tutorial de instalação do Zabbix com Docker, eu estou dando um exemplo de como monitorar o host que hospeda os conteineres através da execução do Zabbix Agent também em Docker. Lembre-se de informar o endereço IP do host no parâmetro de inicialização. Você pode passar mais de um IP no parâmetro, separando-os por vírgula.

    Um coisa que percebi olhando os logs do Zabbix Agent é que precisei informar também o IP do conteiner do Zabbix server… o problema é que o IP do conteiner do Zabbix Server muda quando o conteiner for descartado.

    Mas a princípio a solução é essa. Se tiver outra, compartilha comigo.

    Abraço.

  • Boa Tarde Aécio,
    Uma dúvida, você tem algum post sobre depois de subir o zabbix server de como configurar o host para monitorar meus conteiners do Docker, estou com problemas de encontrar material para me auxiliar nessa tarefa!

  • Bom dia Aécio,

    Referente a questão da integração do zabbix com o glpi, eu desisti de fazer por script depois que conheci a ferramenta que a Verdanadesk disponibiliza, o Vconnector. Ele é gratuito e ainda tem integração com o telegram.
    https://portal.verdanadesk.com/vconnector
    ========================================================

    Volto aqui para buscar uma outra ajuda, dessa vez quanto a atualização do Zabbix. Atualmente uso a versão 4.2.1 e gostaria de atualizar para a versão 4.4.
    Bastaria para os containers, exceto o mysql, excluir as imagens e refazer os passos, exceto o do mysql?

    Bastaria eu parar todos os containers, excfeto

  • Boa noite, Madson!

    Sim, para atualizar o Zabbix rodando em conteiners, o procedimento é baixar as novas imagens Docker do Zabbix, remover os conteineres atuais (parar e remover) e iniciar os novos conteineres referenciando as novas imagens Docker do Zabbix. O conteiner do MySQL não precisa ser parado.

    Recomendo testar os procedimentos de atualização num ambiente de teste/homologação, testar tudo para ver se não haverá problemas, documentar o que será feito e só depois fazer em produção. 🙂

    Abraço e fica com Deus.

  • Bom dia, Aécio!
    Vc indicaria usar toda a solução Zabbix em docker para monitoração de um grande ambiente?

  • Bom dia, Tales!

    Independente do tamanho do ambiente, eu indico usar Zabbix em Docker. E a própria Zabbix SIA indica o uso em produção. Veja os links abaixo:

    * https://twitter.com/zabbix/status/1132947004668207106
    * https://blog.zabbix.com/zabbix-docker-containers/7150/
    * https://www.youtube.com/watch?v=ScKlF0ICVYA
    * https://www.slideshare.net/aeciopires/zabbix-grafana-e-os-conteineres-docker
    * https://github.com/zabbix/zabbix-docker
    * https://share.zabbix.com/virtualization/docker
    * https://hub.docker.com/u/zabbix/
    * https://www.zabbix.com/documentation/current/manual/installation/containers

    Eu sei que é mais complexo, mas eu tenho experiência em manter ambientes com o Zabbix com instalado via Docker, pacote compilado a partir do código fonte, a partir de pacotes .deb/.rpm e até usando Puppet, Ansible e SaltStack e vi vantagens usando conteineres Docker porque simplifica o processo de instalação, atualização, rollback, testes e throubleshooting.

    Abraço e fica com Deus.

  • Olá Aécio, ótima publicação!
    Sempre te acompanho e sigo seus passos em relação ao zabbix e grafana. Até o zabbix 4.4 tudo estava funcionando normalmente, nessa versão 5.0 não consigo abrir a web do zabbix, notei que não está conectado com o mysql apresentando essa mensagem “mysqladmin: [Warning] Using a password on the command line interface can be insecure.**** MySQL server is not available. Waiting 5 seconds…

    Copiei e colei tudo que vc postou e não funciona, o que vc acha que estou fazendo de errado, pois copie e coloei do jeito que está por aí, alterando só o ip do servidor.

  • Olá, Tiago!

    Muito obrigado! Que bom que o conteúdo é útil e lhe ajuda.

    Infelizmente ainda não tive este erro, mas realmente indica que há algum problema ao subir o conteiner do banco de dados. Não sei se notou a diferença, mas ao subir o banco do MySQL 8, é necessário informar uns parâmetros adicionais referentes ao character-server e collection-server, que no tutorial do Zabbix 4.4 e versões anteriores do MySQL não eram necessários. Tenta executar novamente num ambiente zerado… refiz os passos aqui e funcionou comigo.

    Como alternativa, veja o tutorial de instalação no manual https://www.zabbix.com/documentation/current/manual/installation/containers

    ou este usando pacotes no CentOS 8: http://zabbixbrasil.org/files/Tutorial_Zabbix_5.0_CentOS_8_Portugues_via_pacote_v4.pdf

    Abraço.

  • Poderia fazer um tutorial assim também mas utilizando o postgresql + nginx?
    Excelente seu tutorial, obrigado!

  • Oi, Wilian!

    Obrigado pelo Feedback. Fiz este tutorial apenas com o objetivo de demonstrar como é a instalação do Zabbix com Docker, mas os cenários de instalação são bem variados e não tenho a pretensão de documentar todos. Pesquisa um pouco e tenta fazer. Dando certo compartilha os resultados aqui nos comentários que atualizarei o tutorial e te darei os créditos! 🙂 Será útil para ajudar outras pessoas.

    Abraço e fica com Deus.

Deixe um comentário

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