Neste artigo, irei cobrir o monitoramento de containers em Docker com o Zabbix. Nós usaremos o template oficial Docker by Zabbix agent 2 para fazer as coisas mais simples possíveis. O link para download do template e os passos para configurá-lo podem ser encontrados na página de Integrações do Zabbix.

Se você necessitar de um guia visual, eu te convido para assistir ao meu vídeo sobre esse tópico.

Importando o template oficial para Docker

Importando o template oficial para Docker

Já que faremos uso do template oficial Docker by Zabbix agent2, primeiro, nós precisamos nos certificar que o template está disponível em nossa instância Zabbix. O template está disponível para o Zabbix nas versões 5.0, 5.4 e 6.0. Se você não conseguir encontrar esse template em Configurações – Templates, é possível que você não tenha importado ele em seu ambiente após realizar o upgrade do Zabbix para uma das versões previamente citadas.

Lembre-se de que o Zabbix não modifica ou importa quaisquer templates durante o processo de upgrade, então teremos que realizar a importação manualmente. Se for esse o caso, simplesmente faça o download na página do git oficial do Zabbix (ou através do link na introdução) e importe para sua instância Zabbix utilizando o botão “Importar” na seção Configurações – Templates.

Instalando e configurando Zabbix agent2

Antes de começarmos configurando nosso host, precisamos realizar a instalação do Zabbix agent2 e configurá-lo de acordo com as diretrizes do template. Siga os passos na seção de download no website da Zabbix e instalar o pacote do zabbix-agent2.

Sinta-se livre para usar qualquer outro método de deployment que você quiser (como compilar o agent a partir do source files).

Instale o repositório de pacotes Zabbix:

rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpm

Instale o pacote Zabbix agent2:

dnf install zabbix-agent2

Configure o parâmetro Server preenchendo com com o endereço de seu Zabbix server/proxy:

vi /etc/zabbix/zabbix_agent2.conf
### Option: Server
# List of comma delimited IP addresses, optionally in CIDR notation, or DNS names of Zabbix servers and Zabbix proxies.
# Incoming connections will be accepted only from the hosts listed here.
# If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally
# and '::/0' will allow any IPv4 or IPv6 address.
# '0.0.0.0/0' can be used to allow any IPv4 address.
# Example: Server=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com
#
# Mandatory: yes, if StartAgents is not explicitly set to 0
# Default:
# Server=

Server=192.168.50.49

Configuração específica para Plugin do Zabbix agent2

Zabbix agent2 provê parâmetros de configuração específicos para plugins. A maioria destes são parâmetros opcionais relacionados a um plugin específico. Você pode encontrar a lista completa dos parâmetros de configuração específicos para plugins na documentação do Zabbix.

Nas novas versões do Zabbix agent2, os parâmetros específicos de plugin são definidos em um arquivo de configuração de plugins separado, localizado em /etc/zabbix/zabbix_agent2.d/plugins.d/, enquanto em versões mais antigas eles são definidos diretamente no arquivo de configuração zabbix_agent2.conf.

Para o plugin Docker do Zabbix agent 2, é necessário prover a localização do unix-socket do daemon Docker. Isso pode ser feito especificando o seguinte parâmetro de plugin:

### Option: Plugins.Docker.Endpoint
# Docker API endpoint.
#
# Mandatory: no
# Default: unix:///var/run/docker.sock
# Plugins.Docker.Endpoint=unix:///var/run/docker.sock

A localização padrão do socket será a correta para o seu ambiente Docker – nesse caso, você pode deixar a configuração como está.

Uma vez que as mudanças necessárias tenham sido realizadas nos arquivos de configuração do Zabbix agent2, inicie e habilite o agent:

systemctl enable zabbix-agent2 --now

Verifique se o Zabbix agent2 está rodando:

tail -f /var/log/zabbix/zabbix_agent2.log

Antes de seguirmos para o frontend do Zabbix, eu gostaria de chamar a atenção para a permissão do arquivo socket do Docker – o usuário Zabbix precisa ter acesso ao arquivo socket do Docker. O usuário Zabbix deve ser adicionado ao grupo Docker para resolver a seguinte mensagem de erro:

[Docker] cannot fetch data: Get http://1.28/info: dial unix /var/run/docker.sock: connect: permission denied
ZBX_NOTSUPPORTED: Cannot fetch data.

Você pode adicionar o usuário Zabbix ao grupo Docker executando o comando a seguir:

usermod -aG docker zabbix

Configurando o host Docker

Configurando o host que representa nosso ambiente Docker

Após importar o template, nós temos que criar o host que representará a nossa instância Docker. Dê ao host um nome e o adicione a um Grupo de host – eu adicionarei ao grupo Linux servers.

Defina o template Docker by Zabbix agent 2 para o host. Já que o template utiliza o Zabbix agent 2 para coletar as métricas, nós também precisamos adicionar uma interface do tipo Agent nesse host.

O endereço da interface deve apontar para a máquina onde estão rodando os seus containers Docker. Finalize a configuração do host clicando no botão “Adicionar”.

Docker by Zabbix agent2 template

 Itens padrão do template Docker

O template contém um conjunto de itens padrão para métricas gerais da instância Docker, como o número de imagens disponíveis, informação da arquitetura do Docker, número total de containers, e mais.

Regras de descoberta do template docker

Além disso, o template também coleta informações específicas de containers e imagens utilizando regras de descoberta abaixo nível (low-level discovery rules).

Uma vez que o Zabbix descobre seus containers e imagens, essas regras de descobertas serão utilizadas para criar itens, triggers, e gráficos a partir de protótipos para cada um de seus containers e imagens.

Desta forma, podemos monitorar métricas específicas, como memória de um container, informações de rede, status de um container, e mais.

Protótipos de templates Docker para descoberta de baixo nível

Verificando configurações do host e template

Para verificar que o agent e o host estão configurados corretamente, podemos utilizar a ferramenta de linha de comando zabbix-get para buscar informações de nosso agent. Se você não tiver o zabbix-get instalado, utilize o comando abaixo em seu Zabbix server ou Zabbix proxy:

dnf install zabbix-get

Agora podemos utilizar o zabbix-get para verificar se nosso agent pode obter as métricas relacionadas ao Docker. Execute o comando abaixo:

zabbix_get -s docker-host -k docker.info

Utilize o parâmetro -s para especificar o hostname de seu host com o agent, ou o endereço IP. O parâmetro -k especifica a chave (item key) da métrica que queremos obter de nosso agent com o zabbix-get.

zabbix_get -s 192.168.50.141 -k docker.info

{"Id":"SJYT:SATE:7XZE:7GEC:XFUD:KZO5:NYFI:L7M5:4RGO:P2KX:QJFD:TAVY","Containers":2,"ContainersRunning":2,"ContainersPaused":0,"ContainersStopped":0,"Images":2,"Driver":"overlay2","MemoryLimit":true,"SwapLimit":true,"KernelMemory":true,"KernelMemoryTCP":true,"CpuCfsPeriod":true,"CpuCfsQuota":true,"CPUShares":true,"CPUSet":true,"PidsLimit":true,"IPv4Forwarding":true,"BridgeNfIptables":true,"BridgeNfIP6tables":true,"Debug":false,"NFd":39,"OomKillDisable":true,"NGoroutines":43,"LoggingDriver":"json-file","CgroupDriver":"cgroupfs","NEventsListener":0,"KernelVersion":"5.4.17-2136.300.7.el8uek.x86_64","OperatingSystem":"Oracle Linux Server 8.5","OSVersion":"8.5","OSType":"linux","Architecture":"x86_64","IndexServerAddress":"https://index.docker.io/v1/","NCPU":1,"MemTotal":1776848896,"DockerRootDir":"/var/lib/docker","Name":"localhost.localdomain","ExperimentalBuild":false,"ServerVersion":"20.10.14","ClusterStore":"","ClusterAdvertise":"","DefaultRuntime":"runc","LiveRestoreEnabled":false,"InitBinary":"docker-init","SecurityOptions":["name=seccomp,profile=default"],"Warnings":null}

Além disso, também podemos utilizar chaves de descoberta de baixo nível – docker.containers.discovery[false] para checar o resultado da descoberta.

zabbix_get -s 192.168.50.141 -k docker.containers.discovery[false]

[{"{#ID}":"a1ad32f5ee680937806bba62a1aa37909a8a6663d8d3268db01edb1ac66a49e2","{#NAME}":"/apache-server"},{"{#ID}":"120d59f3c8b416aaeeba50378dee7ae1eb89cb7ffc6cc75afdfedb9bc8cae12e","{#NAME}":"/mysql-server"}]

Podemos ver que o Zabbix irá descobrir e começar a monitorar dois containers – apache-server e mysql-server. Qualquer regra de descoberta de baixo nível ou item pode ser verificado com zabbix-get.

Template Docker em ação

Itens descobertos em nosso host Docker

Agora que temos nosso host e agent configurados, aplicamos o template Docker, e verificamos que tudo está funcionando de acordo, nós devemos ser capazes de visualizar as entidades descobertas no frontend.

Métricas de container Docker coletadas

Além disso, nossas métricas devem estar começando a chegar. Podemos verificar na seção Latest data e verificar se elas foram realmente coletadas.

Macros herdadas pelo template Docker

Por último, nós tempos algumas opções adicionais para modificações futuras do template e do resultado de nossa descoberta de baixo nível.

Se você abrir a seção Macros do seu host e selecionar Macros herdadas e de host, você poderá ver que temos 4 macros herdadas do template Docker. Essas macros são responsáveis pela filtragem de containers e imagens descobertas. Sinta-se livre para modificar esses valores se você deseja filtrar a descoberta dessas entidades de acordo com seus requisitos.

Note que o item de descoberta de container tem um parâmetro, que pode ser definido como false no template:

  • docker.containers.discovery[false] – Descobre apenas containers em execução.
  • docker.containers.discovery[true] – Descobre todos os containers, independente do estado.

E é isso! Nós importamos o template, instalamos e configuramos o Zabbix agent2, criamos um host, e aplicamos o template Docker com sucesso.

Por fim, nossa instância Zabbix está monitorando o ambiente Docker!

Se você tem quaisquer perguntas ou comentários, sinta-se livre para deixar uma mensagem na seção de comentários dessa publicação.

 

Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x