Al jaren maak ik gebruik van net-snmp om servers te monitoren. Vooral extenden vind ik dan erg leuk, omdat je de meest vreemde dingen kunt monitoren door een eenvoudig shell scriptje te gebruiken. Zoals ingelogde gebruikers, de leeftijd van je antivirus updates (oftewel: is de update gelukt), de leeftijd van je backups, het aantal neighbours op je netwerk en zo voort.
Dat ging dan als bijv:
snmpd.conf
En opvragen als:
Echt perfecto, ik weet altijd waar de resultaten komen, namelijk in
oid.100.1 = shell exit code
oid.101.1 = output, regel 1
oid.102.1 = output, regel 2
oid.103.1 = output, regel 3
Noodgedwongen heb ik afgelopen week een server moeten updaten naar een distro waar 5.4rc2 bij zit. Deze ondersteunt opeens deze syntax niet meer. Dit wordt nu
Ten eerste wordt er standaard geen shell meer aangeroepen, waardoor sh-specifieke dingen als backticks niet kunnen. Maar dat is geen probleem, maken we toch een shell scriptje aan. Vervelender is dat door deze syntax het opeens compleet onvoorspelbaar is geworden onder welke OID een resultaat terug komt.
Het resultaatgetal, 16, staat in bovenstaande lijst 3x. Welke moet ik nu nemen? En waarom verandert het oid rustig als ik een wijziging maak op een andere regel?
Ik wil gewoon just as usual zelf kunnen bepalen op welk oid een item uitkomt en dat er niet 11(!) getallen achter worden geplakt die me niets zeggen en die at random lijken te veranderen. Zo kan je toch niets monitoren? Who can help me out?
Dat ging dan als bijv:
code:
1
| $ date +%s > /timestamp |
snmpd.conf
code:
1
| sh .1.3.6.1.4.1.2021.52 age echo $((`date +%s` - `cat /timestamp`)) |
En opvragen als:
code:
1
2
3
4
5
6
7
8
| $ snmpwalk -On -c public -v 1 localhost .1.3.6.1.4.1.2021.51 .1.3.6.1.4.1.2021.51.1.1 = INTEGER: 1 .1.3.6.1.4.1.2021.51.2.1 = STRING: "age" .1.3.6.1.4.1.2021.51.3.1 = STRING: "echo $((`date +%s` - `cat /timestamp`))" .1.3.6.1.4.1.2021.51.100.1 = INTEGER: 0 .1.3.6.1.4.1.2021.51.101.1 = STRING: "16" .1.3.6.1.4.1.2021.51.102.1 = INTEGER: 0 .1.3.6.1.4.1.2021.51.103.1 = "" |
Echt perfecto, ik weet altijd waar de resultaten komen, namelijk in
oid.100.1 = shell exit code
oid.101.1 = output, regel 1
oid.102.1 = output, regel 2
oid.103.1 = output, regel 3
Noodgedwongen heb ik afgelopen week een server moeten updaten naar een distro waar 5.4rc2 bij zit. Deze ondersteunt opeens deze syntax niet meer. Dit wordt nu
code:
1
| extend .1.3.6.1.4.1.2021.51 age /bin/sh /etc/snmp/libexec/shellscript |
Ten eerste wordt er standaard geen shell meer aangeroepen, waardoor sh-specifieke dingen als backticks niet kunnen. Maar dat is geen probleem, maken we toch een shell scriptje aan. Vervelender is dat door deze syntax het opeens compleet onvoorspelbaar is geworden onder welke OID een resultaat terug komt.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| $ snmpwalk -On -c public -v 1 localhost .1.3.6.1.4.1.2021.51 .1.3.6.1.4.1.2021.51.1.0 = INTEGER: 1 .1.3.6.1.4.1.2021.51.2.1.2.7.118.101.114.115.105.101.49 = STRING: "/bin/sh" .1.3.6.1.4.1.2021.51.2.1.3.7.118.101.114.115.105.101.49 = STRING: "/etc/snmp/libexec/shellscript" .1.3.6.1.4.1.2021.51.2.1.4.7.118.101.114.115.105.101.49 = "" .1.3.6.1.4.1.2021.51.2.1.5.7.118.101.114.115.105.101.49 = INTEGER: 5 .1.3.6.1.4.1.2021.51.2.1.6.7.118.101.114.115.105.101.49 = INTEGER: 1 .1.3.6.1.4.1.2021.51.2.1.7.7.118.101.114.115.105.101.49 = INTEGER: 1 .1.3.6.1.4.1.2021.51.2.1.20.7.118.101.114.115.105.101.49 = INTEGER: 4 .1.3.6.1.4.1.2021.51.2.1.21.7.118.101.114.115.105.101.49 = INTEGER: 1 .1.3.6.1.4.1.2021.51.3.1.1.7.118.101.114.115.105.101.49 = STRING: "16" .1.3.6.1.4.1.2021.51.3.1.2.7.118.101.114.115.105.101.49 = STRING: "16" .1.3.6.1.4.1.2021.51.3.1.3.7.118.101.114.115.105.101.49 = INTEGER: 1 .1.3.6.1.4.1.2021.51.3.1.4.7.118.101.114.115.105.101.49 = INTEGER: 0 .1.3.6.1.4.1.2021.51.4.1.2.7.118.101.114.115.105.101.49.1 = STRING: "16" |
Het resultaatgetal, 16, staat in bovenstaande lijst 3x. Welke moet ik nu nemen? En waarom verandert het oid rustig als ik een wijziging maak op een andere regel?
Ik wil gewoon just as usual zelf kunnen bepalen op welk oid een item uitkomt en dat er niet 11(!) getallen achter worden geplakt die me niets zeggen en die at random lijken te veranderen. Zo kan je toch niets monitoren? Who can help me out?