Categories
Linux

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:

        
                
                
                
                
                
                
                
                   
                 
        

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

    
        >IPADDR != '0.0.0.0' & (IsSnmpPrimary == 'P' | SnmpInterfaceId is NULL)
        
...
    

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 replies on “OpenNMS: Nur primäre Interfaces überwachen”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.