Monitorando Docker com Zabbix 5 e Zabbix Agent2

bernardolankheet
Zabbix Brasil
Published in
5 min readJun 1, 2020

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.

Template App Docker

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…

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

--

--