350 lines
19 KiB
Python
350 lines
19 KiB
Python
h = repo.libs.hashable.hashable
|
|
|
|
defaults = {
|
|
'apt': {
|
|
'packages': {
|
|
'snmp': {},
|
|
'snmp-mibs-downloader': {},
|
|
},
|
|
},
|
|
}
|
|
|
|
|
|
@metadata_reactor.provides(
|
|
'telegraf/config/inputs/snmp',
|
|
)
|
|
def routeros_monitoring_telegraf_inputs(metadata):
|
|
return {
|
|
"telegraf": {
|
|
"config": {
|
|
"inputs": {
|
|
"snmp": {
|
|
h({
|
|
"agents": [f"udp://{routeros_node.hostname}:161"],
|
|
"version": 2,
|
|
"community": "public",
|
|
"interval": "30s",
|
|
"tags": {
|
|
"host": routeros_node.name,
|
|
"operating_system": "routeros",
|
|
},
|
|
|
|
# scalar -> input-level
|
|
"field": [
|
|
{
|
|
"name": "switch_name",
|
|
"oid": "SNMPv2-MIB::sysName.0",
|
|
"is_tag": True,
|
|
},
|
|
# MikroTik Health (scalars)
|
|
{
|
|
"name": "hw_voltage",
|
|
"oid": "MIKROTIK-MIB::mtxrHlVoltage",
|
|
},
|
|
{
|
|
"name": "hw_temp",
|
|
"oid": "MIKROTIK-MIB::mtxrHlTemperature",
|
|
},
|
|
{
|
|
"name": "hw_cpu_temp",
|
|
"oid": "MIKROTIK-MIB::mtxrHlCpuTemperature",
|
|
},
|
|
{
|
|
"name": "hw_board_temp",
|
|
"oid": "MIKROTIK-MIB::mtxrHlBoardTemperature",
|
|
},
|
|
{
|
|
"name": "hw_fan1_rpm",
|
|
"oid": "MIKROTIK-MIB::mtxrHlFanSpeed1",
|
|
},
|
|
{
|
|
"name": "hw_fan2_rpm",
|
|
"oid": "MIKROTIK-MIB::mtxrHlFanSpeed2",
|
|
},
|
|
],
|
|
"table": [
|
|
# MikroTik Health (table)
|
|
{
|
|
"name": "hw",
|
|
"oid": "MIKROTIK-MIB::mtxrGaugeTable",
|
|
"field": [
|
|
{
|
|
"name": "sensor",
|
|
"oid": "MIKROTIK-MIB::mtxrGaugeName",
|
|
"is_tag": True,
|
|
},
|
|
{
|
|
"name": "value",
|
|
"oid": "MIKROTIK-MIB::mtxrGaugeValue",
|
|
},
|
|
{
|
|
"name": "unit",
|
|
"oid": "MIKROTIK-MIB::mtxrGaugeUnit",
|
|
"is_tag": True,
|
|
},
|
|
],
|
|
},
|
|
# Interface statistics (standard IF-MIB)
|
|
{
|
|
"name": "interface",
|
|
"oid": "IF-MIB::ifTable",
|
|
"field": [
|
|
# 6: ethernetCsmacd (physischer Ethernet-Port)
|
|
# 24: softwareLoopback
|
|
# 53: propVirtual (oft VLANs bei MikroTik)
|
|
# 131: tunnel
|
|
# 135: l2vlan
|
|
# 161: ieee8023adLag (Bonding/LACP)
|
|
# 209: bridge
|
|
{
|
|
"name": "ifType",
|
|
"oid": "IF-MIB::ifType",
|
|
"is_tag": True,
|
|
},
|
|
|
|
# Labels (optional but recommended)
|
|
{
|
|
"name": "ifName",
|
|
"oid": "IF-MIB::ifName",
|
|
"is_tag": True,
|
|
},
|
|
{
|
|
"name": "ifAlias",
|
|
"oid": "IF-MIB::ifAlias",
|
|
"is_tag": True,
|
|
},
|
|
|
|
# Bytes (64-bit)
|
|
{
|
|
"name": "in_octets",
|
|
"oid": "IF-MIB::ifHCInOctets",
|
|
},
|
|
{
|
|
"name": "out_octets",
|
|
"oid": "IF-MIB::ifHCOutOctets",
|
|
},
|
|
|
|
# Packets (64-bit unicast)
|
|
{
|
|
"name": "in_ucast_pkts",
|
|
"oid": "IF-MIB::ifHCInUcastPkts",
|
|
},
|
|
{
|
|
"name": "out_ucast_pkts",
|
|
"oid": "IF-MIB::ifHCOutUcastPkts",
|
|
},
|
|
{
|
|
"name": "in_mcast_pkts",
|
|
"oid": "IF-MIB::ifHCInMulticastPkts",
|
|
},
|
|
{
|
|
"name": "in_bcast_pkts",
|
|
"oid": "IF-MIB::ifHCInBroadcastPkts",
|
|
},
|
|
{
|
|
"name": "out_mcast_pkts",
|
|
"oid": "IF-MIB::ifHCOutMulticastPkts",
|
|
},
|
|
{
|
|
"name": "out_bcast_pkts",
|
|
"oid": "IF-MIB::ifHCOutBroadcastPkts",
|
|
},
|
|
|
|
# Drops / Errors
|
|
{
|
|
"name": "in_discards",
|
|
"oid": "IF-MIB::ifInDiscards",
|
|
},
|
|
{
|
|
"name": "out_discards",
|
|
"oid": "IF-MIB::ifOutDiscards",
|
|
},
|
|
{
|
|
"name": "in_errors",
|
|
"oid": "IF-MIB::ifInErrors",
|
|
},
|
|
{
|
|
"name": "out_errors",
|
|
"oid": "IF-MIB::ifOutErrors",
|
|
},
|
|
],
|
|
},
|
|
# Interface statistics (MikroTik-specific mib)
|
|
{
|
|
"name": "interface_errors",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsTable",
|
|
"field": [
|
|
# Join key / label (usually identical to IF-MIB ifName)
|
|
{
|
|
"name": "ifName",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsName",
|
|
"is_tag": True,
|
|
},
|
|
|
|
# =========================
|
|
# Physical layer (L1/L2)
|
|
# =========================
|
|
# CRC/FCS errors → very often cabling, connectors, SFPs, signal quality (EMI)
|
|
{
|
|
"name": "rx_fcs_errors",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsRxFCSError",
|
|
},
|
|
# Alignment errors → typically duplex mismatch or PHY problems
|
|
{
|
|
"name": "rx_align_errors",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsRxAlignError",
|
|
},
|
|
# Code errors → PHY encoding errors (signal/SFP/PHY)
|
|
{
|
|
"name": "rx_code_errors",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsRxCodeError",
|
|
},
|
|
# Carrier errors → carrier lost (copper issues, autoneg, PHY instability)
|
|
{
|
|
"name": "rx_carrier_errors",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsRxCarrierError",
|
|
},
|
|
# Jabber → extremely long invalid frames (faulty NIC/PHY, very severe)
|
|
{
|
|
"name": "rx_jabber",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsRxJabber",
|
|
},
|
|
|
|
# ==================================
|
|
# Length / framing anomalies (diagnostic)
|
|
# ==================================
|
|
# Frames shorter than minimum (noise, collisions, broken sender)
|
|
{
|
|
"name": "rx_too_short",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsRxTooShort",
|
|
},
|
|
# Frames longer than allowed (MTU mismatch, framing errors)
|
|
{
|
|
"name": "rx_too_long",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsRxTooLong",
|
|
},
|
|
# Fragments (often collision-related or duplex mismatch)
|
|
{
|
|
"name": "rx_fragment",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsRxFragment",
|
|
},
|
|
# Generic length errors
|
|
{
|
|
"name": "rx_length_errors",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsRxLengthError",
|
|
},
|
|
|
|
# ==================
|
|
# Drops (real packet loss)
|
|
# ==================
|
|
# RX drops (queue/ASIC/policy/overload) → highly alert-worthy
|
|
{
|
|
"name": "rx_drop",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsRxDrop",
|
|
},
|
|
# TX drops (buffer/queue exhaustion, scheduling, ASIC limits)
|
|
{
|
|
"name": "tx_drop",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsTxDrop",
|
|
},
|
|
|
|
# =========================================
|
|
# Duplex / collision indicators
|
|
# (should be zero on full-duplex links)
|
|
# =========================================
|
|
# Total collisions (relevant only for half-duplex or misconfigurations)
|
|
{
|
|
"name": "tx_collisions",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsTxCollision",
|
|
},
|
|
# Late collisions → almost always duplex mismatch / bad autoneg
|
|
{
|
|
"name": "tx_late_collisions",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsTxLateCollision",
|
|
},
|
|
# Aggregate collision counter (context)
|
|
{
|
|
"name": "tx_total_collisions",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsTxTotalCollision",
|
|
},
|
|
# Excessive collisions → persistent duplex problems
|
|
{
|
|
"name": "tx_excessive_collisions",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsTxExcessiveCollision",
|
|
},
|
|
|
|
# ==================
|
|
# Flow control (diagnostic)
|
|
# ==================
|
|
# Pause frames received (peer throttling you)
|
|
{
|
|
"name": "rx_pause",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsRxPause",
|
|
},
|
|
# Pause frames sent (you throttling the peer)
|
|
{
|
|
"name": "tx_pause",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsTxPause",
|
|
},
|
|
# Pause frames actually honored
|
|
{
|
|
"name": "tx_pause_honored",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsTxPauseHonored",
|
|
},
|
|
|
|
# ==========
|
|
# Stability
|
|
# ==========
|
|
# Link-down events (loose cables, bad SFPs, PoE power drops, reboots)
|
|
{
|
|
"name": "link_downs",
|
|
"oid": "MIKROTIK-MIB::mtxrInterfaceStatsLinkDowns",
|
|
},
|
|
],
|
|
},
|
|
# PoE
|
|
{
|
|
"name": "poe",
|
|
"oid": "MIKROTIK-MIB::mtxrPOETable",
|
|
"field": [
|
|
{
|
|
"name": "ifName",
|
|
"oid": "IF-MIB::ifName",
|
|
"is_tag": True,
|
|
},
|
|
{
|
|
"name": "ifAlias",
|
|
"oid": "IF-MIB::ifAlias",
|
|
"is_tag": True,
|
|
},
|
|
{
|
|
"name": "ifindex",
|
|
"oid": "MIKROTIK-MIB::mtxrPOEInterfaceIndex",
|
|
"is_tag": True,
|
|
},
|
|
{
|
|
"name": "status",
|
|
"oid": "MIKROTIK-MIB::mtxrPOEStatus",
|
|
},
|
|
{
|
|
"name": "voltage",
|
|
"oid": "MIKROTIK-MIB::mtxrPOEVoltage",
|
|
},
|
|
{
|
|
"name": "current",
|
|
"oid": "MIKROTIK-MIB::mtxrPOECurrent",
|
|
},
|
|
{
|
|
"name": "power",
|
|
"oid": "MIKROTIK-MIB::mtxrPOEPower",
|
|
},
|
|
],
|
|
},
|
|
],
|
|
})
|
|
for routeros_node in repo.nodes_in_group("routeros")
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|