Instalando o Zabbix via Docker

Atualizado em: 02 de outubro de 2018

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.0
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

 

12 ideias sobre “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.

Deixe uma resposta

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