334 lines
12 KiB
Markdown
334 lines
12 KiB
Markdown
# 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). |