Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Make the net work

Make the net work

Vortrag auf der German Unix User Group 2013 in Frankfurt.
https://www.guug.de/veranstaltungen/ffg2013/abstracts.html#1_1_3

Ronny Trommer

February 26, 2013
Tweet

More Decks by Ronny Trommer

Other Decks in Technology

Transcript

  1. Unser Plan für heute Pille, da draußen ist ein Ding.

    Vorstellung Versuchsumgebung Begriffe in der OpenNMS Welt Überblick OpenNMS Architektur Provisioning ein Spielplatz Lab: Vorbereitung Versuchsumgebung Lab: Installation und Einrichtung Net-SNMP Lab: Provisioning Spielplatz - Unser erster Node! 2 / 49
  2. Unser Plan für heute Wie kann man nur so schwerhörig

    sein, wenn man solche Ohren hat. Monitoring von Web-Anwendungen Provisioning HTTP und DNS Services Lab: Provisioning Web-Server Lab: HTTP Monitoring verbessern Lab: Web-UI kennen lernen 3 / 49
  3. Unser Plan für heute Gruß-Frequenzen öffnen Konzepte der Benachrichtigung Benachrichtigung

    erweitern Lab: Benachrichtigung HTTP Service Lab: Benachrichtigung Web-Server Lab: Zeitpläne für Benachrichtigungen 4 / 49
  4. Unser Plan für heute Sulu, Sie dürfen einfach drauf losfliegen.

    Eigene Events in OpenNMS einbinden Was sind Events Wie werden sie verwaltet Wozu können Sie verwendet werden. Lab: Eigene Events anlegen Lab: Events mit send-event.pl erzeugen 5 / 49
  5. Optional: Festplatten überwachen Dann fliegt sie eben auseinander Eigene Events

    in OpenNMS einbinden Aktives überwachen mit OpenNMS Passives überwachen mit Net-SNMP und Traps Lab: Konfiguration mit Threshold Lab: Konfiguration mit SNMP traps 6 / 49
  6. Pille, da draußen ist ein Ding Unsere Versuchsumgebung Ubuntu 12.10

    Desktop OpenNMS 1.10.8 vorinstalliert aus OpenNMS Debian-Repository Live-DVD Virtual Box Image mit Centos 6.3 und OpenNMS 1.10.8 7 / 49
  7. Pille, da draußen ist ein Ding Begriffe In OpenNMS werden

    Netzwerk-Geräte als Node bezeichnet. Ein Node ... kann ein physikalische oder logische Komponente in einem Netzwerk sein. ist bspw. physikalisch als Server, Switch oder Router modelliert. ist bspw. logisch als hochverfügbarer Router mit virtuellen IP Adressen oder als Web-Seite modelliert. hat IP-Netzwerkschnittstellen kann physikalisch Schnittstellen haben wie bspw. Switch mit Ethernet ports ohne IP’s ist eindeutig über eine Node-ID identifiziert. hat Events, Notifications und Alarms kann Inventarinformationen wie bspw. Seriennumer, Modellnummer, Inventarnummer oder den Standort besitzen. 8 / 49
  8. Pille, da draußen ist ein Ding Begriffe Wir sind an

    Nodes im Monitoring interessiert, weil sie wertvolle Services bereitstellen. Ein Service in OpenNMS ... wird von einer IP-Adresse bereitgestellt wird von Pollerd getestet und als verfügbar oder nicht verfügbar angezeigt. dient als Einstiegspunkt für die Leistungsdatenerfassung. hat Events, Notifications und Alarms wird von einer Service-ID eindeutig identifiziert. 9 / 49
  9. Pille, da draußen ist ein Ding Begriffe OpenNMS hat als

    Möglichkeiten ihr Netzwerk abzubilden Nodes, Assetinformation, Interfaces und Services Das Bereitstellen von Nodes, Interfaces, Services und Assets im Netzwerk-Monitoring wird provisioning bezeichnet. Provisioning hat verschiedene Ansätze:(vollautomatisch, halb-automatisch oder komplett manuell) 10 / 49
  10. Pille, da draußen ist ein Ding Unsere Versuchsumgebung Ubuntu 12.10

    Desktop OpenNMS 1.10.8 vorinstalliert aus OpenNMS Debian-Repository Live-DVD Virtual Box Image mit Centos 6.3 und OpenNMS 1.10.8 Hinweis Live-DVD: 1 sudo ln -s /var/run/resolvconf/resolv.conf /etc/resolv.conf 2 sudo apt-get install libxml-twig-perl 12 / 49
  11. Net-SNMP Installieren und konfigurieren 1 sudo apt-get -y install snmp

    snmpd snmp-mibs-downloader 2 sudo vi /etc/snmp/snmpd.conf 3 4 view opennms included .1 5 rocommunity notpublic default -V opennms 6 # includeAllDisks 10% 7 8 sudo service snmpd restart 9 snmpwalk -v 2c -c notpublic localhost 13 / 49
  12. OpenNMS unser erster Node! Installieren und konfigurieren 1 cd /usr/share/opennms/bin

    2 ./provision.pl requisition add Server 3 ./provision.pl node add Server 1 myLocalhost 4 ./provision.pl interface add Server 1 127.0.0.1 5 ./provision.pl interface set Server 1 127.0.0.1 snmp-primary P 6 ./provision.pl requisition import Server 7 sudo ./provision.pl snmp set 127.0.0.1 notpublic version=v2c 14 / 49
  13. Wie kann man nur so schwerhörig sein ... Monitoring Web-Anwendungen

    Monitorig the Web-Anwendung auf vic.labmonkeys.de und www.google.de Einfache HTTP Verbindung HTTP error code auswertbar Regexp nach Inhalt in der Seite suchen 18 / 49
  14. Wie kann man nur so schwerhörig sein ... Aufgabe Requisition

    Group für Web-Seiten anlegen Zwei Nodes mit der Bezeichnung www.google.de und vic.labmonkeys.de anlegen. (Node label) www.google.de interface 173.194.44.56 hinzufügen vic.labmonkeys.de interface 83.169.39.12 hinzufügen Beide als snmp-primary setzen HTTP und ICMP auf die beiden Interfaces manuell setzen. Requisition Group importieren. WebUI prüfen. Wie ist der Status? 20 / 49
  15. Wie kann man nur so schwerhörig sein ... HTTP Monitor

    verbessern Response code auswerten host-name für VHost im HTTP / GET setzen Response text auswerten Bearbeiten des Monitors in poller-configuration.xml 1 <service name="HTTP" interval="300000" user-defined="false" status="on"> 2 <parameter key="retry" value="3"/> 3 <parameter key="timeout" value="3000"/> 4 <parameter key="port" value="80"/> 5 <parameter key="host-name" value="vic.labmonkeys.de"/> 6 <parameter key="url" value="/"/> 7 <parameter key="response" value="200-202,299"/> 8 <parameter key="response-text" value="~.*[Ss]earch.*"/> 9 </service> 10 <monitor service="HTTP" class-name="org.opennms.netmgt.poller.monitors.HttpMonitor"/> 21 / 49
  16. Wie kann man nur so schwerhörig sein ... Monitoring Web-Anwendungen

    Monitorig DNS-Lookup für vic.labmonkeys.de und www.google.de DNS Resolution Monitor IPv4 A und IPv6 AAAA Verwendet DNS-Server vom System 22 / 49
  17. Wie kann man nur so schwerhörig sein ... 1 <service

    name="DNS-A" interval="300000" user-defined="false" status="on"> 2 <parameter key="retry" value="3"/> 3 <parameter key="timeout" value="1000"/> 4 <parameter key="resolutionType" value="v4"/> 5 <parameter key="rrd-repository" value="/usr/share/opennms/share/rrd/response"/> 6 <parameter key="rrd-base-name" value="dns-a"/> 7 <parameter key="ds-name" value="dns-a"/> 8 </service> 9 <monitor service="DNS-A" \ 10 class-name="org.opennms.netmgt.poller.monitors.DNSResolutionMonitor"/> 11 12 <service name="DNS-AAAA" interval="300000" user-defined="false" status="on"> 13 <parameter key="retry" value="3"/> 14 <parameter key="timeout" value="1000"/> 15 <parameter key="resolutionType" value="v6"/> 16 <parameter key="rrd-repository" value="/usr/share/opennms/share/rrd/response"/> 17 <parameter key="rrd-base-name" value="dns-a"/> 18 <parameter key="ds-name" value="dns-a"/> 19 </service> 20 <monitor service="DNS-AAAA" \ 21 class-name="org.opennms.netmgt.poller.monitors.DNSResolutionMonitor"/> 1 ./provision.pl service add Web-Seiten 1 173.194.44.56 DNS-A 2 ./provision.pl service add Web-Seiten 1 173.194.44.56 DNS-AAAA 3 ./provision.pl service add Web-Seiten 2 83.169.39.12 DNS-A 4 ./provision.pl service add Web-Seiten 2 83.169.39.12 DNS-AAAA 5 ./provision.pl requisition import Web-Seiten. 6 sudo service opennms restart 23 / 49
  18. Wie kann man nur so schwerhörig sein ... Monitoring Web-Anwendungen

    Monitoring Konfiguration und VHost macht es notwendig, dass für jeden VHost ein Monitor angelegt werden muss :/ host-name muss dynamisch gesetzt werden. Optionale Unterscheidung zwischen IPv4 und IPv6 PageSequenceMonitor for the win ... 24 / 49
  19. 1 <service name="HTTP-v4" interval="300000" user-defined="false" status="on"> 2 <parameter key="retry" value="3"/>

    3 <parameter key="timeout" value="5000"/> 4 <parameter key="page-sequence"> 5 <page-sequence> 6 <page path="/" host="{nodelabel}" virtual-host="{nodelabel}" requireIPv4="true"/> 7 </page-sequence> 8 </parameter> 9 </service> 10 <monitor service="HTTP-v4" \ 11 class-name="org.opennms.netmgt.poller.monitors.PageSequenceMonitor"/> 12 13 <service name="HTTP-v6" interval="300000" user-defined="false" status="on"> 14 <parameter key="retry" value="3"/> 15 <parameter key="timeout" value="5000"/> 16 <parameter key="page-sequence"> 17 <page-sequence> 18 <page path="/" host="{nodelabel}" virtual-host="{nodelabel}" requireIPv6="true"/> 19 </page-sequence> 20 </parameter> 21 </service> 22 <monitor service="HTTP-v6" \ 23 class-name="org.opennms.netmgt.poller.monitors.PageSequenceMonitor"/> 25 / 49
  20. Gruß-Frequenzen öffnen Was sind Benachrichtigungen in OpenNMS OpenNMS kann uns

    benachrichtigen wenn etwas schief läuft. Benachrichtigungen werden von events erzeugt. Notifd ist die Komponente in OpenNMS die Benachrichtigungen versendet. Files für Benachrichtigungen sind: /etc/opennms/notifd-configuration.xml /etc/opennms/notifications.xml /etc/opennms/notificationCommands.xml /var/log/openmms/daemon/log/notifd.log 27 / 49
  21. Gruß-Frequenzen öffnen Destination paths Wie können Benachrichtigungen versendet werden? Benachrichtigungen

    können über verschiedene Protokolle versendet werden. Die Protokolle können erweitert werden. Beispiel: eMail, Jabber, Asterisk Anruf Benachrichtigungen können an Benutzer und Gruppen gesendet werden. Diese Einstellungen werden als Destination Path bezeichnet. Benachrichtigungen können eskaliert werden. Benachrichtigungen können verzögert werden. 28 / 49
  22. Gruß-Frequenzen öffnen Aufgabe Benachrichtigung anschalten und Service Störung an E-Mail-Admin

    benachrichtigen lassen. Einrichten einer Benachrichtigungsverzögerung von 5 min. Benachrichtigung nur von komplettem Node down einrichten. Bestätigen von Benachrichtigungen Benachrichtigungszeitplan für Benutzer 30 / 49
  23. Sulu, Sie dürfen einfach drauf losfliegen. Was sind Events? Alle

    Änderungen im System werden von Events initiiert. Diese Events können von den folgenden Komponenten erzeugt werden: OpenNMS selbst im Monitoring, bspw. Pollerd (NodeDown, NodeLostService, InterfaceDown), Collectd (Threshold exceeded) Externe logging Protokolle wie Syslog und SNMP-Traps werden in Events umgewandelt. Externe Anwendungen über TCP 5817 und XML Daten oder send-event.pl 33 / 49
  24. Sulu, Sie dürfen einfach drauf losfliegen. Unique Event Identifier Alle

    Events in OpenNMS werden über einen Unique Event Identifier (UEI) identifiziert. Sie beschreiben und klassifizieren ein Event z.B.: uei.opennms.org/nodes/nodeDown uei.opennms.org/nodes/interfaceDown uei.opennms.org/nodes/nodeLostService Events von externen Quellen wie bspw. Syslog oder SNMP traps müssen UEI zugewiesen bekommen. 34 / 49
  25. Sulu, Sie dürfen einfach drauf losfliegen. Konfiguration von Events Die

    Events werden von Eventd verarbeitet. Die Konfigurationsdateien befinden sich: /etc/opennms/eventd-configuration.xml /etc/opennms/eventconf.xml /etc/opennms/events /var/log/opennms/daemon/eventd.log 35 / 49
  26. Sulu, Sie dürfen einfach drauf losfliegen. eventconf.xml - OpenNMS "down"

    1 <event> 2 <uei>uei.opennms.org/nodes/nodeLostService</uei> 3 <event-label>OpenNMS-defined node event: nodeLostService</event-label> 4 <descr> &lt;p&gt;A %service% outage was identified on interface %interface%. 5 &lt;/p&gt; 6 &lt;p&gt;A new Outage record has been created and service level 7 availability calculations will be impacted until this outage is 8 resolved.&lt;/p&gt; 9 </descr> 10 <logmsg dest="logndisplay">%service% outage identified on interface %interface% 11 with reason code: %parm[eventReason]%. 12 </logmsg> 13 <severity>Minor</severity> 14 <alarm-data reduction-key="%uei%:%dpname%:%nodeid%:%interface%:%service%" 15 alarm-type="1" auto-clean="false"/> 16 </event> 36 / 49
  27. Sulu, Sie dürfen einfach drauf losfliegen. eventconf.xml - OpenNMS "up"

    1 <event> 2 <uei>uei.opennms.org/nodes/nodeRegainedService</uei> 3 <event-label>OpenNMS-defined node event: nodeRegainedService</event-label> 4 <descr> &lt;p&gt;The %service% service on interface %interface% was previously down 5 and has been restored.&lt;/p&gt; 6 &lt;p&gt;This event is generated when a service which had previously failed 7 polling attempts is again responding to polls by OpenNMS. &lt;/p&gt; 8 &lt;p&gt;This event will cause any active outages associated with this 9 service/interface combination to be cleared.&lt;/p&gt; 10 </descr> 11 <logmsg dest="logndisplay">The %service% outage on interface %interface% 12 has been cleared. Service is restored. 13 </logmsg> 14 <severity>Normal</severity> 15 <alarm-data 16 reduction-key="%uei%:%dpname%:%nodeid%:%interface%:%service%" 17 alarm-type="2" 18 clear-key="uei.opennms.org/nodes/nodeLostService:%dpname%:%nodeid%:%interface%:%service %" 19 auto-clean="false"/> 20 </event> 37 / 49
  28. Sulu, Sie dürfen einfach drauf losfliegen. eventconf.xml - Include other

    files 1 <event-file>events/Rancid.events.xml</event-file> 2 <event-file>events/3Com.events.xml</event-file> 3 <event-file>events/AdaptecRaid.events.xml</event-file> 4 <event-file>events/ADIC-v2.events.xml</event-file> 5 <event-file>events/Adtran.events.xml</event-file> 6 <event-file>events/Adtran.Atlas.events.xml</event-file> 7 <event-file>events/Aedilis.events.xml</event-file> 8 <event-file>events/AirDefense.events.xml</event-file> 9 <event-file>events/AIX.events.xml</event-file> 10 11 ... 12 13 <event-file>events/programmatic.events.xml</event-file> 14 <event-file>events/Standard.events.xml</event-file> 15 <event-file>events/Translator.default.events.xml</event-file> 16 <event-file>events/default.events.xml</event-file> 38 / 49
  29. Sulu, Sie dürfen einfach drauf losfliegen. eventd-configuration.xml 1 <EventdConfiguration 2

    TCPAddress="*" 3 TCPPort="5817" 4 UDPAddress="*" 5 UDPPort="5817" 6 receivers="5" 7 getNextEventID="SELECT nextval(’eventsNxtId’)" 8 socketSoTimeoutRequired="yes" 9 socketSoTimeoutPeriod="3000"> 10 </EventdConfiguration> 39 / 49
  30. Sulu, Sie dürfen einfach drauf losfliegen. send-event.pl 1 Usage: ./send-event.pl

    <UEI> [host] [options] 2 3 the UEI is a required field! 4 Usage: ./send-event.pl <UEI> [host] [options] 5 6 Options: 7 8 <UEI> the universal event identifier (URI) 9 [host[:port]] a hostname to send the event to (default: localhost) 10 --version, -V print version and exit successfully 11 --verbose, -v print the raw XML thats generated 12 --help, -h this help message 13 14 --timezone, -t the time zone you are in 15 --service, -s service name 16 --nodeid, -n node identifier (numeric) 17 --interface, -i IP address of the interface 18 --descr, -d a description for the event browser 19 --logmsg, -l a logmsg for the event browser (secure field by default) 20 . 21 . 22 . 40 / 49
  31. Sulu, Sie dürfen einfach drauf losfliegen. send-event.pl 1 . 2

    . 3 . 4 --severity, -x the severity of the event (numeric or name) 5 1 = Indeterminate 6 2 = Cleared (unimplemented at this time) 7 3 = Normal 8 4 = Warning 9 5 = Minor 10 6 = Major 11 7 = Critical 12 13 --parm, -p an event parameter (ie: 14 --parm ’url http://www.google.com/’) 15 --uuid, -U a UUID to pass with the event 16 17 Example: Force discovery of a node: 18 19 send-event.pl \ 20 --interface 172.16.1.1 \ 21 uei.opennms.org/internal/discovery/newSuspect 41 / 49
  32. Sulu, Sie dürfen einfach drauf losfliegen. Events - Hands-on Erstellen

    eines eigenen "down" events. Bitte vergewissern, dass alarm-data mit angegeben ist. Erstellen eines eigenen "up" events. Dieses Event löst das vorher gehende Event auf. Sicherstellen dass die Events korrekt verwendet werden Test zum überschreiben der severity und der logmsg 42 / 49
  33. Lab Class.events.xml Wir erzeugen das DOWN event: 1 <events> 2

    <event> 3 <uei>uei.opennms.org/class/downTest</uei> 4 <event-label>AAA - Class Test Event - Down</event-label> 5 <descr>&lt;p&gt; 6 Oh my, something be broken! 7 &lt;/p&gt; 8 </descr> 9 <logmsg dest=’logndisplay’>&lt;p&gt;Down: Something be broken!&lt;/p&gt;</logmsg> 10 <severity>Warning</severity> 11 <alarm-data 12 reduction-key="%uei%" 13 alarm-type="1" 14 auto-clean="false"/> 15 </event> 16 . 17 . 18 . 43 / 49
  34. Lab Class.events.xml Wir erzeugen das UP event: 1 . 2

    . 3 . 4 <event> 5 <uei>uei.opennms.org/class/upTest</uei> 6 <event-label>AAA - Class Test Event - Up</event-label> 7 <descr>&lt;p&gt; 8 Never mind, I was just kidding. 9 &lt;/p&gt; 10 </descr> 11 <logmsg dest=’logndisplay’>&lt;p&gt;Up: All better now.&lt;/p&gt;</logmsg> 12 <severity>Normal</severity> 13 <alarm-data 14 reduction-key="%uei%" 15 alarm-type="2" 16 clear-key="uei.opennms.org/class/downTest" 17 auto-clean="false"/> 18 </event> 19 </events> 44 / 49
  35. Lab "down" Event senden mit : send-event.pl uei.opennms.org/class/downTest In der

    Web UI sicher stellen, dass das Event unter "Events" als auch unter "Alarms" angezeigt wird. Das Event "down" wiederholt senden. Es sollte in "Events" zweimal und in den "Alarms" einmal angezeigt werden. Senden des "down" Event mit anderer Severity: send-event.pl -x 7 uei.opennms.org/class/downTest Sicherstellen, Alarm sollte immer noch einmal angezeigt werden. Senden des "up" Event mit: send-event.pl uei.opennms.org/class/upTest Event in der "Event-Liste" und den Alarm prüfen 30 Sekunden warten und refresh des Alars. Was passiert? 45 / 49
  36. "Dann fliegt sie eben auseinander" Wenn Festplatten voll sind oder

    fast voll sind, reagieren Anwendungen oft nicht mehr oder werden sehr langsam. Es gibt verschiedene Varianten diese Ziel zu erreichen: Aktiv: OpenNMS zeichnet Plattenfüllstand auf und misst gegen einen Schwellwert Polling mit einem Monitor gegen den Füllstand und als Service abbilden. Passiv: Net-SNMP agent sendet uns einen SNMP-Trap 46 / 49
  37. "Dann fliegt sie eben auseinander" "Aktives" Thresholding Admin/Manage Thresholds Edit

    "netsnmp" threshold group Edit "ns-dskPercent" Datasource Konfiguration: threshold, re-arm & trigger values Filter für root "/" file system anlegen Temporäre Datei erzeugen um den Schwellwert auszulösen. (Vorsichtig!) dd if=/dev/zero of=my1gb.file bs=1024 count=1000000 48 / 49