Last active
January 26, 2022 17:52
-
-
Save HorselessName/984a68b1f341a2ce86d2487f9b85e52b to your computer and use it in GitHub Desktop.
Template SNMP - Windows Server (LLD)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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