bundlewrap/bundles/routeros-monitoring/metadata.py

344 lines
19 KiB
Python

# h = repo.libs.hashable.hashable
# defaults = {
# 'apt': {
# 'packages': {
# 'snmp': {},
# 'snmp-mibs-downloader': {},
# },
# },
# }
# @metadata_reactor.provides(
# 'telegraf/inputs/snmp',
# )
# def routeros_monitoring_telegraf_inputs(metadata):
# return {
# "telegraf": {
# "config": {
# "processors": {
# "enum": [
# h({
# "tagpass": {
# "operating_system": ["routeros"],
# },
# "mapping": [
# h({
# "tag": "agent_host",
# "dest": "host",
# "default": "unknown",
# "value_mappings": {
# routeros_node.hostname: routeros_node.name
# for routeros_node in repo.nodes_in_group("routeros")
# },
# })
# ]
# })
# ]
# },
# "inputs": {
# "snmp": {
# h({
# "agents": [
# f"udp://{routeros_node.hostname}:161"
# for routeros_node in repo.nodes_in_group("routeros")
# ],
# "version": 2,
# "community": "public",
# "interval": "30s",
# "tags": {
# "operating_system": "routeros",
# },
# "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,
# },
# # join IF-MIB for better labels
# {
# "name": "ifAlias",
# "oid": "IF-MIB::ifAlias",
# "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",
# },
# ],
# },
# ],
# })
# },
# },
# },
# },
# }