Instalando o Zabbix via Docker

Atualizado em: 12 de janeiro 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.2
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

53 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

Deixe uma resposta

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