OpenNMS: Nur primäre Interfaces überwachen

opennmsOpenNMS ist klasse. Man merkt an vielen Stellen, dass es von Anfang an für große Netze konzipiert wurde. Das hat den „Nachteil“ dass einiges u.U. auf dem ersten Blick etwas umständlich wirkt. Ein Beispiel dafür sind z.B. die Filter. Anfangs habe ich diese nicht beachtet und diverse Parameter lieber händisch im Webinterface eingestellt oder viel mit IP-Ranges bei den Pollern gearbeitet.

Eines der Hauptprobleme war, dass OpenNMS immer alle Interfaces auf einem Server bei seinen Service-Checks einbezieht. Also z.B. den SSH-Dienst auf einem Webserver mit 30 virtuellen Interfaces auf jedem dieser Interfaces checkt. Das ist sinnlos. Beholfen habe ich mich damit, dass ich im Webinterface die ensprechenden Interfaces auf „unmanaged“ gesetzt habe oder die IP-Ranges bei den Checks eingeschränkt habe. Wenig elegant.

Wie schön sind dagegen doch die Filter. Kennt man sich ein wenig mit SQL aus, hat man das Prinzip dahinter schnell erkannt. Hinter OpenNMS arbeitet eine PostgresSQL-Datenbank welche die Interfaces, Kategorien, Events etc. verwaltet. Mit den Filtern kann man prinzipiell jedes Feld in dieser Datenbank abfragen und so z.B. die zu pollenden Interfaces bestimmen.

Für den Anfang habe ich mir den phpPgAdmin installiert und mir erst mal die OpenNMS-Datenbank angeschaut. Dabei ist mir aufgefallen, dass es in der Tabelle „ipinterface“ ein Feld „issnmpprimary“ gibt, welches entweder ein „P“ bei Primary- oder ein „S“ bei Slave-Interfaces enthält (oder NULL bei keinem SNMP). Also muss man doch prinzipiell das primäre Interface Filtern können…

Im Filterstatement abstrahiert OpenNMS die SQL-Query etwas – gut beschrieben ist das hier. Damit ich das Feld issnmpprimary (und SnmpInterfaceId) auch in meinem Filter benutzen konnte, musste es noch in der Datei database-schema.xml unter der entsprechenden Tabelle eingetragen werden:

        <table name="ipInterface" key="primary">
                <join column="snmpInterfaceId" table="snmpInterface" 
                table-column="id"/>
                <column name="id" visible="false"/>
                <column name="nodeID" visible="false"/>
                <column name="ipAddr"/>
                <column name="ipHostname"/>
                <column name="isManaged"/>
                <column name="ipStatus"/>
                <column name="ipLastCapsdPoll"/>
                <column name="IsSnmpPrimary"/>   <!-- <<<<<<<<<--- hier -->
                <column name="SnmpInterfaceId"/> <!-- <<<<<<<<<--- hier -->
        </table>

In der poller-configuration.xml kann man jetzt den Filter in seinem Package eintragen:

    <package name="default">
        <filter>>IPADDR != '0.0.0.0' &amp; (IsSnmpPrimary == 'P' | SnmpInterfaceId is NULL)</filter>
        <include-range begin="1.1.1.1" end="254.254.254.254"/>
...
    </package>

Da es ein XML-File ist, muss das „&“ wie oben kodiert werden. Nach einem „/etc/init.d/openms restart“ checkt OpenNMS nur noch das primäre Interface im Poller-Package.

2 Antworten auf „OpenNMS: Nur primäre Interfaces überwachen“

Schreibe einen Kommentar

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