grefe´s webnotes

Skip to: [content] [navigation]

Monitoring:

Der Klügste ist der, der weiß, was er nicht weiß. (Sokrates)

Was heißt Monitoring?

Insofern ist Monitoring ein fortwährender Prozess und kein Zustand. Sowohl die "Schwellwerte" als auch die Benachrichtiguns- und Eskalationsverfahren müssen den im laufenden Betrieb gewonnenen Erfahrungen angepasst werden.

Was sollte überwacht werden?

Diese Überwachung wird bereits durch wenige OpenSource-Software ermöglicht:

Snort

Snort filtert den kompletten Datenverkehr auf in einer Datenbank gespeicherten Angriffssignaturen in Echtzeit. Im Falle eines Angriffs lassen sich verschiedenste Gegenmaßnahmen frei definieren. Dies reicht von der Protokollierung, den Versand von SMS bis hin zu SNMP-Traps.

Tripwire

Tripwire überprüft die Integrität von Dateien anhand von zuvor abgespeicherten Prüfsummen. Tripwire sollte demnach unverzüglich nach der Installation eines Systems implementiert werden, um keine bereits veränderten Dateien/Verzeichnisse für vertrauenswürdig zu befinden. Es moniert nicht nur fehlende oder geänderte Dateien, sondern auch neu hinzugefügte.

logsurfer/fwlogwatch

logsurfer analysiert ASCII-Dateien in Echtzeit. Es kann mehrere Zeilen als Kontext betrachten und externe Programme aufrufen. Als Suchmuster werden 2 Ausdrücke mitgegeben. Der erste muss zutreffen, der zweite darf nicht vorhanden sein.
fwlogwatch bietet eine ähnliche Funktionalität, ist aber speziell für Logdateien verschiedener Firewalls entwickelt worden - u.a.: ipchain, iptables, cisco,...

Nagios

Der Einfachheit halber sei auf die Nagioseinführung innerhalb dieser Webpräsenz verwiesen. Weiterführende Links finden sich - wie üblich auf dieser Homepage - in den jeweiligen Sidebars.

Konfiguration

Jedes im Netz befindliche Gerät wird auf IP-Verfügbarkeit getestet, wobei auch die Antwortzeiten berücksichtigt und gerätespezifisch konfiguriert werden können. Hilfreich für den späteren Betrieb ist es sofort die Abhängikeiten der verschiedenen Geräte zu erfassen. Die Abhängigkeiten werden durch eine sogenannte Parentstruktur abgebildet. Die Parentstruktur ist nicht nur auf die Netz-Topologie anzuwenden, sondern auch auf Dienstebene. Fällt ein Server aus, muss der Administator nicht unbedingt für jeden einzeln ausgefallenen Dienst informiert werden. Sind es allerdings verschiedene Administratoren mag dies jedoch sinnvoll sein und kann auch konfiguriert werden. Eine Überwachung der Hardwareresourcen gehört ebenso zum Standard und sollte unbedingt genutzt werden. Wird eine volle Festplatte im vorwege erkannt, können meist eine Reihe von Folgeproblemen rechtzeitig abgefangen werden.
Die Konfiguration der einzelnen Hosts, Services und der Personen erfolgt in einer Vielzahl von ASCII-Dateien und kann somit mit einem normalen Editor wie dem vi erfolgen. Es gibt aber auch Benutzeroberflächen die PHP (Nagat) oder Webmin (Nagmin) nutzen. Nagmin benötigt MySQL. Es bietet die Möglichkeit via nmap die Netzstruktur automtisch zu erfassen!

Benachrichtigungslogik

Die Logik wann und vor allem wer zu benachrichtigen ist, kann beinahe beliebig kompliziert eingerichtet werden. Sinnvoll ist vorab eine Parent-Struktur auf Host und Diensteebene zu entwickeln. Somit werden vielleicht alle betreffenden Personen via EMail informiert, aber nur die am Problem arbeitenden aktiviert. Eine Benachrichtigung muss nicht nur via Mail erfolgen. Möglich sind ebenso Popup-Fenster, SMS, WAP,... Insbesondere ist hierbei wie auch bei den Personen eine Hierachie konfigurierbar (E-Mail=>SMS=>Handy und Operator=>Administrator=>Bereichsleiter), die bei Fortbestehen des Problems sukzessive bedient wird. Ist ein TroubleTicket-System mit "offener" Schnittstelle vorhanden, kann Nagios problemlos integriert und so das vorhandene Eskaltationsverfahren genutzt werden.

Webinterface

Berechtigungskonzept

Nagios enthält ein Berechtigungskonzept, welches den Zugriff einzelner Webseiten auf Benutzer (-gruppen) reglementiert. Es müssen nicht alle über ein Server- oder Netzausfall informiert sein, zumal sie die Fehler/Status-Meldung meist nicht interpretieren können/sollen. Manch einem ist ja bereits mit einem monatlichen Verfügbarkeitsreport gedient, der natürlich auch automatisch erzeugt und via Mail versandt werden kann.

Speicherung/Darstellung von Performancedaten (mrtg)

Werden die Daten über Resourcen wie Prozessor- oder Leitungs- Last, freie Festplattenkapazität in kurzen Zeitabständen ( etwa alle 5 min ) gemessen und in einer Datenbank gespeichert (RRD), können in einer grafischen Aufbereitung leicht Trends und mögliche aufkommende Probleme erkannt werden. In der Regel greift Nagios hierbei auf mrtg zu.

Verfügbarkeitsreports

Mittels Filterfunktionen können Reports für Server/Dienste (-Gruppen) über frei wählbare Zeiträume erstellt werden. Bei regelmäßig wiederkehrenden Reports empfiehlt es sich die Erstellung nebst Versand zu automatisieren.

Netzwerklayout

Über das Netzwerklayout lassen sich bei entsprechender Konfiguration des Nagios-Systems sehr leicht die Abhängigkeiten der verschiedenen Server und sogar Dienste erkennen. Insbesondere erkennt der Betrachter auf einen Blick die wirkliche Ursache und und wird vor lauter Symptomen nicht von dem Problem abgelenkt. Dies sollte natürlich auch bei der Implemtierung der Benachrichtigungs- und Eskalations- Struktur berücksichtigt werden. Ein Exchangeadministrator muss nicht zuhause benachrichtigt werden, nur weil der vorgelagerte SMTP-Dienst nicht aktiv ist. ( Vermutlich ist das Problem allerdings andersherum zu lösen :-)

Überwachung von Servern/Diensten/Resourcen

Anhand von Filterfunktionen lassen sich die Server, Dienste oder Resourcen je nach Wunsch selektieren. So erhält beispielsweise der Administrator bei geeigneter Filterwahl nur die aktuellen Probleme angezeigt und kann sich vom Host bis auf den einzelnen Dienst "herunterklicken" und alle Details der letzten Aufrufe ablesen. In einer History lassen sich auch pro Host/Dienst die letzten Probleme/Tätigkeiten für künftige Fehlermeldungen festhalten.

Plugins

Wie weiter oben bereits erwähnt, "messen" Plugins Resourcen. Im folgenden werden eine Reihe von "Standard"-Plugins aufgezählt:

Netzwerk

check_apacheVerfügbarkeit des Apache-Webservers
check_citrixVerfügbarkeit von Citrix-Diensten
check_digüberprüft DNS mittels dig
check_disk_smbprüft die Auslastung eines Samba bzw. Windows-Shares
check_dhcpprüft auf freie,vorhandene IP-Adressen eines DHCP-Servers
check_dnsallgemeine Namensauflösung auf gewähltem DNS-Server
check_fpingüberprüft die Verfügbarkeit eines Servers mit fping
check_httpder Webserver kann auf verschiedene Merkmale (Authentifizierung, SSL, Ports, virtual hosts,...) geprüft werden
check_http_tomcatVerfügbarkeit der Tomcat-Servlet-Engine
check_ldapprüft Abfrage an einen LDAP-Server
check_mailqprüft die Größe der Mailqueue eines SMTP-Servers
check_mrtgtestet gegen Schwellwerte einer MRTG-Instanz
check_mtrt_trafficestet Schwellwerte eines MTRT-Interfaces
check_ntpüberprüft die Zeitdifferenz mit einem Zeitserver
check_pingüberprüft die Verfügbarkeit einses Servers mit ping
check_radiusVerfügbarkeit eines Radius-Servers
check_rpcprüft RPC-Dienste
check_smtpVerfügbarkeit eines SMTP-Servers
check_sshVerfügbarkeit eines SSH-Servers
check_squidVerfügbarkeit eines Squid-Servers
check_tcpVerfügbarkeit eines TCP-Ports
check_telnetprüft einen telnet-Damon
check_udpVerfügbarkeit eines UDP-Ports

Windows

check_nterfragt alle Werte des Windows-Performancemonitors
check_nt_cpuloaderfragt die CPU-Last
check_nt_diskfreier und belegter Festplattenspeicher
check_nt_memfreier und belegter Arbeitsspeicher
check_nt_pageAuslastung der Swapdatei
check_nt_procsAnzahl der laufenden Prozesse
check_nt_processerfragt die Präsenz eines Prozesses
check_nt_serviceerfragt die Präsenz eines Dienstes
check_spoolertestet den Druckerspooler
check_winstestet die WINS-Namensauflösung

Linux/Unix

check_backupÜberprüft Existenz und Alter einer Backupdatei
check_diskVolumekapazität ( maximal, belegt, frei)
check_javaprocsVerfügbarkeit von übergebnenen Java-Prozessen
check_linux_raidliefert den Status eines Linux-Software-Raids
check_loadCPU-Auslastung
check_logdurchsucht ein Logfile nach einem übergebenen Pattern
check_memRAM-Auslastung
check_proclCPU- RAM- Auslastung eines Prozesses
check_procrtestet auf Presenz eines Prozesse
check_procsAnzahl/Status von Prozessen
check_smbAnzahl der eingeloggten Benutzer und Anzahl der geöffneteten Dateien eines SAMBA-Servers
check_socketsliefert die Anzahl offener Sockets
check_swapSWAP-Auslastung
check_upstestet den Status einer USV
check_uptimeUptime des Servers
check_usersliefert die Anzahl der eingeloggten Benutzer
Datenbanken
check_mysqlVerfügbarkeit des MySQL-Dienstes
check_mysql_conntectionsliefert die Anzahl der MySQL-Connections
check_mysql_querytestet den Aufruf einer Query
check_oracleVerfügbarkeit des Oracle-Dienstes, Login, cahce,...
check_oracle_table_spacesOracle Table Spaces
check_oracle_instancesOracle Instanzen
check_pgsqlVerfügbarkeit des PostgreSQL-Dienstes
check_rrd_dataRound Robin Database

Hardware

check_adptraidStatus von Raid an Adaptec-Controllern
check_apc_usvStatus von APC-USV
check_ifoperstatusStatus eines Netzwerkinterfaces
check_ifstatusStatus aller Netzwerkinterfaces
check_hpdjStatus eines HP-Deskjet-Lasers
check_snmpStatus einer SNMP-OID...

Spezielle Plugins

ceck_by_sshssh Tunnel zum Remote Aufruf von Plugins
check_nrpeNagios Remote Plugin Executor ( tcp-tunnel via Port 5666)
check_ntEigentlich ebenso ein Tunnel für Windows
kleinergrößernormal