Wrapperscript für SNMP Icinga-Performancedaten

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
feltel
Webmaster
Beiträge: 10447
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Wrapperscript für SNMP Icinga-Performancedaten

Beitrag von feltel » 12.11.2013 14:30:26

Ich bräuchte mal eure Hilfe bei einem kleinen Wrapperscript für die Bereitstellung von Performancedaten eines Icinga-SNMP-Checks. Ein Beispielcheck liefert folgenden Textstring zurück

Code: Alles auswählen

SNMP OK - "3" |
Der beim Check ermittelte Zahlwert (hier die Anzahl an einem OpenWRT angemeldeten WLAN-Clients) kann auch größer sein. Der Textstring, der für Icinga Performancedaten übermittelt, müsste so aussehen:

Code: Alles auswählen

SNMP OK - "3" | wireless_clients=3
Auf monitoring-portal.de habe ich ein Script gefunden, was ich etwas angepasst habe, und das schaut so aus:

Code: Alles auswählen

#!/bin/bash
LINE=`/usr/local/icinga/libexec/check_snmp $2`
RC=$?

COUNT=`echo $LINE | awk '{print $4}'`
echo $LINE $1=${COUNT:1:1}
exit $RC
Das Problem an der Sache ist, das ich nicht vorhersehen kann, wieviele Stellen die Zahl hat und dementsprechend nicht treffsicher die Gänsefüßchen vor und nach der 3 wegoperieren kann. Hat jemand eine Idee dazu?

Benutzeravatar
feltel
Webmaster
Beiträge: 10447
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Re: Wrapperscript für SNMP Icinga-Performancedaten

Beitrag von feltel » 12.11.2013 19:11:43

Ich hab eine mögliche Lösung gefunden: $LINE muss mit egrep -o "[0-9]+" nachbehandelt werden, um nur die Ziffer(n) zu erhalten.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Wrapperscript für SNMP Icinga-Performancedaten

Beitrag von Cae » 13.11.2013 00:51:37

Ich wuerde das gegen sed werfen:

Code: Alles auswählen

sed 's/\(^.*"\)\([0-9]\{1,\}\)\(".*$\)/\1\2\3 wireless_clients=\2/';
Test:

Code: Alles auswählen

$ for i in 3 666 error ''; do echo 'SNMP OK - "'$i'" |' | sed 's/\(^.*"\)\([0-9]\{1,\}\)\(".*$\)/\1\2\3 wireless_clients=\2/'; done
SNMP OK - "3" | wireless_clients=3
SNMP OK - "666" | wireless_clients=666
SNMP OK - "error" |
SNMP OK - "" |
$ 
Falls man alles zwischen den Anfuehrungszeichen in den Perfdata haben will, kann man auch das [0-9]\{1,\} durch .\{1,\} ersetzen:

Code: Alles auswählen

$ echo 'SNMP OK - "error" |' | sed 's/\(^.*"\)\(.\{1,\}\)\(".*$\)/\1\2\3 wireless_clients=\2/';
SNMP OK - "error" | wireless_clients=error
$ 
Das vielleicht merkwuerdig erscheinende \{1,\} ist sed-Syntax fuer das "normale" +, also "eins oder mehr".

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Antworten