OpenNMS: Auto-Zuordnung von Geodaten

Seit der OpenNMS-Version 1.12 können die von OpenNMS überwachten Nodes – also die am Netzwerk angeschlossenen Geräte – auf einer geografischen Karte dargestellt werden, die unter dem Menüpunkt Maps -> Geographical verfügbar ist. Die Platzierung der Nodes auf der Karte kann über die Angabe von Adressinformationen oder die direkte Angabe der jeweiligen Geodaten geschehen. Die Daten müssen dabei im Asset-Datenblatt des jeweiligen Nodes hinterlegt werden. Gerade bei einer größeren Menge von Nodes muss hier ein Automatismus eingesetzt werden, um eine vernünftige Verwaltung zu realisieren. Importiert man die Geräte aus einer Gerätedatenbank/CMDB, kann man die notwendigen Informationen – soweit vorhanden – an dieser Stelle gleich mitgeben.
Für einen unserer Kunden haben wir kürzlich eine weitere Möglichkeit implementiert: Wir haben in einer Konfigurationsdatei Standorte mit Geodaten definiert und die Nodes auf Basis ihrer IP-Adresse den verschiedenen Standorten zugeordnet.

Geodaten-Zuordnung in OpenNMS via „Drools Correlation Engine“

Für die Implementierung wurde die in OpenNMS enthaltene Drools Correlation Engine verwendet, die es ermöglicht, beim Auftreten eines Events regelbasiert Aktionen auszuführen. In unserem Fall verwenden wir für die Ausführung einer Aktion das Event uei.opennms.org/internal/provisiond/nodeScanCompleted, das eintritt, sobald der Scan oder regelmäßige Rescan eines Nodes durchgeführt wurde. Tritt dieses Event auf, werden zunächst die IP-Adressen des jeweiligen Nodes aus der OpenNMS Datenbank ausgelesen und mit den Einträgen aus einer Konfigurationsdatei verglichen. In dieser werden Standorte mit deren Geodaten definiert und IP-Adressbereiche den jeweiligen Standorten zugeordnet. Konnte die IP-Adresse einem Standort zugeordnet werden, werden die Geodaten zu dem jeweiligen Node in die OpenNMS-Datenbank geschrieben.
Die benötigten Dateien können unter folgendem Link heruntergeladen werden: geocoder-rules.tar.gz. Nach dem Entpacken des Archivs muss der darin enthaltene Ordner geocoder in den Ordner drools-engine.d des OpenNMS-Konfigurationsverzeichnisses (z.B.: /etc/opennms) kopiert werden. Die Konfiguration wird in der Datei geocoder-configuration.xml durchgeführt, die nach /etc/opennms kopiert werden muss. Nachfolgend ein Beispiel:

<geocooder-configuration>
    <locations>
        <location name="fulda" latitude="50.5558095" longitude="9.680844900000011" />
        <location name="frankfurt" latitude="50.1109221" longitude="8.682126700000026" />
        <location name="nuernberg" latitude="49.45203" longitude="11.076749999999947" />
    </locations>
    <locationMatchs>
        <locationMatch startIP="192.168.0.0" endIP="192.168.0.255" location="fulda" />
        <locationMatch startIP="192.168.10.0" endIP="192.168.10.255" location="fulda" />
        <locationMatch startIP="192.168.1.0" endIP="192.168.1.255" location="frankfurt" />
        <locationMatch startIP="192.168.2.0" endIP="192.168.2.255" location="nuernberg" />
    </locationMatchs>
</geocooder-configuration>

Im Abschnitt <locations> werden die einzelnen Standorte mit Namen und zugehörigen Geodaten hinterlegt. Innerhalb von <locationMatchs> werden dann IP-Adressbereiche definiert und einem Standort (über den Namen) zugeordnet. Dabei können auch überlappende IP-Bereiche definiert werden, wobei jeweils der erste „Match“ verwendet wird. Damit die Regeln angewendet werden, muss noch der Daemon „Correlator“ in der OpenNMS Konfigurationsdatei service-configuration.xml aktiviert werden. Abschließend sollte OpenNMS einmal neu gestartet werden.

EU Efre Dekra