O monitoramento eficaz da infraestrutura de TI é uma necessidade crítica para qualquer organização que deseje manter o desempenho e a disponibilidade de seus sistemas. O Zabbix é uma plataforma Open Supply amplamente utilizada para monitorar servidores, redes e serviços, oferecendo recursos poderosos de coleta de dados e geração de alertas. Além disso, a combinação do Zabbix com outras ferramentas, como MySQL para armazenamento dos dados, Grafana para visualização de métricas e Traefik para gerenciamento de tráfego, pode criar um ambiente de monitoramento completo e altamente escalável.
Neste tutorial, irei guiá-lo pelo processo de instalação do Zabbix Server utilizando o MySQL como Banco de Dados, o Grafana para criação de Dashboards robustos para analisar métricas geradas pelo Zabbix Server, e o Traefik para gerenciar o tráfego das URLs para os respectivos serviços, além da geração do certificado utilizando o Let’s Encrypt, tudo dentro de contêineres Docker. Essa abordagem facilita a implantação e a manutenção do sistema de monitoramento, permitindo que você tenha um ambiente configurado rapidamente. Vamos abordar cada etapa do processo, desde a configuração do Docker até a integração das ferramentas, garantindo que você tenha uma solução robusta de monitoramento em funcionamento. Put together-se para explorar o mundo do monitoramento de sistemas de forma eficaz e eficiente.
Ambiente
Para está implementação, estou utilizando um servidor Linux com a distribuição Ubuntu na versão 22.04.
O servidor que utilizei possui a seguinte configuração: 2 vCPUs, 2GB RAM e um disco SSD de 30GB.
Para que nosso servidor seja acessível pela web, e para que o nosso Traefik gere o certificado through Let’s Encrypt, precisamos possuir um endereço IP público e precisamos liberar as portas 80 e 443 para a web.
Também é necessário possuirmos um registro DNS para criarmos as URLs para o Zabbix Server Net e para o nosso Grafana.
Disponibilizei o Docker Compose no seguinte repositório do GitHub: https://github.com/alfredotavio/zabbix-grafana-docker
Imagens utilizadas:
Estrutura:
.
├── env
│ ├── db.env
│ ├── grafana.env
│ ├── traefik.env
│ ├── zbx-rpt.env
│ ├── zbx-srv.env
│ └── zbx-web.env
├── .env
└── docker-compose.yml
Não irei abordar a instalação do Docker Engine, caso ainda não saiba realizar a instalação, consulte este outro publish:
https://style-tricks.com/alfredotavio/como-instalar-o-docker-engine-no-linux-5092
Etapa 01 – Criando os registro DNS
Antes de tudo, vamos definir e criar as URLs que iremos utilizar para o Zabbix Server Net e para o nosso Grafana.
Irei utilizar o domínio alfredocastro.com.br, defini a URL zabbix.alfredocastro.com.br para o Zabbix Server e a URL grafana.alfredocastro.com.br para o Grafana.
Acesse o seu gerenciador de registros DNS do seu domínio e crie dois registro do tipo A colocando como valor o endereço IP público do seu servidor.
Para consultar a propagação do registro criado, consulte o web site: WhatsMyDNS
Etapa 02 – Clonando o repositório do Docker Compose
Após realizar a instalação do Docker Engine, vamos dar seguimento com a nossa implementação.
Execute os seguintes comandos para clonar nosso Docker Compose para dentro do nosso servidor:
cd /choose
git clone https://github.com/alfredotavio/zabbix-grafana-docker.git
NOTA: Utilizei o diretório /choose do Linux, caso queria você pode alterar para outro diretório de sua escolha.
Execute os comandos abaixo para criar a estrutura necessária para o Traefik gerar os certificados:
cd /choose/zabbix-grafana-docker
mkdir letsencrypt/
contact letsencrypt/acme.json
chmod 600 letsencrypt/acme.json
Etapa 03 – Definindo as variáveis
Primeiro vamos definir as variáveis com as URLs de acesso, edite o arquivo .env na raiz do projeto e altere as variáveis ZABBIX_URL para a URL do Zabbix Server e a GRAFANA_URL para a URL do Grafana, altere a variável ACME_EMAIL para um endereço de e-mail seu:
vim /choose/zabbix-grafana-docker/.env
Agora devemos definir as variáveis do Banco de Dados MySQL. Edite o arquivo db.env dentro do diretório env. Irei alterar apenas as variáveis MYSQL_ROOT_PASSWORD e MYSQL_PASSWORD, essas variáveis outline a senha para o usuário root e a senha para o usuário da variável MYSQL_USER.
vim /choose/zabbix-grafana-docker/env/db.env
NOTA: Não irei alterar as demais variáveis pois irei subir apenas para demonstração. Recomendo você ler a documentação do Zabbix para definir as variáveis de acordo com o cenário do seu ambiente a ser monitorado.
Etapa 04 – Executando o Docker Compose
Para subirmos nosso ambiente, basta executarmos o seguinte comando dentro do diretório raiz onde está nosso docker-compose.yml:
docker compose up -d
NOTA: O Docker irá fazer o obtain e o provisionamento de todas as imagens. Aguarde alguns minutos até que as imagens concluam a primeira configuração.
Etapa 05 – Acessando o ambiente
Acesse a URL do Zabbix Server que definimos na primeira etapa, será solicitado um usuário e senha para acessar, por padrão o usuário é o “Admin” e a senha é “zabbix”.
Após o primeiro login, altere a senha do usuário Admin o quanto antes para evitar qualquer acesso indevido, para isso, clique em “Person settings > Profile” no campo inferior esquerdo.
Digite a nova senha em “Password” e repita em “Password (as soon as once more)”, em seguida clique em “Replace”.
Agora acesse a URL do Grafana que definimos na primeira etapa, será solicitado um usuário e senha para acessar, por padrão o usuário é o “admin” e a senha é “admin”.
Em seguida será solicitado a alteração da senha, digite a senha no campo “New password” e repita em “Affirm new password”, em seguida clique em “Submit”.
Etapa 05 – Integrando o Grafana com o Zabbix Server
Para realizar a integração do Grafana com o Zabbix Server, é necessário a instalação de um plugin, em nosso arquivo Docker Compose está configurado para realizar a instalação automaticamente.
Antes de configurar o plugin, devemos acessar o Zabbix Server e criar um usuário para realizar a integração, toda a comunicação entre o Grafana e o Zabbix Server é feita por API e o Grafana irá utilizar esse usuário para acessar a API.
Clique em “Administration > Customers” na barra lateral esquerda.
Clique em “Create consumer” no canto superior direito.
Preencha as informações para a criação do usuário:
Username: grafana
Identify: Grafana
Final title: Person
Teams: Zabbix directors
Password: DEFINA-UMA-SENHA
Password (as soon as once more): DEFINA-UMA-SENHA
Altere para a aba “Permissions”.
Position: Admin function
Acesse o Grafana, clique nos três tracinhos no canto superior esquerdo, clique em “Administration > Plugins”.
Pesquise por “zabbix”, ele irá mostrar o plugin “Zabbix – By Alexander Zobnin” já instalado, clique no plugin.
No canto superior direito, clique no botão “Allow”.
No menu lateral esquerdo, clique em “Information sources”.
Clique no botão “Add knowledge supply”.
Filtre por “zabbix”, em seguida clique no plugin do “Zabbix”.
Faça as seguintes configurações:
URL: https://zabbix.alfredocastro.com.br/api_jsonrpc.php
Username: grafana
Password: SENHA-DEFINIDA-PARA-O-USUÁRIO-GRAFANA
Clique em “Save & take a look at”.
Se tudo ocorreu conforme o esperado, o Grafana exibirá uma mensagem contendo a versão do Zabbix API.
Etapa 06 – Instalando o Zabbix Agent no próprio servidor
Ao logar no Zabbix Server Net, você pode perceber que possui um alerta falando que o Zabbix Agent no host Zabbix server não está disponível.
Para corrigir esse alerta, devemos instalar o Zabbix Agent em nosso servidor, onde o nosso Docker está. Acesse o servidor through SSH e siga os procedimentos abaixo:
Adicione o repositório do Zabbix Launch 6.0, execute os seguintes comandos:
cd /tmp
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/fundamental/z/zabbix-release/zabbix-release_latestpercent2Bubuntu22.04_all.deb
dpkg -i zabbix-release_latest+ubuntu22.04_all.deb
apt-get replace
apt-get set up zabbix-agent -y
Execute os comandos abaixo para realizarmos a configuração do arquivo zabbix_agentd.conf:
cd /and so on/zabbix/
mv zabbix_agentd.conf zabbix_agentd.conf.authentic
echo "##### Zabbix Agent #####" >> /and so on/zabbix/zabbix_agentd.conf
cat zabbix_agentd.conf.authentic | grep -Ev '^#|^$' >> zabbix_agentd.conf
sed -i 's/127.0.0.1/10.10.0.11/g' /and so on/zabbix/zabbix_agentd.conf
sed -i 's/Zabbix server/Zabbix server/g' /and so on/zabbix/zabbix_agentd.conf
echo "Timeout=15" >> /and so on/zabbix/zabbix_agentd.conf
echo "DebugLevel=3" >> /and so on/zabbix/zabbix_agentd.conf
systemctl allow zabbix-agent
service zabbix-agent restart
NOTA: Para o Zabbix Agent do servidor Docker, devemos adicionar o IP privado do container chamado zabbix-server, de acordo com o nosso docker-compose.yml esse IP é o 10.10.0.11.
Agora devemos alterar o IP dentro do Zabbix Server Net, acesse a URL, faça login e clique em “Configuration > Hosts” na barra lateral esquerda.
Clique no nome do host “Zabbix server”.
Altere o “IP handle” de “127.0.0.1” para o endereço IP privado do servidor Docker, você pode visualizar o endereço IP privado executando o comando “ifconfig” ou “ip addr”, em seguida clique em “Replace”.
Após alguns instantes o alerta será marcado com o Standing “RESOLVED”.
Troubleshooting – Docker Logs
Se por algum motivo você está enfrentado algum problema para subir o ambiente em Docker, você pode utilizar o comando abaixo para verificar os logs dos containers e com isso encontrar um norte para a resolução.
cd /choose/zabbix-grafana-docker/
docker compose logs -f
Espero tê-lo ajudado! Se houver alguma dúvida, não hesite em entrar em contato.