Skip to content

Instantly share code, notes, and snippets.

@HorselessName
Last active January 26, 2022 17:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save HorselessName/984a68b1f341a2ce86d2487f9b85e52b to your computer and use it in GitHub Desktop.
Save HorselessName/984a68b1f341a2ce86d2487f9b85e52b to your computer and use it in GitHub Desktop.
Template SNMP - Windows Server (LLD)
Template Windows SNMP via LLD
Descrição do Template:
Monitoramento sem agente Zabbix, com agente SNMP
Tudo somente usando Discovery rules...
LLD. A função de LLD no Zabbix gera os items encontrados dentro de CHAVES, em formato JSON, e já cria também uma macro chamada $SNMPINDEX que é utilizada
para organizar e separar os items encontrados, pelo próprio Zabbix...
Exemplo básico
Ao criar um item no host, pode fazer o seguinte teste:
SNMP OID: discovery[{#CPU.UTIL},1.3.6.1.2.1.25.3.3.1.2]
Gere um item com esse parametro, em que ele vai gerar diversos items em formato JSON e armazenar dentro da macro LLD {#CPU_UTIL}
Output:
[
{"{#SNMPINDEX}":"4","{#CPU.UTIL}":"14"},
{"{#SNMPINDEX}":"5","{#CPU.UTIL}":"18"},
{"{#SNMPINDEX}":"6","{#CPU.UTIL}":"14"},
{"{#SNMPINDEX}":"7","{#CPU.UTIL}":"7"},
{"{#SNMPINDEX}":"8","{#CPU.UTIL}":"11"},
{"{#SNMPINDEX}":"9","{#CPU.UTIL}":"9"}
]
Note que ele gerou os items e os armazenou em uma lista...
Dessa forma o sistema faz os ajustes e organiza para ficar bem ordenado, de acordo com as configurações criadas pelo usuário.
Métodos:
Macros no Template e Filtros dentro da regra de descobrimento.
Uma fórmula utilizada para calcular o espaço de um volume é:
Multiplicar o valor do tamanho em bytes pelo tamanho padrão do cluster/Unidade de alocação (Data cluster)
Exemplo: O comando abaixo trás informações sobre o Disco Local C de uma máquina.
snmpwalk -c teste -v2c 192.168.17.18 HOST-RESOURCES-MIB::hrStorageAllocationUnits.1
HOST-RESOURCES-MIB::hrStorageAllocationUnits.1 = INTEGER: 4096 Bytes
Onde o tamanho do cluster é 4096, então para saber o tamanho do mesmo podemos fazer:
snmpwalk -c teste -v2c 192.168.17.18 HOST-RESOURCES-MIB::hrStorageSize.1
HOST-RESOURCES-MIB::hrStorageSize.1 = INTEGER: 61848575 Bytes
Para converter para o tamanho real, multiplicamos pelo tamanho de alocação do cluster
61848575 * AllocationUnits = Tamanho do armazenamento
As #MACROS de LLD são utilizadas para armazenar dados/nomes. As OIDs são responsáveis por gerar valores que viram dados/nomes para serem armazenados nessas #MACROS.
discovery[{#FSNAME},1.3.6.1.2.1.25.2.3.1.3,{#FSTYPE},1.3.6.1.2.1.25.2.3.1.2,{#ALLOC_UNITS},1.3.6.1.2.1.25.2.3.1.4]
{#FSNAME},1.3.6.1.2.1.25.2.3.1.3 - > Puxa a descrição (HOST-RESOURCES-MIB::hrStorageDescr) e armazeno na #MACRO
{#FSTYPE},1.3.6.1.2.1.25.2.3.1.2 - > Puxa o tipo do sistema de arquivos (HOST-RESOURCES-MIB::hrStorageType) e armazeno na #MACRO
{#ALLOC_UNITS},1.3.6.1.2.1.25.2.3.1.4 - > Puxa o tamanho de alocação do sistema de arquivos (HOST-RESOURCES-MIB::hrStorageAllocationUnits) e armazeno na #MACRO
As MACROS LLD são relacionadas com MACROS DE USUÁRIO que estão configuradas no padrão de expressão regular,
para buscar e reunir informações filtrando usando os operadores REGEX.
Exemplo:
Uma mesma OID é utilizada pra pegar HD e Memória.
Porém para diferenciar o que é o que, utilizamos as MACROS LLD e as MACROS DE USUARIO com operadores REGEX que filtram informações como:
.*(\.4|\.9|hrStorageFixedDisk|hrStorageFlashMemory)$ - > HD...
.*(\.2|hrStorageRam)$ - > Memória...
Ajuda/Colinha para Regex:
https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_04_01.html
Você verá que a OID puxa tanto a memória física, a virtual e os sistemas de arquivos existentes.
Com as macros de exemplo acima o Zabbix consegue filtrar e diferenciar o que é o que.
Aplicações do Template/Items de Descobrimento - Serão três no total.
HD, Memória e CPU.
Note que alguns items puxados pelo SNMP vem em BYTES, sendo necessario multiplicar por 4096 para
chegar no valor em GB...
Ex:
Trazer o espaço em disco de um HD...
snmpwalk -c teste -v2c 192.168.17.18 HOST-RESOURCES-MIB::hrStorageSize.1
Multiplicando o valor por 4096 o resultado se torna em GB.
61848575*4096 = 250 GB
###########################################################################################################################################################
-----------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------
Aplicação HD - MIB Utilizada: HOST-RESOURCES-MIB::hrStorage
Macros do template utilizadas na descoberta de sistema de arquivos:
{$FILESYSTEM.FSNAME.MATCHES} - > .+ (O item busca qualquer tipo de caractere, e esse mesmo item vai aparecer uma ou mais vezes - HDs.)
{$FILESYSTEM.FSNAME.NOT_MATCHES} - > ^(/dev|/sys|/run|/proc|.+/shm$) (Ignora esses caminhos de sistema caso apareçam)
{$FILESYSTEM.FSTYPE.MATCHES} - > .*(\.4|\.9|hrStorageFixedDisk|hrStorageFlashMemory)$ (Filtra items com esses nomes, para o tipo de sistema)
{$FILESYSTEM.FSTYPE.NOT_MATCHES} - > CHANGE_IF_NEEDED (Utilize caso precise caso puxe um item errado)
{$FILESYSTEM.HD.USED.MAX} - > 90 (Macro que vai ser utilizada para triggers que medem a porcentagem do uso de disco)
Regras de Descobrimento/Discovery rules - Aqui é onde tem a configuração da regra de descobrimento.
Nome: Descoberta de armazenamentos
Tipo: SNMP Agent
Key: sys.hd.discovery[snmp]
SNMP OID: discovery[{#FSNAME},1.3.6.1.2.1.25.2.3.1.3,{#FSTYPE},1.3.6.1.2.1.25.2.3.1.2,{#ALLOC_UNITS},1.3.6.1.2.1.25.2.3.1.4]
Descrição: MIB - > HOST-RESOURCES-MIB::hrStorage
"Descobertas feitas utilizando filtros nas regras de descobrimento e macros no template"
----------------------------------------------------------------------------------------------------------------------------
Filtros - Tipo de calculo: And.
{#FSNAME} MATCHES {$FILESYSTEM.FSNAME.MATCHES}
{#FSNAME} DOES NOT MATCH {$FILESYSTEM.FSNAME.NOT_MATCHES}
{#FSTYPE} MATCHES {$FILESYSTEM.FSTYPE.MATCHES}
{#FSTYPE} DOES NOT MATCH {$FILESYSTEM.FSTYPE.NOT_MATCHES}
###########################################################################################################################################################
⚪ Protótipos de Items ⚪
----------------------------------------------------------------------------------------------------------------------------
Prototipo de Item 1
Nome - > {#FSNAME}: Utilização de espaço (Porcentagem)
Tipo: Calculado
Key: sys.hd.percent[hrStoragePercent.{#SNMPINDEX}]
Fórmula: (last("sys.hd.used[hrStorageUsed.{#SNMPINDEX}]")/last("sys.hd.total[hrStorageSize.{#SNMPINDEX}]"))*100
Tipo: Numeric (Float)
Units: %
Application: HD
Application Prototype: HD {#FSNAME}
Descrição: Utilização do espaço em disco em % para {#FSNAME}
Fórmula: (Espaço usado / Espaço total) * 100
Prototipo de Item 2
Nome - > {#FSNAME}: Espaço total
Tipo: SNMP Agent
Key: sys.hd.total[hrStorageTotal.{#SNMPINDEX}]
SNMP OID: 1.3.6.1.2.1.25.2.3.1.5.{#SNMPINDEX}
Tipo: Numeric (Unsigned)
Units: B
Application: HD
Application Prototype: HD {#FSNAME}
Descrição: MIB - > HOST-RESOURCES-MIB
O tamanho do espaço em disco, utilizando hrStorageAllocationUnits.
Esse objeto foi configurado como utilizável, permite ao usuário utilizar o mesmo para configurar remotamente o tamanho do espaço
em disco onde esse tipo de cenário é possível.
Por exemplo, o tamanho do espaço de um disco virtual pode ser modificado...
Preprocessing:
Custom multiplier {#ALLOC_UNITS}
Protótipo de Item 3
Nome - > {#FSNAME}: Espaço utilizado
Tipo: SNMP Agent
Key: sys.hd.used[hrStorageUsed.{#SNMPINDEX}]
SNMP OID: 1.3.6.1.2.1.25.2.3.1.6.{#SNMPINDEX}
Tipo: Numeric (Unsigned)
Units: B
Application: HD
Application Prototype: HD {#FSNAME}
Descrição: MIB - > HOST-RESOURCES-MIB
O tamanho de espaço que está alocado, no formato de unidade/units de hrStorageAllocationUnits.
Preprocessing:
Custom multiplier {#ALLOC_UNITS}
⚪ Protótipo de Triggers ⚪
###########################################################################################################################################################
Protótipo de Trigger 1
Nome - > {{#FSNAME}: **CRÍTICO** Espaço em disco baixo - ({ITEM.LASTVALUE1} em uso)
Operational Data - > Space used: {ITEM.LASTVALUE3} of {ITEM.LASTVALUE2} ({ITEM.LASTVALUE1})
Expression - > Logo abaixo. 👇🏻👇🏻👇🏻
AND e OR utilizados - Preste atenção no código.
Essa expressão é formada por DOIS BLOCOS! Preste atenção.
---------------------------------------------------------------------------------------------------------------------------------------------------
Bloco 1 - Item utilizado % de uso do disco
SE : O ultimo valor de uso do disco (%) -> "sys.hd.percent[storageUsedPercentage.{#SNMPINDEX}].last()"
for maior que {$FILESYSTEM.HD.USED.MAX:"{#FSNAME}"} no Item #FSNAME
---------------------------------------------------------------------------------------------------------------------------------------------------
Bloco 1 - Código (Parte 1 do código)
{Monitoramento Simplify - Windows by SNMP using LLD:sys.hd.percent[storageUsedPercentage.{#SNMPINDEX}].last()} > {$FILESYSTEM.HD.USED.MAX:"{#FSNAME}"} and
---------------------------------------------------------------------------------------------------------------------------------------------------
Bloco 2 - São utilizados dois calculos. Fórmula: (X - Y) < 5G OR Z
E SE : O resultado do ultimo valor do espaço total -> "sys.hd.total[hrStorageSize.{#SNMPINDEX}].last()"
menos o ultimo valor do espaço utilizado -> "sys.hd.used[hrStorageUsed.{#SNMPINDEX}].last()"
for menor que 5GB
OU
Baseado nos valores da ultima hora, o tempo até que o valor -> "sys.hd.percent[storageUsedPercentage.{#SNMPINDEX}]"
esteja calculado para atingir 100 em menos de um dia. -> Função .timeleft(1h,,100) Constante/Valor relativo <1d
O valor relativo sempre é utilizado FORA do Item relacionado (Fora das chaves) - Ex: { Item uso de CPU.last() } > 100
---------------------------------------------------------------------------------------------------------------------------------------------------
Bloco 2 - Código (Parte 2 do código)
(
( { Monitoramento Simplify - Windows by SNMP using LLD: sys.hd.total[hrStorageSize.{#SNMPINDEX}].last() } - { Monitoramento Simplify - Windows by SNMP using LLD: sys.hd.used[hrStorageUsed.{#SNMPINDEX}].last() } ) <5G or
{ Monitoramento Simplify - Windows by SNMP using LLD: sys.hd.pused[storageUsedPercentage.{#SNMPINDEX}].timeleft(1h,,100) } < 1d
)
---------------------------------------------------------------------------------------------------------------------------------------------------
Expressão montada:
({Monitoramento Simplify - Windows by SNMP using LLD:sys.hd.pused[storageUsedPercentage.{#SNMPINDEX}].last()}>{$FILESYSTEM.HD.USED.MAX:"{#FSNAME}"} and
(({Monitoramento Simplify - Windows by SNMP using LLD:sys.hd.total[hrStorageSize.{#SNMPINDEX}].last()}-{Monitoramento Simplify - Windows by SNMP using LLD:sys.hd.used[hrStorageUsed.{#SNMPINDEX}].last()})<5G or
{Monitoramento Simplify - Windows by SNMP using LLD:sys.hd.percent[storageUsedPercentage.{#SNMPINDEX}].timeleft(1h,,100)}<1d ))
###########################################################################################################################################################
-----------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------
Aplicação Memória - MIB Utilizada: HOST-RESOURCES-MIB::hrStorage
Macros do template utilizadas na descoberta de memória:
{$MEMORY.NAME.MATCHES} - > .* (O item busca qualquer tipo de caractere, e esse mesmo item vai aparecer uma vez ou nenhuma vez - Memória)
{$MEMORY.NAME.NOT_MATCHES} - > MUDE_SE_NECESSARIO (Caso items errados sejam puxados pode utilizar essa macro para corrigir)
{$MEMORY.TYPE.MATCHES} - > .*(\.2|hrStorageRam)$ (O tipo de item precisa conter hrStorageRam no nome na OID 1.3.6.1.2.1.25.2.3.1.2)
{$MEMORY.TYPE.NOT_MATCHES} - > MUDE_SE_NECESSARIO (Utilizado para ajustar o processo caso puxe items de forma errada)
{$MEMORY.UTIL.MAX} - > 90 (Porcentagem máxima de uso permitido da RAM que vamos usar na trigger)
Macros de LLD utilizadas, na aba Filtros:
{#MEMNAME} - Armazena as descrições da OID HOST-RESOURCES-MIB::hrStorageDescr (Contém Virtual Memory e Physical Memory)
{#MEMTYPE} - Armazena o tipo de memória usando a OID HOST-RESOURCES-MIB::hrStorageType (Contém Virtual Memory e Ram. OID: 1.3.6.1.2.1.25.2.3.1.2)
{#ALLOC_UNITS} - Armazena o tamanho de alocação do espaço do item com a OID hrStorageAllocationUnits
-----------------------------------------------------------------------------------------------------------------------------------------------------------
Nome: Descoberta de Memória
Tipo: SNMP Agent
Chave: sys.mem.discovery[snmp]
SNMP OID: discovery[{#MEMNAME},1.3.6.1.2.1.25.2.3.1.3,{#MEMTYPE},1.3.6.1.2.1.25.2.3.1.2,{#ALLOC_UNITS},1.3.6.1.2.1.25.2.3.1.4]
Update interval: 1h
Descrição: Descobrimento de memória utilizando filtros de descobrimento e macros do template.
MIB Utilizada - > HOST-RESOURCES-MIB::hrStorage
Filtros da descoberta
Tipo de calculo: AND
{#MEMNAME} matches {$MEMORY.NAME.MATCHES} - > Nome da memória bate com a expressão regular e aparece nenhuma ou só uma vez
{#MEMNAME} does not match {$MEMORY.NAME.NOT_MATCHES}
{#MEMTYPE} matches {$MEMORY.TYPE.MATCHES} - > Tipo de Memória contém na OID hrStorageRam
{#MEMTYPE} does not match {$MEMORY.TYPE.NOT_MATCHES}
###########################################################################################################################################################
⚪ Protótipos de Items ⚪
Item 1
- > Nome: {#MEMNAME}: Memoria total
Tipo: SNMP Agent
Chave: sys.memory.total[hrStorageSize.{#SNMPINDEX}]
SNMP OID: 1.3.6.1.2.1.25.2.3.1.5.{#SNMPINDEX}
Tipo: Numerico(Unsigned)
Units: B
Descrição:
MIB utilizada: HOST-RESOURCES-MIB::hrStorage
O tamanho total da memória, em unidades de alocação de espaço do OID hrStorageAllocationUnits (hrStorageAllocationUnits - Bytes)
Esse objeto pode ser utilizado para fazer configurações remota diretamente no tamanho da memória...
Por exemplo você consegue alocar mais ou menos memória para um pool de buffer, ou o tanto de espaço em disco alocado em uma memória SWAP/Virtual.
Preprocessing: Custom multiplier > {#ALLOC_UNITS}
Item 2
- > Nome: {#MEMNAME}: Memoria utilizada
Tipo: SNMP Agent
Chave: sys.mem.used[hrStorageUsed.{#SNMPINDEX}]
SNMP OID: 1.3.6.1.2.1.25.2.3.1.6.{#SNMPINDEX}
Tipo: Numerico(Unsigned)
Units: B
Descrição:
MIB utilizada: HOST-RESOURCES-MIB::hrStorage
O tamanho total da memória que está sendo usada, convertida para o tamanho em bytes da OID hrStorageAllocationUnits ( Custom multiplier - > {#ALLOC_UNITS})
Preprocessing: Custom multiplier > {#ALLOC_UNITS}
Item 3
- > Nome: {#MEMNAME}: Memoria em uso (Porcentagem)
Tipo: Calculated
Chave: sys.mem.percent[hrStoragePercent.{#SNMPINDEX}]
Formula: last("sys.mem.used[hrStorageUsed.{#SNMPINDEX}]")/last("sys.mem.total[hrStorageSize.{#SNMPINDEX}]")*100
Type: Float
Units: %
Descrição: Item trás a porcentagem de uso de memória sendo consumida.
Formula significa ULTIMO VALOR do item sys.mem.used / ULTIMO VALOR de sys.mem.total
Multiplica o resultado por 100, terá a porcentagem de uso de memória.
⚪ Protótipo de Triggers ⚪
###########################################################################################################################################################
Trigger 1
Nome - > {#MEMNAME}: Utilização da memória em {ITEM.LASTVALUE1}
Expression:
{Monitoramento Simplify - Windows by SNMP using LLD:sys.mem.percent[hrStoragePercent.{#SNMPINDEX}].min(20m)}>{$MEMORY.UTIL.MAX}
Descrição:
Descobrimento de memória utilizando filtros de descobrimento e macros do template.
MIB Utilizada - > HOST-RESOURCES-MIB::hrStorage
###########################################################################################################################################################
-----------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------
Aplicação CPU - MIB Utilizada: HOST-RESOURCES-MIB::hrProcessorLoad (1.3.6.1.2.1.25.3.3.1.2)
Para ver o uso da CPU você pode usar o comando:
snmpgetnext -c teste -v2c 192.168.17.18 1.3.6.1.2.1.25.3.3.1.2
⚪ Items ⚪
Macros do template utilizada na aplicação CPU:
{$CPU.UTIL.MAX} - > 90 (Porcentagem máxima de uso permitido de uso da CPU que vamos usar na trigger)
-----------------------------------------------------------------------------------------------------------------------------------------------------------
discovery[{#CPU.UTIL},1.3.6.1.2.1.25.3.3.1.2] - > Armazenei os valores gerados em uma lista usando a OID e faz um Preprocessing, demonstrado e explicado abaixo
Nome: Descoberta de CPU
Tipo: SNMP Agent
Chave: sys.cpu.discovery[snmp]
SNMP OID: discovery[{#CPU.UTIL},1.3.6.1.2.1.25.3.3.1.2]
Preprocessing: $..['{#CPU.UTIL}'].avg()
Descrição: MIB Utilizada - > HOST-RESOURCES-MIB::hrProcessorLoad
Fórmula:
1. Macro de LLD foi gerado no campo SNMP OID, armazenando as informações que o OID continha, guardando elas em uma lista.
2. Foi utilizado do Preprocessing método JSONPATH para fazer o cálculo médio utilizando os valores desses objetos armazenados, na macro LLD 'CPU_UTIL'
###########################################################################################################################################################
⚪ Triggers ⚪
Nome - > Uso de CPU maior que {ITEM.LASTVALUE1} por mais de 15m
Operational data - > Current utilization: {ITEM.LASTVALUE1}
{Monitoramento Simplify - Windows by SNMP using LLD:sys.cpu.load.min(15m)}>{$CPU.UTIL.MAX}
Descrição: Uso da CPU atingiu uma porcentagem além do permitido por mais de # minutos
###########################################################################################################################################################
-----------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------
⚪ Gráficos ⚪
Nome - > {#MEMNAME} ou {#FSNAME} - Uso de memória ou disco...
Adicionar os items protótipos.
Caso você use a combinação "Valor Total" e "Espaço utilizado"
Espaço Total - Tipo deve estar Graph sum.
Caso use a combinação "Valor Livre" e "Valor em uso"
Ambos os tipos devem ser como simples...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment