Přidání vlastního OID
Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID - Object Identifier. OID je tvořeno posloupností čísel oddělených tečkou, tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo. Celá tato stromová struktura je uložena v MIB databázi. Navíc MIB databáze obsahuje jména a popisy jednotlivých hodnot (OID). MIB databáze může být doplněna o další hodnoty pomocí části struktury uložené v MIB souboru.
Příkladem OID může být třeba hodnota 1.3.6.1.2.1.2.2.1.6.1, které odpovídá textová verze z MIB databáze iso.org.dod.internet.mgmt.mib-2.interfaces.ifTable.ifEntry.ifPhysAddress.
Jak přidělit vlastnímu OID skript?
Do /etc/snmp/snmpd.conf přidáme rádek ve tvaru
pass [OID] /bin/sh /usr/local/bin/muj_skript.sh
Příklad:
pass .1.3.6.1.4.1.2021.255 /bin/sh /tmp/passtest.sh
kde passtest.sh má následující obsah:
#!/bin/sh -f PATH=$PATH:/bin:/usr/bin:/usr/ucb PLACE=".1.3.6.1.4.1.2021.255" REQ="$2" if [ "$1" = "-s" ]; then echo $* >> /tmp/passtest.log exit 0 fi if [ "$1" = "-n" ]; then case "$REQ" in $PLACE) RET=$PLACE.1 ;; $PLACE.1) RET=$PLACE.2.1 ;; $PLACE.2.1) RET=$PLACE.2.2 ;; $PLACE.2.2) RET=$PLACE.3 ;; $PLACE.3) RET=$PLACE.4 ;; $PLACE.4) RET=$PLACE.5 ;; $PLACE.5) RET=$PLACE.6 ;; *) exit 0 ;; esac else case "$REQ" in $PLACE) exit 0 ;; *) RET=$REQ ;; esac fi echo "$RET" case "$RET" in $PLACE.1) echo "string"; echo "life the universe and everything"; exit 0 ;; $PLACE.2.1) echo "integer"; echo "42"; exit 0 ;; $PLACE.2.2) echo "objectid"; echo ".1.3.6.1.4.42.42.42"; exit 0 ;; $PLACE.3) echo "timeticks"; echo "363136200"; exit 0 ;; $PLACE.4) echo "ipaddress"; echo "127.0.0.1" ;; $PLACE.5) echo "counter"; echo "42"; exit 0 ;; $PLACE.6) echo "gauge"; echo "42"; exit 0 ;; *) echo "string"; echo "ack... $RET $REQ"; exit 0 ;; esac
Pro otestování spustíme
snmpwalk -O n -v 1 -c public <hostname nebo ip adresa snmp stroje> .1.3.6.1.4.1.2021.255
a výsledek by měl vypadat nějak takhle:
enterprises.ucdavis.255.1 = "life the universe and everything" enterprises.ucdavis.255.2.1 = 42 enterprises.ucdavis.255.2.2 = OID: 42.42.42 enterprises.ucdavis.255.3 = Timeticks: (363136200) 42 days, 0:42:42 enterprises.ucdavis.255.4 = IpAddress: 127.0.0.1 enterprises.ucdavis.255.5 = 42 enterprises.ucdavis.255.6 = Gauge: 42