🌳OID-Baum & MIB

Jede Information auf einem Agenten hat eine weltweit eindeutige Adresse: den Object Identifier. Die MIB-Dateien geben den Zahlen Namen und Typen – übertragen werden aber nur die Zahlen.

🌲Der Baum zum Aufklappen

  • ▾📁iso(1)
    • ▾📁org(3)
      • ▾📁dod(6)
        • ▾📁internet(1)
          • 📁directory(1)
          • ▾📁mgmt(2)
            • ▾📁mib-2(1)
              • ▾📁system(1)
                • 🔹sysDescr(1)
                • 🔹sysObjectID(2)
                • 🔹sysUpTime(3)
                • 🔹sysContact(4)
                • 🔹sysName(5)
                • 🔹sysLocation(6)
                • 🔹sysServices(7)
                • 🔹sysORLastChange(8)
              • ▸📁interfaces(2)
              • 📁ip(4)
              • 📁tcp(6)
              • 📁udp(7)
              • 📁snmp(11)
              • ▸📁host(25)
              • ▸📁ifMIB(31)
          • 📁experimental(3)
          • ▸📁private(4)
          • 📁security(5)
          • ▸📁snmpV2(6)
🔹

sysUpTime

SkalarSNMPv2-MIB

Zeit seit dem (Neu-)Start des Management-Teils in Hundertstelsekunden

OID
.1.3.6.1.2.1.1.3
Syntax
TimeTicks
MAX-ACCESS
read-only
Pfad von der Wurzel
iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).system(1).sysUpTime(3)
$ snmpget -v2c -c beispiel-community 192.0.2.10 SNMPv2-MIB::sysUpTime.0
$ snmpget -v2c -c beispiel-community -On 192.0.2.10 .1.3.6.1.2.1.1.3.0   # numerisch, ohne MIB

📎 Quellen: RFC 2578 – SMIv2 · RFC 3418 – SNMPv2-MIB · RFC 2863 – IF-MIB · RFC 2790 – HOST-RESOURCES-MIB · UCD-SNMP-MIB · NET-SNMP-EXTEND-MIB / NET-SNMP-MIB

🧭OID auflösen: Zahl ↔ Name ↔ Instanz

Gib eine numerische oder symbolische OID ein, wie sie Net-SNMP akzeptiert (MODUL::name.index). Der orange markierte Teil ist die Instanz – bei Skalaren immer .0, bei Tabellen der Index der Zeile.

iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).ifMIB(31).ifMIBObjects(1).ifXTable(1).ifXEntry(1).ifHCInOctets(6).2
numerisch (-On)
.1.3.6.1.2.1.31.1.1.1.6.2
symbolisch
IF-MIB::ifHCInOctets.2
TabellenzelleTabellenzelle: Spalte ifHCInOctets, Index ifIndex = 2.
So steht die OID im Paket (BER, Tag 0x06)
1.3
2b
6
06
1
01
2
02
1
01
31
1f
1
01
1
01
1
01
6
06
2
02

06 0b 2b 06 01 02 01 1f 01 01 01 06 02

📎 Quellen: RFC 2578 – SMIv2 · RFC 3416 – Protokolloperationen (PDUs)

🔹Skalar: genau eine Instanz, .0

sysName ist der Objekttyp (1.3.6.1.2.1.1.5). Den Wert gibt es nur unter sysName.0. Ein snmpget … sysName ohne .0 liefert deshalb No Such Instance currently exists at this OID – ein GetNext bzw. Walk dagegen findet sysName.0, weil es der nächste Nachfolger ist.

📎 Quelle: RFC 3416 – Protokolloperationen (PDUs)

🗂️Tabelle: Spalte + Index

Eine Tabelle (ifTable) hat eine Zeilendefinition (ifEntry) mit Spalten. Die OID einer Zelle ist Spalte.Index: ifInOctets.2 = 1.3.6.1.2.1.2.2.1.10.2. Weil lexikografisch sortiert wird, liefert ein Walk die Tabelle spaltenweise – erst alle ifIndex, dann alle ifDescr … Text-Indizes wie bei nsExtendOutput1Line."test1" werden als Länge + ASCII-Codes kodiert.

📎 Quellen: RFC 2578 – SMIv2 · RFC 2863 – IF-MIB

📊ifTable des Beispiel-Agenten gw1.example.org

Zelle anfahren zeigt die OID
Index ↓ / Spalte →
ifIndex
.1
ifDescr
.2
ifType
.3
ifMtu
.4
ifSpeed
.5
ifPhysAddress
.6
ifAdminStatus
.7
ifOperStatus
.8
ifInOctets
.10
ifInUcastPkts
.11
ifOutOctets
.16
ifOutUcastPkts
.17
.11lo246553610000000„“111824419012044218244190120442
.22eth061500100000000002:00:00:00:00:0211398452341198231455112233445541200931
.33eth161500100000000002:00:00:00:00:03220000
ifEntry (1.3.6.1.2.1.2.2.1) · Spalte · Index
ifIndex ist kein Name
Der Index einer Schnittstelle ist eine Zahl, die sich nach einem Neustart ändern kann. Monitoring-Werkzeuge ordnen deshalb über ifName/ifDescr (oder ifAlias) zu und nicht über die Nummer allein.

📎 Quellen: RFC 2863 – IF-MIB · RFC 1213 – MIB-II

🔣SMIv2-Datentypen

TypBER-TagWertebereichtypische ObjekteHinweis
INTEGER / Integer320x02−2³¹ … 2³¹−1Aufzählungen (ifAdminStatus up(1)/down(2)), Kennzahlen
OCTET STRING0x040 … 65 535 OktetteTexte (DisplayString ≤ 255), MAC-Adressen, engineIDDisplayString ist nur eine Textkonvention
OBJECT IDENTIFIER0x06≤ 128 Sub-IDs à 32 BitsysObjectID, snmpTrapOID.0
IpAddress0x404 Oktettenur IPv4 – für IPv6 gibt es InetAddress
Counter320x410 … 2³²−1, läuft überifInOctets, ifInErrorsnur Differenzen sind sinnvoll
Gauge32 / Unsigned320x420 … 2³²−1, bleibt am Maximum stehenifSpeed, ifHighSpeed, Warteschlangenkann steigen und fallen
TimeTicks0x430 … 2³²−1 HundertstelsekundensysUpTime, ifLastChangeÜberlauf nach ≈ 497 Tagen
Opaque0x44beliebige BER-Datennur noch aus Kompatibilität
Counter640x460 … 2⁶⁴−1, läuft überifHCInOctets, ifHCOutOctetsgibt es in SNMPv1 nicht

📎 Quellen: RFC 2578 – SMIv2 · RFC 3416 – Protokolloperationen (PDUs)

⏱️Zählerüberlauf-Rechner

Schnittstelle bei Volllast
Counter32 (ifInOctets)34,4 s
bis der Zähler einmal komplett durchgelaufen ist (2^32 Oktette)
Counter64 (ifHCInOctets)4.676 Jahre
bis der Zähler einmal komplett durchgelaufen ist (2^64 Oktette)
RFC 2863: ab 650 Mbit/s: 64-Bit-Zähler für Oktette und Pakete Pflicht. Wer alle 5 Minuten abfragt, verpasst bei 32 Bit ganze Überläufe – die Kurve zeigt dann Unsinn.
TimeTicks umrechnen (Hundertstelsekunden)
Timeticks: (8563453) 23:47:14.53

sysUpTime zählt die Laufzeit des Agenten, nicht des Rechners (dafür gibt es hrSystemUptime). Nach 2³² Hundertstelsekunden ≈ 497,1 Tagen beginnt er wieder bei 0 – ein „Neustart“ im Monitoring kann also auch ein Überlauf sein.

📎 Quellen: RFC 2578 – SMIv2 · RFC 2863 – IF-MIB · RFC 3418 – SNMPv2-MIB