Monitorando Docker com Zabbix 5 e Zabbix Agent2
Com a chegada do novo Zabbix agente escrito em GO (suportado como beta desde da 4.4), trouxe o suporte default de monitoramento de Docker com o Zabbix na versão 5. Neste pequeno artigo demonstro de maneira rápida e pratica como podemos realizar este monitoramento.
Ambiente utilizado:
Centos 7
Docker: 19.03.7
Obs: Todos os passos realizados neste artigo, foram feitos em laboratórios. Para produção, sugiro reproduzir várias vezes este, consumir bastante as documentações e verificar as práticas de segurança.
Instalado o Agente via Pacote de Instalação
Instale o repo para o pacote do Zabbix Agent 2 no seu S.O.
sudo rpm –ivh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
Atualize os repositórios do sistema
yum update
Instale o pacote neste momento do Zabbix-agent2
yum install zabbix-agent2
Realize a configuração conforme necessário do zabbix_agent2.conf, sim para o novo agente há um arquivo de configuração com nome diferente do agente antigo do Zabbix.
vi /etc/zabbix/zabbix_agent2.conf
Feito as configurações necessárias, inicie o agente
systemctl start zabbix-agent2
Verifique se está iniciado
systemctl status zabbix-agent2
Se tiver tudo OK, habilite-o no sistema.
systemctl enable zabbix-agent2
Zabbix Agent 2
Agora com o agente instalado, podemos começar brincando com alguns comandos. As sintax dos comandos do agente continuam as mesmas da outra versão, quase não teve mudança
zabbix_agent2 –help
Agora realize um teste com a chave agent.version para obter a versão instalada do agente.
zabbix_agent2 -t agent.versionagent.version [s|5.0.1]
Você também pode utilizar a opção –P para listar todos os itens possíveis de serem monitorados pelo agente.
O que pude notar neste novo agente, além de ser escrito em linguagem GO com dito anteriormente…, recebeu outro nome (chamado de zabbix-agent2), também possui outro arquivo de configuração (zabbix_agent2.conf), devido a isto, você pode executar ambos ao mesmo tempo, basta utilizar outra porta.
Agora partindo para o arquivo de configuração (zabbix_agent2.conf) notei alguns novos parâmetros que vou descrever abaixo:
- DenyKey É possível negar a execução de uma chave direto no arquivo de configuração, por default vem system.run.
- EnablePersistentBuffer Habilitar um pequeno buffer no próprio agente. O agente irá guardar dados da coleta até o momento em que a comunicação voltar com o server.
- PersistentBufferPeriod e PersistentBufferFile Local do arquivo e período para o Buffer.
- LoadModulePath e LoadModule Configuração de diretório e modulo personalizados para o agent2.
- Plugins.SystemRun……. Plugins.Redis…… Plugins.Mencached…… Plugins.Docker…… Plugins.Postgree….. São alguns parâmetros novos para os novos plug-ins do agente2.
Por fim, basta cadastrar o host no Zabbix e vincular um template seguindo os passos Default da ferramenta.
Zabbix Agent2 em Docker
Se iremos falar de monitoramento de docker, porque não rodar o agente em como um container? Já temos esta possibilidade também.
Realize o pull da imagem para seu repositório interno.
docker pull zabbix/zabbix-agent2
Depois basta iniciar o container.
docker run --name zabbix-agent --link zabbix-server:zabbix-server --privileged -d zabbix/zabbix-agent2:latest
A opção privileged é justamente para que o agente possa ter recurso as informações locais do docker host.
Monitorando o Docker
Com o agent2 instalado no Docker host. Chegamos a hora de começar a brincadeira com o Template do Docker.
Verifique se o seu Zabbix 5 já possui o template importado, se não tiver, poderá ser realizado o download a partir do repositório do Git da Zabbix SAI, basta clicar no link abaixo. Caso já tenha, pode vincular ao seu host.
Após a realização do Download e importar no Zabbix. Vincule ao seu host docker, recém-criado no Zabbix e basta aguardar as coletas.
É possível testar as principais chaves com o zabbix-agent, basta executar:
Zabbix_agent2 -t docker.info ou Zabbix_agent2 –t docker.images
How it works?
Mas ai surge uma pergunta básica …como o Template coleta?
Nesse resultado acima das coletas de imagens, podemos ver que a saída é formato json. O template primeira coleta os itens de Image, Containers, Info e Data Usage de forma Raw e depois utiliza pre-processamento com vários JSON Path para capturar a informação desejada.
Este JSON é uma consulta realizada direto no Daemon do Docker, sua API interna para administração, automação, orquestração e por aí vai.
Cannot fetch data.
Legal, cheguei até aqui, fiz tudo que pediu, mas não funciona, itens não são coletados, ferramenta não funciona, vou deixar isso de lado….. Calma jovem, isso pode ocorrer devido a dois fatores:
1 - Usuario zabbix sem permissão para consultar dados do Docker;
2- API do Docker não está exposta para consulta.
Vou mostrar como prosseguir em ambos os casos, realize ambas modificações separadas e teste para ver qual poderá ser seu caso…
- Incluir o usuário zabbix no grupo docker, isso dará permissão ao usuario que executa o agente a ter acesso as informações dos recursos do daemon do docker.
usermod -aG docker zabbix
Reinicie o serviço do zabbix-agent2 e verifique se as coletas.
service zabbix-agent2 restart
Verifique se será coletado, caso não, passe para o próximo passo.
2. No seu console e de utilize o CURL para verificar a conexão com a porta 4243 (porta da api no centOS que estou usando no laboratório).
curl http://localhost:4243/versioncurl: (7) Failed connect to localhost:4243; Conexão recusada
Receberá que a conexão foi recusada.
Para expormos a porta TCP, precisará fazer uma pequena alteração na chamada do Daemon no Linux. Arquivo docker.service.
vi /lib/systemd/system/docker.service
Precisará acrescentar na Linha ExecStart= a opção abaixo.
-H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock
Altere de:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Para:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock
Será necessário recarregar o deamon do Sistema e depois reiniciar o serviço do docker.
sudo systemctl daemon-reloadsudo service docker restart
Agora se utilizarmos o curl novamente, veremos que começará a retornar as informações em formato json.
Reinicie o serviço do zabbix-agent2 e verifique se as coletas.
service zabbix-agent2 restart
No frontend já podemos verificar os itens coletados.
Por hoje é só pessoal. Ate a próxima!!!!
Elogios, criticas, recomendações, deixe um comentário.
Referencias: