Files
templates/datacom/datacom_dmos/README.md
2026-04-14 09:13:49 -03:00

334 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# IPv0 - Template Datacom DmOS
## Visão Geral
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 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.
---
## Equipamentos Testados
- Datacom DM4170
- Datacom DM4270
- Datacom DM4370
- Datacom DM4610
- Outros equipamentos Datacom com DmOS
---
## Requisitos
### MIBs
Para o correto funcionamento das coletas SNMP, é necessário que os arquivos de MIB do equipamento estejam presentes no servidor Zabbix. Copie as MIBs diretamente do equipamento com o comando DmOS:
```
copy mibs
```
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`
- `DMOS-SYSMON-MIB`
- `DMOS-HW-MONITOR-MIB`
### Script Externo — PSU Discovery
A regra de descoberta de fontes de alimentação (PSU) depende de um script Python externo. Copie o arquivo `dmos_hardware_monitor_mib_psu.py` para o diretório de scripts externos do Zabbix:
```bash
# Ubuntu / Debian
cp dmos_hardware_monitor_mib_psu.py /usr/lib/zabbix/externalscripts/
chmod +x /usr/lib/zabbix/externalscripts/dmos_hardware_monitor_mib_psu.py
```
### Versão Zabbix
| Versão | Suporte |
|--------|---------|
| 7.2 | ✅ Testado |
| 7.0+ | ✅ Compatível |
| 6.x | ⚠️ Não garantido |
---
## Configuração
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.
---
## Itens Coletados
### Sistema (via SNMPv2-MIB)
| Item | OID | Intervalo | Retenção |
|------|-----|-----------|---------|
| System Contact | `SNMPv2-MIB::sysContact.0` | 60 min | 90 dias |
| System Description | `SNMPv2-MIB::sysDescr.0` | 60 min | 2 semanas |
| System Location | `SNMPv2-MIB::sysLocation.0` | 60 min | 7 dias |
| System Name | `SNMPv2-MIB::sysName.0` | 60 min | 2 semanas |
| System Object ID | `1.3.6.1.2.1.1.2.0` | 15 min | — |
| System Uptime | `1.3.6.1.2.1.1.3.0` | 60 min | 7 dias |
| SNMP Agent Availability | Interno Zabbix | — | 7 dias |
### Disponibilidade (ICMP)
| Item | Chave | Retenção |
|------|-------|---------|
| ICMP Ping | `icmpping` | 90 dias |
| ICMP Loss | `icmppingloss` | 90 dias |
| ICMP Response Time | `icmppingsec` | 90 dias |
### Traps SNMP
| Item | Chave | Descrição |
|------|-------|-----------|
| SNMP Traps (fallback) | `snmptrap.fallback` | Coleta todos os traps SNMP sem mapeamento específico |
---
## Regras de Descoberta (LLD)
### 1. 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 composição do 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 |
---
### 2. SNMP Discovery — CPU Cores
**Chave:** `snmp.discovery.cpu.cores`
**Tipo:** SNMP Agent (`DMOS-SYSMON-MIB::cpuCoreFiveSecondsActive`)
**Intervalo:** 60 min
**Itens criados por core (1 e 5 minutos):**
| Item | MIB | Unidade |
|------|-----|---------|
| Active CPU core | `cpuCoreOneMinuteActive` / `cpuCoreFiveMinutesActive` | % |
| Interrupt CPU core | `cpuCoreOneMinuteInterrupt` / `cpuCoreFiveMinutesInterrupt` | % |
| Nice CPU core | `cpuCoreOneMinuteNice` / `cpuCoreFiveMinutesNIce` | % |
| Softirq CPU core | `cpuCoreOneMinuteSoftirq` / `cpuCoreFiveMinutesSoftirq` | % |
| System CPU core | `cpuCoreOneMinuteSystem` / `cpuCoreFiveMinutesSystem` | % |
| User CPU core | `cpuCoreOneMinuteUser` / `cpuCoreFiveMinutesUser` | % |
| Wait CPU core | `cpuCoreOneMinuteWait` / `cpuCoreFiveMinutesWait` | % |
**Gráficos:** `CPU Core {#SNMPINDEX} Last 1 Minute` e `CPU Core {#SNMPINDEX} Last 5 Minutes`
---
### 3. SNMP Discovery — CPU Load
**Chave:** `snmp.discovery.cpu.load`
**Tipo:** SNMP Agent (`DMOS-SYSMON-MIB::cpuLoadFiveSecondsActive`)
**Intervalo:** 60 min
**Itens criados:**
| Item | MIB | Intervalo | Unidade |
|------|-----|-----------|---------|
| Active CPU load last 1 minute | `cpuLoadOneMinuteActive` | padrão | % |
| Active CPU load last 5 minutes | `cpuLoadFiveMinutesActive` | 5 min | % |
**Gráficos:** `CPU Load {#SNMPINDEX} Last 1 Minute` e `CPU Load {#SNMPINDEX} Last 5 Minutes`
---
### 4. SNMP Discovery — Memory
**Chave:** `snmp.discovery.memory`
**Tipo:** SNMP Agent (`DMOS-SYSMON-MIB::memoryFiveSecondsTotal`)
**Intervalo:** 60 min
**Itens criados:**
| Item | MIB | Retenção |
|------|-----|---------|
| Available memory | `memoryOneMinuteAvailable` | 7 dias |
| Buffered memory | `memoryOneMinuteBuffered` | 7 dias |
| Cached memory | `memoryOneMinuteCached` | 7 dias |
| Free memory | `memoryOneMinuteFree` | 7 dias |
| Slab Reclaimed | `memoryOneMinuteSlabRecl` | 7 dias |
| Slab Unreclaimed | `memoryOneMinuteSlabUnrecl` | 7 dias |
| Total memory | `memoryOneMinuteTotal` | 7 dias |
| Used memory | `memoryOneMinuteUsed` | 7 dias |
**Gráfico:** `Memory Status {#SNMPINDEX} Last 1 minute`
---
### 5. SNMP Discovery — Fan
**Chave:** `snmp.discovery.fan`
**Tipo:** SNMP Agent (`DMOS-HW-MONITOR-MIB::fanDescription`)
**Intervalo:** 60 min
**Itens criados:**
| Item | MIB | Unidade |
|------|-----|---------|
| FAN Description | `fanDescription` | — |
| FAN Speed | `fanSpeed` | RPM |
| FAN Status | `fanSpeedStatus` | — |
| FAN Read Error | `fanSpeedReadError` | — |
**Gráfico:** `FAN {#SNMPVALUE} Speed`
---
### 6. SNMP Discovery — Temperature Sensor
**Chave:** `snmp.discovery.temp.sensor`
**Tipo:** SNMP Agent (`DMOS-HW-MONITOR-MIB::temperatureSensorDescription`)
**Intervalo:** 60 min
**Itens criados:**
| Item | MIB | Unidade | Pré-processamento |
|------|-----|---------|------------------|
| Current Temperature | `temperatureSensorCurrentTemperature` | ºC | × 0,1 |
| Description | `temperatureSensorDescription` | — | — |
| Hysteresis Temperature | `temperatureSensorHysteresis` | ºC | × 0,1 |
| Max Temperature | `temperatureSensorMaxTemperature` | ºC | × 0,1 |
| Min Temperature | `temperatureSensorMinTemperature` | ºC | × 0,1 |
| Read Error | `temperatureSensorTemperatureReadError` | — | — |
**Gráfico:** `Sensor {#SNMPVALUE} Temperature` (Current / Max / Min)
---
## Triggers
### Triggers Fixas
| Nome | Severidade | Condição |
|------|-----------|---------|
| Unavailable by ICMP ping | 🔴 High | 3 polls consecutivos sem resposta ICMP |
| 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 |
| System name has changed | 🔵 Info | Nome SNMP alterado |
### Trigger Prototypes (LLD)
| Nome | Severidade | Condição |
|------|-----------|---------|
| 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 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 |
---
## Macros do Template
| Macro | Valor padrão | Descrição |
|-------|-------------|-----------|
| `{$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) |
| `{$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) |
---
## Gráficos
| Nome | Itens |
|------|-------|
| Uptime | `system.uptime[sysUpTime.0]` |
| 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 |
---
## Value Maps
| Nome | Uso |
|------|-----|
| `Service state` | ICMP Ping (0=Down, 1=Up) |
| `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 (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) |
---
## Inventário de Host
Os seguintes campos de inventário são preenchidos automaticamente:
| Campo | Item |
|-------|------|
| `CONTACT` | System Contact |
| `HARDWARE` | System Description |
| `LOCATION` | System Location |
| `NAME` | System Name |
---
## 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 (`/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.
- Vincule o template **IPv0 - Template Datacom DmOS**.
5. Aguarde o próximo ciclo de polling para confirmar os dados coletados.
---
## Grupos de Template
- **Templates Datacom**
- **Templates IPv0**
---
## Autor
Teccnia — IPv0
Template derivado das MIBs proprietárias Datacom DmOS com base nos templates oficiais do repositório [datacom-teracom/dmos-zabbix-template](https://github.com/datacom-teracom/dmos-zabbix-template).