Não dá para tomar decisões sem dados, certo? Por isso mesmo é de extrema importância o monitoramento de suas soluções tecnológicas! Não seja surpreendido por incidentes em momentos inoportunos, previna-se deles, e mais, resolva-os antes que ocorram! Parece mágica? Mas não é. Tudo está relacionado ao monitoramento!
Neste post irei falar sobre monitoramento utilizando a ferramenta mais utilizada para esta finalidade, o Zabbix. Montaremos uma stack completamente funcional utilizando um ambiente com containers Docker, então, não perca tempo e venha aprender mais sobre monitoramento!
Mas afinal, o que é monitoramento?
O monitoramento é a análise contínua de uma série de ativos tecnológicos para detectar e corrigir quaisquer problemas de desempenho, muitas vezes antes mesmo de acontecerem. Envolve a coleta de estatísticas e métricas para determinar a qualidade dos serviços oferecidos pela organização.
Este processo ajuda a apontar a localização exata do problema ou mesmo provar onde não é o problema. O monitoramento contínuo pode ajudá-lo a identificar possíveis problemas antes que eles ocorram. Isso significa que você pode resolver problemas proativamente antes que eles cheguem aos usuários. Por exemplo, você pode detectar e solucionar problemas como lentidão da rede antes que isso afete as operações comerciais.
Com a pandemia fazendo com que muitos funcionários trabalhem em casa, é vital garantir que sua rede de negócios funcione de maneira ideal. O monitoramento remoto de rede pode garantir que sua rede não tenha problemas de desempenho e seja segura o suficiente para que os funcionários acessem os recursos da empresa.
Porque utilizar o Zabbix?
Segundo a documentação oficial do Zabbix, disponível para acesso aqui, O Zabbix foi criado por Alexei Vladishev, e atualmente é mantido e suportado pela Zabbix SIA. Trata-se de uma solução de nível enterprise, de código aberto e com suporte a monitoração distribuída.
O Zabbix é um software que monitora vários parâmetros da rede, dos servidores e da saúde dos serviços. Utiliza-se de um mecanismo flexível de notificação que permite configurar alertas por e-mail para praticamente qualquer evento. As notificações permitem que se reaja rapidamente à problemas no ambiente. O Zabbix oferece excelentes recursos de relatórios e visualização de dados armazenados. Isso faz com que o Zabbix seja a ferramenta ideal para planejamento de capacidade.
Zabbix é livre de custos. É desenvolvido e distribuído através da licença pública GPLv2. Isso garante que seu código-fonte seja distribuído e esteja disponível para o público em geral.
Por conta disso o utilizaremos neste laboratório. Mas, é importantíssimo ressaltar que eu mesmo já implementei o Zabbix em ambientes de risco com números altíssimos de hosts e itens monitorados, fazendo com que ele atuasse na linha de frente de operações milionárias.
Entendendo a solução
O código aqui utilizado está disponível em meu gitlab, no link:
https://gitlab.com/sg-wolfgang/zabbix-stack/-/tree/main
Vamos comentar agora cada trecho do código, para compreendermos a solução e implementar as modificações necessárias.
version: '3.7'
services:
mysql:
container_name: mysql
hostname: mysql
image: mysql:8.0
networks:
- network-zabbix
ports:
- '3306:3306'
volumes:
- zabbix-var-lib-data:/var/lib/data
- zabbix-var-lib-mysql:/var/lib/mysql
command: ['mysqld', '--character-set-server=utf8', '--collation-server=utf8_bin', '--default-authentication-plugin=mysql_native_password']
environment:
- MYSQL_ROOT_PASSWORD=Senha123
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=Senha123
Podemos perceber que na primeira linha declarei a versão do docker compose utilizada. Após isso iniciamos a criação dos serviços. O primeiro serviço criado é o banco de dados MySQL para que o Zabbix possa se conectar e gerenciar os dados. Chamo a atenção para a linha command: ['mysqld', '--character-set-server=utf8', '--collation-server=utf8_bin', '--default-authentication-plugin=mysql_native_password']
que nos trás as configurações necessárias para que o Zabbix utilize a base de dados no formato correto.
Outro ponto importante são as seguintes linhas:
- MYSQL_ROOT_PASSWORD=Senha123
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=Senha123
Estas são as credenciais que serão utilizadas. Estas informações se repetem ao longo do arquivo, visto que outros containers precisarão de autenticar neste primeiro.
Observação importante!
Altere as credenciais para utilizar o laboratório em seu ambiente!
O próximo serviço será o “motor”, o Zabbix Server. Vamos analisar o seguinte bloco de código:
zabbix-server:
container_name: zabbix-server
hostname: zabbix-server
image: zabbix/zabbix-server-mysql:latest
networks:
- network-zabbix
links:
- mysql
restart: always
ports:
- '10051:10051'
volumes:
- zabbix-alertscripts:/usr/lib/zabbix/alertscripts
environment:
- DB_SERVER_HOST=mysql
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=Senha123
depends_on:
- mysql
Aqui podemos observar as credenciais para conexão no banco de dados, e também que existe um bloco onde é declarado que o Zabbix Server depende do mysql
para funcionar. Também temos o mapeamento de um volume para persistir os dados de alerta personalizados. O próximo bloco trata do zabbix frontend, o componente responsável pela “carinha bonita” do zabbix:
zabbix-frontend:
container_name: zabbix-frontend
hostname: zabbix-frontend
image: zabbix/zabbix-web-apache-mysql:latest
networks:
- network-zabbix
links:
- mysql
restart: always
ports:
- '8080:8080'
- '8443:8443'
environment:
- DB_SERVER_HOST=mysql
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=Senha123
- PHP_TZ=America/Sao_Paulo
depends_on:
- mysql
Podemos perceber mais uma vez as credenciais, e a declaração de dependência do banco de dados. Aqui ressalto as portas mapeadas:
ports:
- '8080:8080'
- '8443:8443'
Como podemos perceber, para acessar o zabbix em nosso ambiente acessaremos a porta 8080
ou 8443
, para http
e https
respectivamente.
O último serviço declarado foi o do Agente Zabbix, responsável por coletar as métricas do servidor local.
zabbix-agent:
container_name: zabbix-agent
hostname: zabbix-agent
image: zabbix/zabbix-agent2:latest
user: root
networks:
- network-zabbix
links:
- zabbix-server
restart: always
privileged: true
volumes:
- /var/run:/var/run
ports:
- '10050:10050'
environment:
- ZBX_HOSTNAME=Zabbix server
- ZBX_SERVER_HOST=zabbix-server
Aqui temos o nome do servidor declarado, também temos as dependências do container.
O último e não menos importante bloco de código trata do mapeamento e criação dos volumes e redes utilizados pelos containers:
networks:
network-zabbix:
driver: bridge
volumes:
zabbix-var-lib-data:
zabbix-var-lib-mysql:
zabbix-alertscripts:
Levantando o ambiente de monitoramento
Aqui utilizarei um computador com OpenSUSE instalado, bem como o Docker e Docker Compose. Vou deixar alguns links que poderão te ajudar a preparar o ambiente:
- Como instalar o Linux: https://youtu.be/OybdAYBopbw
- Como instalar o Docker: https://docs.docker.com/engine/install/
- Como instalar o Docker-compose: https://docs.docker.com/compose/install/
Você também precisará do git instalado.
Vamos colocar a mão na massa. O primeiro passo é clonar o repositório que disponibilizei com o arquivo:
git clone https://gitlab.com/sg-wolfgang/zabbix-stack.git
Depois, entre no diretório clonado:
cd zabbix-stack
Agora execute o ambiente:
docker-compose up -d
Você verá algo como:
docker-compose up -d
Creating mysql ... done
Creating zabbix-server ... done
Creating zabbix-frontend ... done
Creating zabbix-agent ... done
Aguarde alguns instantes, pois o Zabbix após a criação dos containers irá popular a base de dados. Após aguardar podemos acessar o ambiente no link http://127.0.0.1:8080/. Veremos algo como:
Para se logar e testar, utilize as credenciais:
Username: Admin
Password: zabbix
Você verá o seguinte painel:
Caso tenha chegado até aqui, parabéns! Você tem um ambiente de monitoramento funcional com zabbix. Os próximos passos são adicionar novos hosts e iniciar agora mesmo o monitoramento de suas soluções!
Se houver qualquer dúvida não deixe de me falar nos comentários. Compartilhe este post com todos, e sucesso!
Abraço!
Olá Samuel, tudo bem?
Que bom encontrei seu artigo, vai me ajudar bastante, montei um ambiente de lab para fazer os testes, assim que aprimorar quero botar pra rodar em outro ambiente maior.
Porém, fiz o procedimento conforme orientado, mas o Zabbix Server não inicializa, fica reiniciando constantemente, segue erro gerado no log:
using configuration file: /etc/zabbix/zabbix_server.conf
cannot use database “zabbix”: its “users” table is empty (is this the Zabbix proxy database?)
O que estou fazendo de errado?
Agradeço a iniciativa ao compartilhar seus conhecimentos e ajudar a galera, parabéns!
Eduardo Almeida
Saudações Eduardo, tudo bem?
Valeu demais meu caro, fico feliz que o conteúdo tem sido útil pra ti!
Sobre o erro que você está enfrentando, aparentemente é um problema com o container do Banco de Dados. Esse container subiu normalmente?