Monitoramento com Zabbix

Gabriel Garrett
Printi Tech
Published in
12 min readOct 4, 2022

Sumário

Parte 1

1 Introdução

2 Instalando o servidor Zabbix

3 Entendendo sobre Agente passivo e ativo

4 Instalando agentes Zabbix

5 Regras de descoberta

6 Templates

7 Criando um item

8 Conclusão

1 — Introdução

Um pouco sobre o que é o Zabbix

O Zabbix foi criado por Alexei Vladishev, e atualmente é mantido e suportado pela Zabbix SIA.

O Zabbix é um software de código aberto com suporte a monitoração distribuída. O Zabbix tem uma grande variedade de parâmetros monitoráveis da rede, servidores e status de diversos serviços e excelentes recursos de notificações, relatórios e visualização de gráficos e dados armazenados.

Podemos considerar o Zabbix como um canivete suiço para monitoração

Este artigo visa mostrar de maneira prática, com mão na massa, os principais recursos de monitoramento que podemos utilizar quando precisamos monitorar nosso ambiente para nos auxiliar na tomada de decisões e na continuidade de serviços relacionados a TI.

O objetivo principal é mostrar como implementar o servidor Zabbix e monitorar os recursos desde o princípio, compreendermos alguns recursos do zabbix de forma resumida, analisando os conceitos e configurações mínimas necessárias para seu funcionamento.

Zabbix na Printi

Na Printi, atualmente, utilizamos o Zabbix para monitorar o nosso parque de instâncias na AWS, verificando o status da utilização dos recursos dos computadores na nuvem (CPU, RAM, discos, etc), monitoração de alguns servidores da infraestrutura interna (on-premise) e execução de scripts remotamente para resolução de problemas. Monitoramos também o site principal e outras aplicações web.

Requisitos para utilização deste tutorial:

  • host local e 3 VMs (virtual machines) Ubuntu 20.04 com 8gb HD (VMs) e 1024 MB RAM (VMs)
  • Nomes dos hosts utilizados VM1 — ZabbixServer, VM2 — host1, VM3 — host2 (opcional)
  • Usaremos a Versão 5.0.26 do Servidor Zabbix

Preparando o Ambiente

(Opcional) Alterando arquivo etc/hosts do host local para exemplo com domínio local, para simular rede com DNS names (se possuir nomes de domínio configurar de acordo com registros).

# vim /etc/hosts

Adicionamos as entradas zabbixserver.net (IP do servidor Zabbix) e webserver.net (IP do host2) com os respectivos IPs da rede local e salvamos as alterações

2- Instalando o Servidor Zabbix

Instalando o repositório Zabbix no ZabbixServer

# wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1%2Bfocal_all.deb

# dpkg -i zabbix-release_5.0–1+focal_all.deb

# apt update

Instalando o servidor, o frontend e o agente Zabbix:

# apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-agent

Instalando o mysql para criar a base de dados do zabbix:

# apt install -y mysql-server

criar o banco de dados do zabbix:

como usuário root execute o comando:

# mysql

no shell do mysql execute:

mysql> create database zabbix character set utf8 collate utf8_bin;

mysql> create user zabbix@localhost identified by ‘ZabbixServer’;

mysql> grant all privileges on zabbix.* to zabbix@localhost;

mysql> quit;

No servidor do Zabbix, importe o esquema inicial e os dados. Você será solicitado a inserir a senha que foi criada anteriormente.

Enter password: (inserir a senha criada “ZabbixServer”)

Configure o banco de dados para o servidor ZabbixEditar arquivo /etc/zabbix/zabbix_server.conf

Configure o PHP para o frontend ZabbixEditar arquivo /etc/zabbix/apache.conf, descomente e defina o fuso horário correto.

Inicie o servidor Zabbix e os processos do agente e configure-os para que sejam iniciados durante o boot do sistema.

# systemctl restart zabbix-server zabbix-agent apache2

# systemctl enable zabbix-server zabbix-agent apache2

Acessando o Frontend

agora vamos realizar o acesso do frontend do zabbix, para isso no browser inserimos a URL http://zabbixserver.net/zabbix/ ou http://(IP_do_Servidor)/zabbix e seguimos os passos:

informamos os dados do usuário e banco mysql criados anteriormente

user: zabbix

password: ZabbixServer

pronto! Agora usamos o user e senha padrão do zabbix

usuário: Admin

senha: zabbix

3 — Entendendo sobre Agente Ativo e Passivo

O agent Zabbix pode coletar as dados dos agentes de modo ativo ou passivo

a principal diferença entre eles é a direção da conexão e o custo de processamento

Se você usar o agente Zabbix no modo passivo, significa que o poller (processo interno do servidor) se conecta ao agente na porta 10050/TCP e pesquisa um determinado valor (por exemplo, carga da CPU do host). O poller espera até que o agente no host responda com o valor. Em seguida, o servidor obtém o valor de volta e a conexão é fechada.

No modo ativo, todo o processamento de dados é realizado no agente, sem a interferência de pollers. No entanto, o agente deve saber quais métricas devem ser monitoradas, e é por isso que o agente se conecta à porta trapper 10051/TCP do servidor Zabbix uma vez a cada dois minutos (por padrão). O agente solicita as informações sobre os itens e, em seguida, realiza o monitoramento no host e envia os dados para o servidor Zabbix através da mesma porta TCP.

Benefícios da topologia

O primeiro benefício vem da topologia da rede em que o agente Zabbix está instalado. Por exemplo, pode ser que seu cliente não queira conexões de entrada em seu ambiente, mesmo da rede interna, mas permita conexões de saída. Nesse caso, você terá que usar verificações ativas.

Agora, imagine que você pretende configurar a resolução automática de problemas em seus hosts, além do monitoramento. Um exemplo seria um servidor com alto uso de cpu por um período de tempo e enviamos comandos remotos para que ele reinicie o sistema, como por exemplo: systemctl restart nginx.service. mas isso só seria possível com agent zabbix no modo passivo.

Benefícios de desempenho

No modo de agente passivo, o poller se conecta ao host, solicita os dados e espera até receber os dados ou até que o tempo limite seja atingido.

O valor de timeout é armazenado na variável Timeout em zabbix_server.conf. O valor máximo é de 30 segundos, que é muito alto para ser usado em produção sem os devidos motivos.

Agora, imagine que você tenha um parâmetro personalizado executando um script Bash que é executado por 10 segundos a cada minuto. Em seguida, o poller aguardará 10 segundos até obter o valor, o que significa que não poderá processar nenhum outro item nesse meio tempo. O tempo de inatividade do poller aumentará drasticamente e você terá que aumentar o número desses processos para acompanhar o número de itens.

O mesmo se aplica ao agente. Se você tiver um agente com muitos scripts e parâmetros de usuário, e eles forem relativamente lentos, levará tempo para o agente processá-los. O número dos processos do agente interno padrão é armazenado na variável StartAgents.

Existem três processos internos que podem realizar as verificações necessárias, o que significa que, por padrão, o agente pode processar três itens simultaneamente. Esse parâmetro pode ser aumentado se você tiver muitas verificações de execução lenta e o agente atuar como gargalo. Aumentando o valor de StartAgents para 100 você aumentará o número de pollers no servidor Zabbix. Deve-se notar que ter verificações lentas degrada o desempenho do seu servidor Zabbix.

Pode parecer que o modo ativo se encaixaria melhor nesse cenário — o servidor Zabbix não interfere em nada e apenas recebe os dados já coletados, enquanto o processamento é feito no agente. Ele bifurca o script Bash, aguarda 10 segundos e obtém os dados. Depois que os dados são coletados, o agente envia imediatamente uma resposta ao servidor Zabbix, para que o servidor Zabbix nunca precise esperar enquanto o script estiver em execução.

Verificações ativas no agente

A desvantagem é que só pode haver um desses processos por cada agente no modo ativo e é impossível aumentar o número de verificações. Se você tiver vários itens em execução por 10 segundos cada, com um curto intervalo de atualização no host e configurar todos esses itens como verificações ativas, haverá uma fila de verificações pendentes.

A única maneira de evitar isso é configurar esses itens como verificações passivas, e então você pode aumentar o número de processos internos que tratam dessas verificações alterando a variável StartAgents em zabbix_agentd.conf. Observe que você precisa reiniciar o processo binário após alterar o arquivo de configuração.

Resumindo, na maioria dos casos com verificações rápidas, ter um agente ativo é melhor em termos de desempenho. A desvantagem é que você não pode usar comandos remotos.

Por outro lado, se você tiver muitos itens lentos levando 30 segundos cada e não puder processá-los fora do agente, as verificações passivas serão sua única opção. Usando esses, você pode aumentar o número de processos no lado do agente.

O benefício adicional das verificações ativas é que o agente possui um buffer de memória para essas verificações. Isso significa que você não perderá os dados em caso de problema de rede. Usar verificações passivas significa que você não pode usar o buffer.

4 — Instalando agentes Zabbix

Instalando Zabbix Agent no host1

Acessando o host1, executamos os comandos:

# wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix/zabbix-agent_5.0.26-1%2Bfocal_amd64.deb

# dpkg -i zabbix-agent_5.0.26–1+focal_amd64.deb

# apt update

# cd /etc/zabbix/

realizamos backup do arquivo de configuração

# cp zabbix_agentd.conf zabbix_agentd.conf_original

alterarmos o arquivo zabbix_agentd.conf conforme abaixo (inserir o IP do servidor Zabbix)

# vim zabbix_agentd.conf

agora reiniciamos o serviço zabbix-agent e habilitamos para que sejam iniciados durante o boot do sistema

# systemctl restart zabbix-agent

# systemctl enable zabbix-agent

Instalando Agent 2 no host2

O agent 2 é uma outra versão do zabbix agent escrita em Go, com alguns melhoramentos como:

  • redução de conexões TCP
  • melhoria na simultaneidade aprimorada de checks
  • melhor compatibilidade com plugins

realizaremos a configuração do host2 com o zabbix agent 2 para analisar o monitoramento com containers docker

Instalando Agent 2

acessando o host2, executamos os comandos:

# wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix/zabbix-agent2_5.0.26-1%2Bfocal_amd64.deb

# dpkg -i zabbix-agent2_5.0.26–1+focal_amd64.deb

# cd /etc/zabbix/

realizamos backup do arquivo de configuração

# cp zabbix_agent2.conf zabbix_agent2.conf_original

alteramos o arquivo zabbix_agentd.conf conforme abaixo (inserir o IP do servidor Zabbix)

# vim zabbix_agent2.conf

agora reiniciamos o serviço zabbix-agent e habilitamos para que sejam iniciados durante o boot do sistema

# systemctl restart zabbix-agent2

# systemctl enable zabbix-agent2

O agent 2 é uma outra versão do zabbix agent escrita em Go, com alguns melhoramentos como:

  • redução de conexões TCP
  • melhoria na simultaneidade aprimorada de checks
  • melhor compatibilidade com plugins

crealizaremos a configuação de um host com o zabbix agent 2 para analisar o monitoramento com containers docker (parte 2 deste artigo)

Instalando docker e servidor web para exemplos

configure o repositório

# apt-get update

# apt-get install \

ca-certificates \

curl \

gnupg \

lsb-release

Adicionando chave GPG oficial do Docker:

# mkdir -p /etc/apt/keyrings

# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg — dearmor -o /etc/apt/keyrings/docker.gpg

adicionando o repositório:

echo \

“deb [arch=$(dpkg — print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \

$(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Instalando Docker Engine

# apt-get update

# apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

Instalando container exemplo nginx

docker run -it — rm -d -p 8080:80 — name web nginx

docker ps

Já poderíamos criar os hosts manualmente e associá-los a um template para visualizarmos algumas métricas, mas usaremos o recurso de “discovery” e “discovery action” nas próximas seções para realizarmos de forma automática.

5 - Regras de descoberta

Criamos regras de descoberta para que o servidor Zabbix encontre os hosts e registre no servidor

em Configuration >> Discovery temos uma regra de descoberta da rede local do Servidor vamos alterá-la clicando no Name “Local network

agora alteramos o “Update interval” para que atualize a descoberta mais rapidamente para nosso exemplo

Apoś alguns minutos podemos ver os hosts encontrados, mas ainda não foram registrados como hosts no zabbix server, para isso vamos em Actions >> Discovery >> Create Action para criarmos uma ação ao descobrir hosts

adicionamos uma condição para o range de ip da rede local

em “Operations” adicionamos Add host e link to templates (Template Os Linux by Zabbix agent)

Retornando em “Action” marcamos a caixa Enabled e selecionamos Add

vemos em “Hosts” os hosts adicionados no zabbix server

6 - Templates

na documentação oficial do Zabbix temos a seguinte definição sobre templates

Um template é um conjunto de entidades que podem ser associadas de forma fácil e conveniente a vários hosts.

As entidades podem ser:

  • Itens
  • Triggers
  • Gráficos
  • Aplicações
  • Telas (desde o Zabbix 2.0)
  • Regras de autobusca (LLD) (desde o Zabbix 2.0)
  • Cenários web (desde o Zabbix 2.2)

Será utilizado alguns templates em nosso ambiente simulando um ambiente real usando as entidades acima, como se existissem vários hosts pois o princípio é o mesmo.

Acessando nosso servidor Zabbix, e nela já temos o host do próprio servidor (Zabbix Server). o host j́a está pré-configurado e associado a 2 templates que já nos retornam vários itens e triggers

acessamos Configuration >> Templates

Vamos realizar algumas configurações no template Template OS Linux by Zabbix Agent para criar exemplos e explicar seus conceitos:

selecionamos a Configuration >> Templates >> Template OS Linux by Zabbix Agent

7 - Criando um item

Um item é uma métrica individual, no item você especifica que tipo de dados que serão coletados do host, você pode criar um Trigger (gatilho) para monitorar e alertar um comportamento do item de acordo com a regra especificada.

Os tipos de itens suportados podem ser encontrados nesse link

https://www.zabbix.com/documentation/current/en/manual/config/items/itemtypes

Nosso template já possui alguns itens interessantes como: vm.memory.size , vfs.file.cksum, system.cpu.switches, system.cpu.util, system.sw.os , proc.num, agent.ping etc.

Criaremos item agent.variant para verificar a versão do zabbix agents nos hosts (retornará 1 ou 2)

selecionando o Template em Items >> clicamos em Create item

inserimos nome e descrição

no campo “key” selecionamos agent.variant

podemos executar um teste pelo IP do host2 e clicando em “Get value and test” e nos retorna a versão do agent 2

Após o teste clicamos no botão “Add” para adicionar o item no template.

Trigger e macro

agora faremos a configuração de um trigger (gatilho) que verificará a memória livre do host alertará caso esteja abaixo do informado.

Utilizaremos uma macro para o exemplo {HOST.NAME} que informa o nome visível do host,o uso das macros servem para economizar tempo e retornarmos a informação padronizada

A lista de macros suportadas pelo zabbix pode ser encontrada no link

https://www.zabbix.com/documentation/5.2/pt/manual/appendix/macros/supported_by_location

em Configuration >> Templates >> Template OS Linux by Zabbix agent >> Triggers >> Create Trigger

configuramos o trigger com um número alto para forçar um alerta

agora em Monitoring >> Dashboard vemos o trigger com a macro retornando o valor do hostname = Zabbix server

agora podemos retornar o trigger para o padrão (<20)

8 - Conclusão

Zabbix é uma ferramenta poderosa para monitorarmos diversos tipos de infraestrutura de T.I.

Nesta demonstração entendemos os principais conceitos e configurações:

  • Instalação Servidor Zabbix
  • Tipos de agentes
  • Regras de descoberta
  • Itens
  • Templates

Na parte 2 iremos aprender ainda mais sobre zabbix:

  • LLD
  • Integrações com Zabbix
  • Monitoramento de containers
  • Tipos de Media
  • Monitoramento Web

Links / Referências

https://www.zabbix.com/documentation/5.0/en/manual

https://blog.zabbix.com/zabbix-agent-active-vs-passive/9207/#:~:text=The%20additional%20benefit%20of%20the,you%20cannot%20use%20the%20buffer.

--

--