Shell script para monitoração de processos Windows com Zabbix.

1. Shell script para monitoração de processos Windows com Zabbix.

Dilan Severino de Oliveira
dilan1998

(usa Debian)

Enviado em 16/01/2022 - 16:48h

Opa, cheguei a uma gambiarra, mas pode ser útil a colegas que usem a ferramenta de monitoração, me esbarrei em ter que monitorar uso de CPU de processos do MySQL, porém haviam parâmetros, aí algumas coisas não fecharam. Vou compartilhar a solução que encontrei!


########## Comentários ##########
O resultado do script é o PercentProcessorTime (busca baseada no PID do processo), esse valor pode ser dividido pelo número de cpus resultando na utilização de cpu do processo com paramâmetro.

O external Script segue a seguinte sintaxe no frontend Zabbix

win.proc.param[IP,PORTA,PROCESSO,PARÂMETRO]

O resultado do script é o PercentProcessorTime (busca baseada no PID do processo), esse valor pode ser dividido pelo número de cpus resultando na utilização de cpu do processo com paramâmetro.Verifique se o host contem a chave system.cpu.num, se não pode criar a chave para retornar o numero de CPUS, intervalo de coleta de 24 á 12 horas pode ser interessante, talvez o item ficará como não suportado, no entanto você pode tentar executar a chave com "Execute Now" e já obter o valor assim o item calculado retorna suportado novamente.

O external Script segue a seguinte sintaxe no frontend Zabbix

win.proc.param[IP,PORTA,PROCESSO,PARÂMETRO]

No meu caso foi criado o item a nivel de host, com outro item calculado baseado na chave system.cpu.num
Exemplo :
Type = Calculated
Fórmula = last("win.proc.param[IP,PORTA,PROCESSO,PARAMETRO]") / last("system.cpu.num")
Type of information = Numeric (float)
Units = %
a nivel de host, com outro item calculado baseado na chave system.cpu.num
Exemplo :
Type = Calculated
Fórmula = last("win.proc.param[IP,PORTA,PROCESSO,PARAMETRO]") / last("system.cpu.num")
Type of information = Numeric (float)
Units = %


########## SCRIPT ##########
#!/usr/bin/env bash

####script criado em /usr/lib/zabbix/externalscripts/(NAME= win.proc.param)
#nome da chave = win.proc.param

IPHOST=$1
PORTNUM=$2
PROC=$3
PARAM=$4

GETPID="$(zabbix_get -s ${IPHOST} -p ${PORTNUM} -k wmi.getall["root\cimv2,select * from Win32_Process where name= '${PROC}' and CommandLine like '%${PARAM}%'"] | jq | awk '/"ProcessId":/ {print $2}' | sed 's/,//g')"

GETCPUTIMEPID="$(zabbix_get -s ${IPHOST} -p ${PORTNUM} -k wmi.getall["root\cimv2,SELECT * FROM Win32_PerfFormattedData_PerfProc_Process where IDProcess='${GETPID}'"] | jq | awk '/"PercentProcessorTime":/ {print $2}' | sed 's/[[:punct:]]//g')"

echo ${GETCPUTIMEPID}


  


2. Re: Shell script para monitoração de processos Windows com Zabbix.

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 16/01/2022 - 19:29h

Dilan boa noite.
Segue uma dica.
Use o AWK para eliminar caracteres,
Dessa forma, elimina o PIPE.....
exemplo:
printf "1,2,3,4,5,6\n7,8,9,10,11,12"|awk '/12/{gsub(",","-");print}'
printf "1,2,3,4,5,6\n7,8-,9,10,11,12"|awk '/12/{gsub(/[[:punct:]]/," ");print}'



______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



3. Obrigado

Dilan Severino de Oliveira
dilan1998

(usa Debian)

Enviado em 17/01/2022 - 09:25h

Caro msoliver, muito obrigado pela dica, infelizmente não estou matando a sintaxe no meu awk tentei algo como
awk '
/"PercentProcessorTime":/
gsub (/,|"/, "", $2) ##### ou
gsub (/[[:punct:]]/, "", $2) ###### também criei uma função
################
awk '
function tratamento (punct){
gsub (/[[:punct:]]/, "", punct)
{print tratamento($2(}'
########### e Também
gsub (/,|"/, "", punct)
return punct {
/"PercentProcessorTime":/
{print tratamento($2)} '



Se houver erros nesse exemplo, ele foi escrito agora mesmo sem testes, o problema é que alguma coisa não fechava no meu gsub que ele retornava todo conteudo não respeito o campo '/REGEX/'