Neste blog falaremos sobre a detecção automática de anomalias baseada em um item específico, neste caso relacionado a um alto consumo de CPU tanto em nosso servidor Zabbix quanto em um servidor Windows.

Realizar esse tipo de configuração na sua infraestrutura permite detectar rapidamente eventos específicos e executar ações corretivas.

Algumas das vantagens são:

  • Identificação proativa de problemas;

  • Redução de falsos alarmes;

  • Adaptação a comportamentos dinâmicos;

  • Análise de tendências e predição.

Detectando anomalias no consumo de CPU com Zabbix

Começamos analisando o consumo de CPU do nosso servidor Zabbix, assim como a anomalia. No gráfico, podemos observar, durante 7 dias, como foi o comportamento do consumo de CPU. Quando ocorre um consumo elevado, é detectada uma anomalia, o que indica que, nesse período, algum evento está acontecendo, seja um processo em execução ou uma tarefa de manutenção.

Podemos criar um gatilho, por exemplo, para o item quando seu valor for maior ou igual a 2, a fim de entender melhor essa elevação de consumo.

Para compreender a detecção, fazemos um cálculo sobre o consumo da CPU utilizando a condição baselinedev(/host/key,1h:now/h,"d",10), que calcula o número de vezes em que esse intervalo difere entre a hora anterior e a mesma hora, durante um período de 7 dias prévios.

Identificação do consumo de CPU por usuário com PowerShell

E se estivermos em uma infraestrutura onde vários administradores acessam um servidor para tarefas de manutenção e for detectado um alto consumo de CPU? Como identificar esse consumo elevado como uma anomalia do servidor, descobrir qual usuário está executando um processo e reportar em tempo real?

Esse caso será analisado em relação a um usuário específico.

Faremos isso com um script em PowerShell, para o qual criaremos uma pasta e salvaremos em C:\Program Files\Script. Ele deve ser salvo como arquivo .ps1. Esse script obterá o consumo de CPU do usuário em formato JSON.

Depois de instalado o agente no Windows, devemos pará-lo e modificar o arquivo de configuração C:\Program Files\Zabbix Agent\zabbix_agentd.conf, alterando os parâmetros Timeout e UserParameter.

No parâmetro UserParameter, colocamos custom.user.resource, que fará referência ao nosso script, seguido da condição de execução e caminho.

Feito isso, precisamos verificar no servidor se a política adequada está habilitada no PowerShell:

  • Get-ExecutionPolicy: verifica a política de execução que devemos ter configurada;

  • cmd /c "query user": verifica o funcionamento do comando query user.

O script, que não requer permissões elevadas, funciona na maioria das versões modernas do Windows, embora haja alguns pontos a considerar:

  • Versão do PowerShell: o script utiliza comandos que exigem PowerShell 3.0 ou superior. A maioria dos sistemas modernos já conta com PowerShell 5.1 ou posterior, mas em sistemas antigos podem existir versões inferiores;

  • Comando query user: este comando é padrão na maioria das versões do Windows, mas sua saída pode variar ligeiramente entre versões;

  • Configuração de segurança: em ambientes com políticas de segurança muito restritivas, algumas operações como obter informações de processos podem estar bloqueadas, mesmo sem exigir permissões de administrador.

Em resumo, o script deve funcionar corretamente na maioria dos sistemas Windows sem permissões elevadas. No entanto, é recomendável realizar essas validações em sistemas críticos ou antigos para garantir seu funcionamento adequado.

A partir da console, acessamos nosso servidor Zabbix e verificamos se ele retorna o consumo de CPU utilizando zabbix_get com o IP que estamos monitorando.

Após a verificação, acessamos o frontend do Zabbix e criamos um item, atribuindo um nome para receber o JSON com o consumo de CPU do usuário, e atualizamos a configuração.

Em seguida, criamos um item dependente que chamará nosso primeiro item criado, identificamos como sendo nosso primeiro usuário e configuramos o percentual no campo de unidade.

Na etapa de Preprocessing, adicionamos uma expressão regular, onde introduzimos "CPU":\s*([\d.]+), que busca exatamente "CPU", \s* permite espaços opcionais e ([\d.]+) captura qualquer combinação de dígitos e pontos, funcionando para números decimais como 6.07. Finalmente, atualizamos a configuração.

Ao combinar o uso de CPU com a anomalia, obtemos o gráfico a seguir. Esse script é baseado em um usuário, e podemos observar que ele apresenta picos que podem ser normais.

A partir daí, é possível ampliar o monitoramento para usuários administrativos, por exemplo, userone, usertwo e usertree, permitindo detectar qual usuário administrativo executou um processo que elevou o consumo de CPU.

A seguir, é mostrado um exemplo de como seria o procedimento para vários usuários.

Conclusão

A implementação da detecção automática de anomalias no Zabbix utilizando scripts personalizados em PowerShell é uma estratégia eficiente para monitorar o uso de recursos e detectar eventos incomuns em tempo real.

Adaptando corretamente a configuração do agente e validando a compatibilidade dos scripts, é possível otimizar a gestão e a reação diante de incidentes em diferentes ambientes Windows.

É sempre recomendável validar previamente em sistemas críticos ou antigos para garantir a confiabilidade do monitoramento.

Confie nos serviços da Zabbix para melhorar a visibilidade da sua infraestrutura, acelerar a detecção de anomalias e responder de forma mais eficaz a qualquer incidente. Clique aqui e confira nossos serviços para empresas.