OpenNMS: Import aus XML

opennmsAutodiscovery in OpenNMS ist ein tolles Feature. Leider ist es nicht immer zu gebrauchen, da es derzeit nur begrenzt konfigurierbar ist. So möchte ich z.B. in einem bestimmten Netzbereich nur die jeweiligen Router der Teilnetze abfragen – und nicht alle Hosts auf Services scannen. Klar kann man auch Bereiche excluden bzw. includen – aber ich wollte ja Autodiscovery ;).

In der kommenden OpenNMS Version 1.8 sollen die Discovery bzw. die Capability-Checks (capsd) von einem neuen Daemon („provisiond“) abgelöst werden welcher sich wohl auch besser an eigene Bedürfnisse anpassen lässt – z.B. ist als nettes Feature dann z.B. auch der Import von DNS-Zonen möglich. Dies aber nur Nebenbei.

Auf der Suche nach einem alternativen Import bin ich bei XML gelandet. Da die zu überwachenden Hosts in einem internen Wiki (Mediawiki) gepflegt werden, stehen diese über die eingebaute Export-Funktion auch als XML zur verfügung. So ist z.B. der OpenNMS Artikel bei Wikipedia auch als reines XML verfügbar: http://en.wikipedia.org/wiki/Special:Export/OpenNMS.

Ein cooles Tool zum verarbeiten von XML auf der Kommandozeile ist „xml2“ (in vielen Distro-Repositories verfügbar). Kombiniert mit ein paar regulären Ausdrücken landen die richtigen IPs in einer Datei für den automatischen Import in OpenNMS:

wget -q -O - --http-user admin --http-passwd secret \
http://wiki.example.com/index.php/Spezial:Exportieren/IP_Plan \
| xml2 \
| awk '/(page\/revision\/text)*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)*(NMS:host)/ {print $2}' \
> /opt/include-hosts

Im Wiki sieht ein Eintrag so aus:

 10.0.0.1       Test-Router  NMS:host
 10.0.0.2       Test-Router  NMS:host
 10.0.0.3       Test-Router

Jeder Eintrag beginnt mit einem Leerzeichen und nur die Einträge gekennzeichnet mit „NMS:host“ werden exportiert.

Die OpenNMS discovery-configuration.xml sieht dann so aus:

<discovery-configuration
    xmlns="http://xmlns.opennms.org/xsd/config/discovery" threads="3"
    packets-per-second="1" initial-sleep-time="30000"
    restart-sleep-time="21600000" retries="1" timeout="3000">
    <include-range retries="1" timeout="3000">
        <begin xmlns="">10.10.0.0</begin>
        <end xmlns="">10.20.0.0</end>
    </include-range>
    <include-url>file:/opt/include-hosts</include-url>
</discovery-configuration>

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.