OpenNMS: Manuelle Erstellung von Topology Maps

Seit der OpenNMS Version 1.12 sind die neuen Topology Maps enthalten, die überwachte Nodes und deren verschiedene Beziehungen zueinander darstellen können. Für die Darstellung der Beziehungen von Nodes ist ein sogenannter „Topology Provider“ notwendig, von denen OpenNMS bereits einige Varianten an Bord hat.

  • Enhanced Linkd Topology Provider
  • VmWare Topology Provider

Der Enhanced Linkd Topology Provider zeigt die zwischen den Geräten mit Hilfe verschiedener Discovery-Protokolle (wie zum Beispiel LLDP, CDP) erkannten Links, während der VmWare Topology Provider die Zuordnung von Virtuellen Maschinen und Datastores zu VMware ESX-Servern zeigt.
Neben diesen beiden Topology Providern bietet OpenNMS auch die Möglichkeit, eine Topology Map manuell zu erzeugen. Hierzu wird der „SimpleTopologyProvider“ verwendet. Dabei werden die Nodes und die zugehörigen Links, die später auf der Karte dargestellt werden sollen, zunächst in einer XML-Datei definiert. Ein Beispiel:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<graph namespace="nodes">
  <!-- Service DNS -->
  <vertex>
    <id>1</id>
    <label>dns1</label>
    <locked>false</locked>
    <nodeID>4</nodeID>
    <ipAddr>8.8.8.8</ipAddr>
    <selected>false</selected>
    <parent>1000</parent>
  </vertex>
  <vertex>
    <id>2</id>
    <label>dns2</label>
    <locked>false</locked>
    <nodeID>3</nodeID>
    <ipAddr>8.8.4.4</ipAddr>
    <selected>false</selected>
    <parent>1000</parent>
  </vertex>
  <edge>
    <id>100</id>
    <source>1</source>
    <target>2</target>
  </edge>
  <group>
    <iconKey>linkd:group</iconKey>
    <id>1000</id>
    <label>Group DNS</label>
    <locked>false</locked>
    <nodeID>-1</nodeID>
    <selected>false</selected>
    <members>1</members>
    <members>2</members>
  </group>
</graph>

Aufbau der XML-Datei

In der XML-Datei werden folgende Elemente verwendet:

  • Definition eines Nodes: vertex
  • Definition eines Links: edge
  • Definition einer Gruppe: group

Definition eines Nodes

Ein <vertex> definiert einen Node, der auf der Topology Map dargestellt wird:

   <vertex>
    <id>1</id>
    <label>dns1</label>
    <locked>false</locked>
    <nodeID>4</nodeID>
    <ipAddr>8.8.8.8</ipAddr>
    <selected>false</selected>
    <parent>1000</parent>
  </vertex>

Dabei muss als Eigenschaft mittels <id> zunächst eine ID für das Element vergeben werden. Mittels <label> wird die Beschriftung definiert und <nodeID> gibt die ID des OpenNMS Nodes an, der mit dem Element verbunden ist.

Definition eines Links

Ein Link zwischen zwei Elementen wird mit Hilfe von <edge> definiert:

  <edge>
    <id>100</id>
    <source>1</source>
    <target>2</target>
  </edge>

Auch hier wird zunächst wieder eine ID vergeben. Mittels <source> und <target> werden jeweils die IDs der beiden Endpunkte für den Link angegeben.

Zusammenfassung von Elementen zu einer Gruppe

Mehrere <vertex> Elemente können zu einer Gruppe zusammengefasst werden:

  <group>
    <iconKey>linkd:group</iconKey>
    <id>1000</id>
    <label>Group DNS</label>
    <locked>false</locked>
    <nodeID>-1</nodeID>
    <selected>false</selected>
    <members>1</members>
    <members>2</members>
  </group>
  <vertex>
    <id>1</id>
    <label>dns1</label>
    <locked>false</locked>
    <nodeID>4</nodeID>
    <ipAddr>8.8.8.8</ipAddr>
    <selected>false</selected>
    <parent>1000</parent>
  </vertex>
  [...]

Dabei muss ein <group> Element definiert werden. Auch dieses Element benötigt eine ID und ein Label. Da der Gruppe kein OpenNMS-Node zugeordnet ist, wird der Wert für <nodeID> auf -1 gesetzt. Mittels <member> werden die einzelnen Elemente der Gruppe zugeordnet. Bei den einzelnen Elementen der Gruppe wird mit <parent> die ID des Gruppenelements angegeben.

Installation

Nachdem die XML-Datei definiert wurde, muss ein kleines karaf-Script geschrieben werden:

config:edit org.opennms.features.topology.plugins.topo.simple-simple
config:propset label 'IT Services'
config:propset topologyLocation file:///etc/opennms/service-map.xml
config:update

Hier wird ein Name für die TopologyMap (hier „IT-Services“) sowie die oben definierte XML-Datei angegeben. Das Skript muss nun einmalig über die Karaf-Konsole im OpenNMS installiert werden. Den Zugriff auf die Karaf-Konsole erhält man per SSH-Login auf den OpenNMS mit Port 8101 (Benutzername admin, Passwort admin). Dort kann das eben definierte karaf-Skript wie folgt ausgeführt werden:

ssh admin@127.0.0.1 -p 8101
source /etc/opennms/service-map.karaf

Betrachten der neuen Map

Die neu definierte Map ist nun in den Topology Maps beim Aufruf des Menüs „View“ unter dem Punkt „IT Services“ zu finden. Ändert man das Semantic Zoomlevel, so werden die beiden Nodes zur Gruppe DNS zusammengefasst:

EU Efre Dekra