Templates Datacom DmOS

This commit is contained in:
HalbeBruno
2026-04-14 09:13:49 -03:00
parent 8b827dbef5
commit 6aa87a8a2b
2 changed files with 47 additions and 754 deletions

View File

@@ -4,7 +4,9 @@
Template desenvolvido para monitoramento de equipamentos Datacom com sistema operacional **DmOS** via **SNMPv1/v2c**, compatível com o **Zabbix 7.2** ou superior.
Realiza o monitoramento completo de disponibilidade (ICMP), informações de sistema, interfaces de rede, CPU, memória, ventiladores (FANs), sensores de temperatura e fontes de alimentação (PSU), fazendo uso extensivo de **Low-Level Discovery (LLD)** para descoberta automática de componentes.
Realiza o monitoramento de disponibilidade (ICMP), informações de sistema, CPU, memória, ventiladores (FANs), sensores de temperatura e fontes de alimentação (PSU), fazendo uso extensivo de **Low-Level Discovery (LLD)** para descoberta automática de componentes.
> **Nota:** O monitoramento de interfaces de rede está disponível em um template separado.
---
@@ -28,10 +30,9 @@ Para o correto funcionamento das coletas SNMP, é necessário que os arquivos de
copy mibs
```
Em seguida, disponibilize os arquivos no diretório de MIBs do Zabbix (geralmente `/usr/share/snmp/mibs/` ou `/etc/snmp/mibs/`). As MIBs utilizadas por este template são:
Em seguida, disponibilize os arquivos no diretório de MIBs do servidor Zabbix (geralmente `/usr/share/snmp/mibs/` ou `/etc/snmp/mibs/`). As MIBs utilizadas por este template são:
- `SNMPv2-MIB`
- `IF-MIB`
- `DMOS-SYSMON-MIB`
- `DMOS-HW-MONITOR-MIB`
@@ -57,33 +58,7 @@ chmod +x /usr/lib/zabbix/externalscripts/dmos_hardware_monitor_mib_psu.py
## Configuração
### SNMP
Configure o host no Zabbix com interface **SNMP** apontando para o IP do equipamento. A macro `{$SNMP_COMMUNITY}` deve ser definida no host com a community correta:
| Macro | Valor padrão | Descrição |
|-------------------|-------------|----------------------------------|
| `{$SNMP_COMMUNITY}` | `public` | Community SNMP do equipamento |
### Filtros de Interface
As interfaces descobertas podem ser filtradas pelas seguintes macros. Altere os valores conforme necessário no host ou template:
| Macro | Valor padrão | Descrição |
|-------|-------------|-----------|
| `{$NET.IF.IFNAME.MATCHES}` | `^.*$` | Regex de nomes de interface a incluir |
| `{$NET.IF.IFNAME.NOT_MATCHES}` | `(^Software Loopback...\|^NULL...\|^[Ll]o...\|docker...\|br-...)` | Exclui loopbacks, docker e similares |
| `{$NET.IF.IFADMINSTATUS.MATCHES}` | `^.*` | Status administrativo a incluir |
| `{$NET.IF.IFADMINSTATUS.NOT_MATCHES}` | `^2$` | Exclui interfaces administrativamente down |
| `{$NET.IF.IFOPERSTATUS.MATCHES}` | `^u\|^1` | Status operacional a incluir |
| `{$NET.IF.IFOPERSTATUS.NOT_MATCHES}` | `^6$` | Exclui interfaces notPresent |
| `{$NET.IF.IFALIAS.MATCHES}` | `.*` | Filtra por alias |
| `{$NET.IF.IFALIAS.NOT_MATCHES}` | `CHANGE_IF_NEEDED` | Desabilitado por padrão |
| `{$NET.IF.IFDESCR.MATCHES}` | `.*` | Filtra por descrição |
| `{$NET.IF.IFDESCR.NOT_MATCHES}` | `CHANGE_IF_NEEDED` | Desabilitado por padrão |
| `{$NET.IF.IFTYPE.MATCHES}` | `.*` | Filtra por tipo de interface |
| `{$NET.IF.IFTYPE.NOT_MATCHES}` | `CHANGE_IF_NEEDED` | Desabilitado por padrão |
| `{$IFCONTROL}` | `1` | Habilita alertas de link down (0 = desabilita) |
Configure o host no Zabbix com interface **SNMP** apontando para o IP do equipamento. Defina a macro `{$SNMP_COMMUNITY}` no host com a community correta.
---
@@ -103,11 +78,11 @@ As interfaces descobertas podem ser filtradas pelas seguintes macros. Altere os
### Disponibilidade (ICMP)
| Item | Chave | Intervalo | Retenção |
|------|-------|-----------|---------|
| ICMP Ping | `icmpping` | padrão | 90 dias |
| ICMP Loss | `icmppingloss` | padrão | 90 dias |
| ICMP Response Time | `icmppingsec` | padrão | 90 dias |
| Item | Chave | Retenção |
|------|-------|---------|
| ICMP Ping | `icmpping` | 90 dias |
| ICMP Loss | `icmppingloss` | 90 dias |
| ICMP Response Time | `icmppingsec` | 90 dias |
### Traps SNMP
@@ -119,45 +94,33 @@ As interfaces descobertas podem ser filtradas pelas seguintes macros. Altere os
## Regras de Descoberta (LLD)
### 1. SNMP Discovery — Network Interfaces
### 1. SNMP Discovery — PSU
**Chave:** `net.if.discovery`
**Tipo:** SNMP Agent (IF-MIB)
**Intervalo:** 1 hora
**Chave:** `dmos_hardware_monitor_mib_psu.py["{HOST.CONN}", "{$SNMP_COMMUNITY}"]`
**Tipo:** External Check (script Python)
**Intervalo:** 60 min
> ⚠️ **Requer** o script `dmos_hardware_monitor_mib_psu.py` instalado no diretório de scripts externos do Zabbix.
**Variáveis descobertas:**
| Macro | Descrição |
|-------|-----------|
| `{#IFNAME}` | Nome da interface |
| `{#IFALIAS}` | Alias/descrição da interface |
| `{#IFDESCR}` | Descrição do IF-MIB |
| `{#IFOPERSTATUS}` | Status operacional |
| `{#IFADMINSTATUS}` | Status administrativo |
| `{#IFTYPE}` | Tipo de interface |
| `{#SNMPINDEX}` | Índice SNMP |
| `{#PSU_SLOT_NAME}` | Nome do slot da PSU (ex.: `1/PSU1`) |
| `{#PSU_SLOT_NAME_LEN}` | Comprimento do nome em formato decimal |
| `{#PSU_SLOT_NAME_DEC}` | Nome em decimal para composição do OID SNMP (ex.: `49.47.80.83.85.49`) |
**Itens criados por interface:**
**Itens criados:**
| Item | OID | Intervalo | Unidade |
|------|-----|-----------|---------|
| Bits recebidos | `ifHCInOctets` | 3 min | bps |
| Bits enviados | `ifHCOutOctets` | 3 min | bps |
| Pacotes recebidos descartados | `ifInDiscards` | 3 min | — |
| Pacotes recebidos com erros | `ifInErrors` | 3 min | — |
| Pacotes enviados descartados | `ifOutDiscards` | 3 min | — |
| Pacotes enviados com erros | `ifOutErrors` | 3 min | — |
| Velocidade da interface | `ifHighSpeed` | 5 min | bps |
| Status operacional | `ifOperStatus` | — | — |
| Tipo de interface | `ifType` | 1 hora | — |
**Gráfico:** `Interface {#IFNAME}({#IFALIAS}): Network traffic`
| Item | OID | Intervalo |
|------|-----|-----------|
| `{#PSU_SLOT_NAME}` Status | `DMOS-HW-MONITOR-MIB::psuStatus.{#PSU_SLOT_NAME_LEN}.{#PSU_SLOT_NAME_DEC}` | 5 min |
---
### 2. SNMP Discovery — CPU Core
### 2. SNMP Discovery — CPU Cores
**Chave:** `snmp.discovery.cpu.core`
**Chave:** `snmp.discovery.cpu.cores`
**Tipo:** SNMP Agent (`DMOS-SYSMON-MIB::cpuCoreFiveSecondsActive`)
**Intervalo:** 60 min
@@ -251,30 +214,9 @@ As interfaces descobertas podem ser filtradas pelas seguintes macros. Altere os
| Hysteresis Temperature | `temperatureSensorHysteresis` | ºC | × 0,1 |
| Max Temperature | `temperatureSensorMaxTemperature` | ºC | × 0,1 |
| Min Temperature | `temperatureSensorMinTemperature` | ºC | × 0,1 |
| Read Error | `temperatureSensorTemperatureReadError` | — | — |
---
### 7. SNMP Discovery — PSU
**Chave:** `dmos_hardware_monitor_mib_psu.py["{HOST.CONN}", "{$SNMP_COMMUNITY}"]`
**Tipo:** External Check (script Python)
**Intervalo:** 60 min
> ⚠️ **Requer** o script `dmos_hardware_monitor_mib_psu.py` instalado no diretório de scripts externos do Zabbix.
**Variáveis descobertas:**
| Macro | Descrição |
|-------|-----------|
| `{#PSU_SLOT_NAME}` | Nome do slot da PSU (ex.: `1/PSU1`) |
| `{#PSU_SLOT_NAME_LEN}` | Comprimento do nome em formato decimal |
| `{#PSU_SLOT_NAME_DEC}` | Nome em decimal para uso no OID SNMP (ex.: `49.47.80.83.85.49`) |
**Itens criados:**
| Item | OID | Intervalo |
|------|-----|-----------|
| `{#PSU_SLOT_NAME}` Status | `DMOS-HW-MONITOR-MIB::psuStatus.{#PSU_SLOT_NAME_LEN}.{#PSU_SLOT_NAME_DEC}` | 5 min |
**Gráfico:** `Sensor {#SNMPVALUE} Temperature` (Current / Max / Min)
---
@@ -288,20 +230,17 @@ As interfaces descobertas podem ser filtradas pelas seguintes macros. Altere os
| No SNMP data collection | 🟡 Warning | SNMP indisponível por `{$SNMP.TIMEOUT}` (padrão: 5 min) |
| Host has been restarted | 🟡 Warning | Uptime < 10 minutos |
| High ICMP ping loss | 🟡 Warning | Perda > `{$ICMP_LOSS_WARN}`% (padrão: 20%) por 5 min |
| High ICMP ping response time | 🟡 Warning | Tempo médio > `{$ICMP_RESPONSE_TIME_WARN}`s (padrão: 0.15s) por 5 min |
| High ICMP ping response time | 🟡 Warning | Tempo médio > `{$ICMP_RESPONSE_TIME_WARN}`s (padrão: 0,15s) por 5 min |
| System name has changed | 🔵 Info | Nome SNMP alterado |
### Trigger Prototypes (LLD)
| Nome | Severidade | Condição |
|------|-----------|---------|
| Interface `{#IFNAME}`: Link down | 🟠 Average | Status operacional = down (controlado por `{$IFCONTROL}`) |
| Interface `{#IFNAME}`: High bandwidth usage | 🟡 Warning | Utilização > `{$IF.UTIL.MAX}`% (padrão: 90%) por 15 min |
| Interface `{#IFNAME}`: High error rate | 🟡 Warning | Taxa de erros > `{$IF.ERRORS.WARN}` pps (padrão: 2) por 5 min |
| Interface `{#IFNAME}`: Ethernet has changed to lower speed | 🔵 Info | Velocidade caiu abaixo do máximo conhecido |
| CPU Load High Usage > `{$CPU.UTIL.CRIT}`% | 🟡 Warning | Uso de CPU ativo > 80% (padrão) por 5 min |
| CPU Core High Usage > `{$CPU.UTIL.CRIT}`% | 🟡 Warning | CPU Core ativo > 80% (padrão) por 5 min |
| CPU Load High Usage > `{$CPU.UTIL.CRIT}`% | 🟡 Warning | CPU Load ativo > 80% (padrão) por 5 min |
| Memory Available Low < 100MB | 🔴 High | Memória disponível < 100.000.000 bytes |
| FAN `{#SNMPVALUE}` Status Error | 🔴 High | Status do FAN diferente de OK (0) |
| FAN `{#SNMPVALUE}` Status Error | 🔴 High | Status do FAN diferente de Normal (0) |
| FAN `{#SNMPVALUE}` Read Error | 🔴 High | Erro de leitura de velocidade do FAN |
| PSU Status Failed: `{#PSU_SLOT_NAME}` | 🔴 High | Status PSU ≠ OK e diferente da leitura anterior |
@@ -311,30 +250,16 @@ As interfaces descobertas podem ser filtradas pelas seguintes macros. Altere os
| Macro | Valor padrão | Descrição |
|-------|-------------|-----------|
| `{$SNMP_COMMUNITY}` | `public` | Community SNMP |
| `{$SNMP_COMMUNITY}` | `public` | Community SNMP do equipamento |
| `{$SNMP.TIMEOUT}` | `5m` | Timeout para trigger de SNMP indisponível |
| `{$CPU.UTIL.CRIT}` | `80` | Limiar crítico de uso de CPU (%) |
| `{$MEMORY.UTIL.MAX}` | `90` | Limiar máximo de uso de memória (%) |
| `{$ICMP_LOSS_WARN}` | `20` | Limiar de aviso de perda de pacotes ICMP (%) |
| `{$ICMP_RESPONSE_TIME_WARN}` | `0.15` | Limiar de aviso de tempo de resposta ICMP (s) |
| `{$IF.UTIL.MAX}` | `90` | Utilização máxima de interface (%) |
| `{$IF.ERRORS.WARN}` | `2` | Taxa de erro mínima para disparo de alerta (pps) |
| `{$IFCONTROL}` | `1` | Controle de alertas de link down (0 = desabilita) |
| `{$FAN_CRIT_STATUS}` | `2` | Código de status crítico para FANs |
| `{$TEMP_WARN}` | `50` | Temperatura de aviso (ºC) |
| `{$TEMP_CRIT}` | `60` | Temperatura crítica (ºC) |
| `{$TEMP_CRIT_LOW}` | `5` | Temperatura crítica mínima (ºC) |
| `{$NET.IF.IFNAME.NOT_MATCHES}` | `(loopback\|null\|lo\|docker...)` | Interfaces excluídas da descoberta |
| `{$NET.IF.IFADMINSTATUS.NOT_MATCHES}` | `^2$` | Exclui interfaces administrativamente down |
| `{$NET.IF.IFOPERSTATUS.NOT_MATCHES}` | `^6$` | Exclui interfaces notPresent |
---
## Dashboards
| Nome | Conteúdo |
|------|---------|
| Network interfaces | Gráfico em grade com tráfego de todas as interfaces descobertas |
---
@@ -343,14 +268,13 @@ As interfaces descobertas podem ser filtradas pelas seguintes macros. Altere os
| Nome | Itens |
|------|-------|
| Uptime | `system.uptime[sysUpTime.0]` |
| Interface `{#IFNAME}({#IFALIAS})`: Network traffic | Bits in/out, discards in/out |
| CPU Core `{#SNMPINDEX}` Last 1 Minute | Active/Interrupt/Nice/Softirq/System/User/Wait |
| CPU Core `{#SNMPINDEX}` Last 5 Minutes | Active/Interrupt/Nice/Softirq/System/User/Wait |
| CPU Load `{#SNMPINDEX}` Last 1 Minute | cpuLoadOneMinuteActive |
| CPU Load `{#SNMPINDEX}` Last 5 Minutes | cpuLoadFiveMinutesActive |
| Memory Status `{#SNMPINDEX}` Last 1 minute | Available/Buffered/Cached/Free/SlabRecl/SlabUnrecl/Total/Used |
| FAN `{#SNMPVALUE}` Speed | fanSpeed |
| Temperature Sensor `{#SNMPVALUE}` | Current/Max/Min/Hysteresis |
| CPU Core `{#SNMPINDEX}` Last 1 Minute | Active / Interrupt / Nice / Softirq / System / User / Wait |
| CPU Core `{#SNMPINDEX}` Last 5 Minutes | Active / Interrupt / Nice / Softirq / System / User / Wait |
| CPU Load `{#SNMPINDEX}` Last 1 Minute | `cpuLoadOneMinuteActive` |
| CPU Load `{#SNMPINDEX}` Last 5 Minutes | `cpuLoadFiveMinutesActive` |
| Memory Status `{#SNMPINDEX}` Last 1 minute | Available / Buffered / Cached / Free / SlabRecl / SlabUnrecl / Total / Used |
| FAN `{#SNMPVALUE}` Speed | `fanSpeed` |
| Sensor `{#SNMPVALUE}` Temperature | Current / Max / Min |
---
@@ -362,9 +286,9 @@ As interfaces descobertas podem ser filtradas pelas seguintes macros. Altere os
| `zabbix.host.available` | SNMP Agent Availability (0/1/2) |
| `IF-MIB::ifOperStatus` | Status operacional de interfaces |
| `IF-MIB::ifType` | Tipo de interface (290+ mapeamentos) |
| `DmOS-HW-MONITOR-MIB PSU Status` | Status das fontes de alimentação |
| `DmOS-HW-MONITOR Environment Sensor Status` | Status dos FANs |
| `DmOS-HW-MONITOR Read Error` | Erro de leitura de sensor |
| `DmOS-HW-MONITOR-MIB PSU Status` | Status das fontes (Ok / Power Input Failure / Fuse Failure / Error) |
| `DmOS-HW-MONITOR Environment Sensor Status` | Status dos FANs (Normal / High / Low / Critical / Error / Fail) |
| `DmOS-HW-MONITOR Read Error` | Erro de leitura de sensor (Normal / Abnormal) |
---
@@ -384,8 +308,11 @@ Os seguintes campos de inventário são preenchidos automaticamente:
## Instalação
1. Importe o arquivo `zbx_export_templates.xml` no Zabbix via **Data collection → Templates → Import**.
2. Copie as MIBs DmOS para o servidor Zabbix e reinicie o `snmpd` ou o Zabbix Server conforme necessário.
3. Copie `dmos_hardware_monitor_mib_psu.py` para `/usr/lib/zabbix/externalscripts/` e permissão de execução.
2. Copie as MIBs DmOS para o servidor Zabbix (`/usr/share/snmp/mibs/` ou equivalente).
3. Copie `dmos_hardware_monitor_mib_psu.py` para `/usr/lib/zabbix/externalscripts/` e aplique permissão de execução:
```bash
chmod +x /usr/lib/zabbix/externalscripts/dmos_hardware_monitor_mib_psu.py
```
4. Crie ou edite o host do equipamento Datacom no Zabbix:
- Adicione interface SNMP apontando para o IP do equipamento.
- Defina a macro `{$SNMP_COMMUNITY}` com a community correta.