Vergleich
Welches Tool eignet sich fr welchen Zweck besonders gut? Was ist die Schokoladenseite, was
der Pferdefu? Die Redaktion hat die wichtigsten
Features der bekanntesten berwachungstools fr
kleine und mittlere Umgebungen auf den folgenden
Seiten gegenbergestellt.
www.linuxtechnicalreview.de
bersichten
Tabelle 1: Featurevergleich
Opensmart
Nagios
Version
Homepage
untersttzte Plattformen
(Server)
Entwickler
Preis
1.0
opensmart.sourceforge.net
Linux, HP/UX, Solaris, *BSD,
AIX, Windows
4
-
2.7
1.0.2
v. 3.2
www.nagios.org
www.bigsister.ch/bigsister.htm www,bb4.com
All POSIX (Unix, Linux, betriebssystemunabhnig
viele Unixe - Windows XP/
BSD)
2000/2003/Vista
2 + 11 fr Plugins
14
2
-
- $ 100 pro monitored
Node
Big Sister
Big Brother
Architektur
Frontend
Browser-GUI
zentrale Agent-Konfiguration mglich
zentrale Agent-Updates
mglich
Browser-GUI
nein
nein
Browser-GUI
nein
nein
Browser-GUI
nein (geplant)
nein (geplant)
Statuschecks
Fllungsgrad Filesysteme
ja (disk)
Lnge Mailqueue
ja Sendmail (mailq)
Memory Usage
nein
ja (check_disk,
check_disk_smb)
ja (check_)
nein
ja (diskfree)
ja
ja Qmail (qmqueue)
optional
ja (memory) nativ unter Windows, optional unter Unix
Swap benutzt
ja (swap)
ja
ja (load)
nativ unter Windows, op-
tional unter Unix
Performancedaten
Auslastung Platten-IO
CPU Idle Time
Load Average
nein
nein
ja (load)
nein
ja
ja
ja (diskload)
ja (load)
ja (cpuload)
ja
ja
ja
Funktionschecks
Erreichbarkeit (Ping)
ja (ping)
Port offen
ja (sockets)
Prozess luft
ja (proc)
Returncode beliebiger Befehl ja (simple)
Webapp-Check (URL-Abruf) ja (webapp)
ja (check_ping)
ja (check_sockets)
ja (check_procs)
-
ja (check_httpd)
ja (ping)
ja
ja (tcp)
ja
ja (procs)
ja
ja (command)
ja
ja (http, realhttp) nativ unter Windows, optional unter Unix
Standard-Services
DHCP
DNS
FTP
NTP
POP3
RPC
SMTP
SSH
nein
ja (dns)
ja (ftp)
ja (ntp, ntp-remote)
nein
nein
ja (smtp)
nein
ja
ja
ja (check_dns)
ja (check_ntp)
ja
nein
ja (check_smtp)
ja
ja
ja
ja
ja (ntp)
ja (tcp)
ja (rpc)
ja (tcp)
ja (tcp)
optional
ja
ja
ja
ja
optional
ja
ja
SNMP
SNMP-Support
SNMP-Traps
nein
nein
ja (check_snmp)
ja
ja
ja
nein
ja
Log-Checks
Regulrer Ausdruck
ja (logs)
ja (check_log2)
ja (eventlog)
Konfigurationsoptionen
eigene User-/Rechte-
verwaltung
Gruppieren von Hosts
Gruppieren von Services
Abhngigkeiten zw.
Services
Wartungsfenster
nein
ja
nein
N/A
nein
nein
-
ja
ja
ja
ja
ja
ja
ja
ja
optional
ja
ja
ja
ja
www.linuxtechnicalreview.de
bersichten
Zenoss
Zabbix
Open NMS
Version
v. 1.1
v. 1.1.5
v. 1.2.9
Homepage sourceforge.net/projects/ sourceforge.net/
www.opennms.org
zenoss
projects/zabbix
untersttzte Plattformen (Server) All BSD Platforms, All POSIX -
AIX, FreeBSD, OpenBSD,
Linux, Solaris, OS X
Linux, Mac OS X, Solaris
HP-UX, Linux, MacOS, Solaris,
SCO Open Server, Tru64/OSF
Entwickler
10
4
32
Preis
-
-
-
Architektur
Frontend
Browser-GUI (Python, AJAX)
Browser-GUI
eigenes, (event management daemon)
zentrale Agent-Konfiguration
-
nein
nein, fr Version 1.3.2 geplant
zentrale Agent-Updates
-
nein
nein, fr Version 1.3.2 geplant
Statuschecks
Fllungsgrad Filesysteme
ja
ja
optional (ber SNMP-Agent)
Lnge Mailqueue
N/A
ja
optional (ber SNMP-Agent)
Memory Usage
ja
ja
optional (ber SNMP-Agent)
Swap benutzt
ja
ja
optional (ber SNMP-Agent)
Performancedaten
Auslastung Platten-IO
ja
ja
optional (ber SNMP-Agent)
CPU Idle Time
ja
ja
optional (ber SNMP-Agent)
Load Average
ja
ja
optional (ber SNMP-Agent)
Funktionschecks
Erreichbarkeit (Ping)
ja
Port offen
ja
Prozess luft
ja
Returncode beliebiger Befehl
ja
Webapp-Check (URL-Abruf)
ja
ja
ja (nur TCP)
ja
optional (Nach-
arbeit erforderlich)
ja
ja
ja
optional (ber SNMP-Agent)
ja
ja
Standard-Services
DHCP
DNS
FTP
NTP
POP3
RPC
SMTP
SSH
N/A
ja
ja
ja
ja
N/A
ja
ja
nein
ja
ja
ja
ja
nein
ja
ja
ja
ja
ja
ja
ja
nein
ja
ja
SNMP
SNMP-Support
SNMP-Traps
ja
ja
ja
ja
ja
ja
Log-Checks
Regulrer Ausdruck
Windows Event Log
ja
ja
ja
ja
ja
nein
Konfigurationsoptionen
eigene User-/Rechteverwaltung
Gruppieren von Hosts
Gruppieren von Services
Abhngigkeiten zw. Services
Wartungsfenster konfigurierbar
Netzwerk-Visualisierung
N/A
ja
ja
N/A
N/A
N/A
ja
ja
ja
ja
N/A
ja
www.linuxtechnicalreview.de
ja
ja
ja
ja
ja
nein, fr Version 1.3.2 geplant
bersichten
Pandora FMS
moodss
Bartlby
GPM
SisIYA
NINO
v.1.2.0
v. 21.5
v. 1.2.7
4 (Beta)
0.4-23
v. 4.1.8
sourceforge.net/
moodss.sourceforge.net www.bartlby.org gpm-system.
sisiya.sourceforge. sourceforge.net/
projects/pandora
sourceforge.net
net
projects/nino
Plattformunabhngig Unix/Linux
betriebssystemunabAll BSD Platforms, All
All POSIX, OS X
Linux
POSIX, Linux, Solaris,
(Java-basiert, getestet
hngig
Win2K, WinXP, Win2003,
unter Windows, Linux)
HP-UX, IBM AIX
7
1
1
3
1
1
-
-
-
-
-
-
Browser-GUI (PHP)
eigenes
Browser-GUI (PHP)
N/A
ja (via HTTP/s
und Cron)
N/A
ja (via HTTP/s
und Cron)
1. Java-basierte
GUI, 2. Web-GUI
ja
Browser-GUI (PHP)
Browser-GUI
nein
ja
nein
ja
ja
ja
ja
ja
ja
nein
ja (Exim4)
nein
N/A
ja
ja
ja
ja
ja
ja
ja
ja
ja
ja
ja
ja
nein
ja
N/A
ja
ja
nein
ja
ja
ja
ja
ja
ja
ja
ja
optional
ja
ja
ja
ja
ja
ja
ja
ja
ja
ja
nen
nein
nein
ja
ja
ja
ja
nein
nein
nein
nein
ja
ja
ja
N/A
ja
nein
ja
ja
ja
nein
ja
nein
N/A
ja
ja
ja
ja
ja
ja
ja
ja
ja
optional
optional
optional
optional
optional
optional
optional
optional
nein
ja
ja
nein
ja
nein
ja
ja
nein
nein
nein
nein
nein
nein
nein
nein
N/A
N/A
ja
ja
ja
N/A
ja
ja
nein
ja
ja
nein
ja
nein
ja
ja
ja
ja
ja
ja
ja
nein
nein
nein
N/A
N/A
ja
ja
nein
ja
ja
nein
nein
nein
nein
nein
ja
N/A
ja
ja
nein, geplant fr v. 1.3
nein, geplant fr v. 1.3
nein
nein, geplant fr v. 2.0
optional
ja
optional
ja
optional
nein
optional
nein
N/A
ja
nein
www.linuxtechnicalreview.de
nein
nein
nein
nein
nein
nein
N/A
ja
N/A
nein
N/A
N/A
ja
ja
ja
nein
N/A
ja
Monitoring
als Managementbaustein
An welchen Zielen soll man sich bei der Konzeption
einer Monitoring-Lsung orientieren? Die IT Infrastructure Library kann hier mit praxiserprobten Vorgaben weiterhelfen. Wilhelm Dolle
www.linuxtechnicalreview.de
Studien
IT Infrastructure Library
Die wachsende Abhngigkeit von Informationssystemen fhrte Ende der 80er Jahre zur Konzeption und Entwicklung der IT Infrastructure
Library (ITIL). Urheber war die Central Computer and Telecommunications Agency (CCTA),
eine IT-Dienstleistungsorganisation der britischen Regierung. Ziel des Projektes war es, die
Kosten von IT-Dienstleistungen zu verringern
und gleichzeitig deren Qualitt zu steigern. Beim
Start des Projekts gab es noch keine umfassende
Grundlage, die den Weg zu wirtschaftlichen und
zweckmigen IT-Dienstleistungen gewiesen
htte. Inzwischen sind die anerkannten Verfahrensweisen des IT-Servicemanagement in ITIL
dokumentiert.
ITIL versucht dabei keine Standardisierung,
sondern verfolgt einen sogenannten BestPractice-Ansatz. Der beinhaltet in der Praxis
erfolgreiche Modelle und Organisationsformen,
die jedes Unternehmen adaptieren und auf seine
Bedrfnisse zuschneiden kann. ITIL beschreibt
auerdem nicht, wie etwas zu erledigen ist, sondern nur, was zu tun ist. Zu ITIL gehrt die ISONorm 20000, die aus einem britischen Standard
(BS 15000) entstand. ITIL ist bis heute die einzige umfassende, nicht-proprietre und ffentlich zugngliche Verfahrensbibliothek in diesem
Bereich. Ihre Verfasser hatten vor allem Anwender im Blick, die fr die Planung, berwachung
und Steuerung von IT-Services verantwortlich
sind.
Die erste Version der Library kam 1995 heraus,
zwischen 1999 und 2003 erschienen die Publikationen der Version 2, und aktuell arbeitet man
an der Version 3, deren Verffentlichung in diesem Jahr ansteht. Zustzliche Informationen
und weiterfhrende Links ber ITIL findet man
unter anderem auf den Webseiten des deutschen
Ablegers des Information Technology Service
Management Forum (itSMF, [1]).
www.linuxtechnicalreview.de
Studien
Capacity-Management
Das Capacity-Management hat die Aufgabe,
stndig die korrekte Kapazitt an IT-Ressourcen
zu vertretbaren Kosten und entsprechend den
Kundenbedrfnissen zur Verfgung zu stellen.
Diese Bedrfnisse sind blicherweise in SLAs
festgehalten. Das Monitoring sollte also in diesem Fall die Auslastung verschiedener Komponenten der Infrastruktur widerspiegeln und
dabei nicht nur eine Momentaufnahme liefern,
sondern eine Trendanalyse erlauben.
Beispiele fr die zu berwachenden Komponenten sind die CPU-Kapazitt, Speicherplatz
auf Storage-Systemen, Netzwerkbandbreite oder
auch die Zahl der verfgbaren und verwendeten Lizenzen. Das Capacity-Management nutzt
Service-Level-Management
Zielsetzung des Service-Level-Managements ist
die Pflege und stndige Verbesserung der mit
dem Kunden vereinbarten IT-Services. Zu diesem Zweck trifft das Service-Level-Management
Vereinbarungen hinsichtlich der zu erbringenden Leistungen in SLAs, die es berwacht und
dokumentiert. Typische Leistungszusagen betreffen beispielsweise eine bestimmte Verfgbarkeit oder eine definierte Antwortzeit eines
Services.
Availability-Management
Zielsetzung des Availability-Managements ist es,
kostengnstig ein bestimmtes Verfgbarkeitsniveau fr alle IT-Services zu gewhrleisten. Das
Availability-Management stellt eine wichtige
Komponente dar, um die vom Service-LevelManagement ausgehandelten SLAs einzuhalten. In den SLAs knnen allerdings neben Anforderungen an die Verfgbarkeit auch nahezu
beliebige weitere Eigenschaften eines Services
festgelegt sein, unter anderem beispielsweise
Qualittskriterien.
Fr die Verfgbarkeit wird meist ein Schwellwert festgelegt der nicht ber- beziehungsweise
unterschritten werden darf. Fr das Monitoring
erstellt man zustzlich weitere darber beziehungsweise darunterliegende Warnschwellen,
die darauf hinweisen, dass eine Verletzung der
zugesicherten Service-Level droht. Im diesem
Teilbereich des Monitoring stellt vor allem Nagios [5], mit dem sich zahlreiche Beitrge die-
www.linuxtechnicalreview.de
Studien
Problem-Management
Mchte man die Anforderungen an ein modernes IT-Service-Management nach ITIL erfllen,
so bentigt man dafr nicht zwangslufig kommerzielle Software. Open-Source-Software bieten in vielen Fllen eine analoge oder auf jeden
Fall eine ausreichende Leistung, um Services
auch innerhalb von komplexen IT-Infrastrukturen beobachten zu knnen.
Ein bisher allerdings noch ungelstes Problem
ist die Integration der verschiedenen Komponenten in ein komplettes System-ManagementFramework. Diese Aufgabe hat sich inzwischen
jedoch das Open Management Consortium
(OMC, [6]) auf die Fahnen geschrieben. Interessierte Anwender sollten die Ergebnisse dieser
vielversprechenden Initiative im Auge behalten.
(jcb)
nnn
IT-Security-Management
IT-Security-Management ist bei ITIL Teil eines
Rahmenkonzeptes fr Informationssicherheit.
Die Hauptziele dabei sind: die Vertraulichkeit
(Confidentiality) wahren, also der Schutz von
Informationen vor unautorisierter Kenntnisnahme und unbefugter Benutzung, die Integritt (Integrity) sichern, also die Richtigkeit und
Vollstndigkeit der Information und die Verfgbarkeit (Availability) innerhalb des im SLA ver-
Fazit
Der Autor
Wilhelm Dolle ist Senior
Security Consultant
bei der Hisolutions AG,
einem Beratungshaus
fr Information Security
Infos
[1] Deutsche Seiten des Information Technology
Service Management Forum: [http://www.itsmf.
de/bestpractice/index.asp]
[2] Bundesamt fr Sicherheit in der Informationstechnik: [http://www.bsi.de/gshb/index.htm]
[3] MRTG: [http://oss.oetiker.ch/mrtg]
[4] Cacti: [http://www.cacti.net]
[5] Nagios: [http://www.nagios.org]
[6] Open Management Consortium: [http://www.
openmanagement.org]
www.linuxtechnicalreview.de
www.linuxtechnicalreview.de
Studien
Kommerzielle Monitoring-Programme unterscheiden sich scheinbar nur wenig von den Alternativen aus dem Open-Source-Lager. Beide
untersttzen eine Vielzahl von Plattformen,
greifen auf umfangreiche Metriken der berwachten Systeme zu und erlauben das Erkennen
von Strungen, sei es durch Schwellwertberschreitung, Verfgbarkeitsmessung oder Patternmatching.
Monitoring-Tools, die nicht blo eine berschaubare Umgebung berwachen, sondern sich
unternehmensweit bewhren sollen, mssen
dafr besondere Anforderungen erfllen. Vor
allem wichtig sind hier die Skalierbarkeit, die Sicherheit, die vorausschauende Fehlererkennung
(proaktives Monitoring), ein aussagekrftiges
Reporting oder die Fhigkeit, komplexe Zusammenhnge sinnfllig zu visualisieren. Darber
hinaus verstrkt sich besonders in einer groen
Umgebung die Gewichtung bestimmer Anforderungen die wichtigsten davon diskutiert
dieser Beitrag.
Zentrale Konfiguration
www.linuxtechnicalreview.de
Studien
Skalierbarkeit
Ein wichtiger Punkt fr den unternehmensweiten Einsatz einer Lsung ist die Skalierbarkeit.
So haben Unternehmen nicht selten mehrere
Tausend Server im Einsatz, internationale Konzerne sogar Zehntausende von Servern. Jeder
dieser Server beherbergt Middleware, Datenbanken oder Anwendungen. Wenn man annimmt, dass pro Server im Schnitt zehn Events
pro Tag anfallen, dann wird deutlich, welche
Event-Volumen zu Stande kommen knnen.
Nur durch mchtige Korrelationen und Automationen lsst sich sicherstellen, dass am Ende
eine geringe Anzahl von Events brig bleibt, die
Helpdesk oder Experten noch beherrschen.
Solche Umgebungen erzwingen eine hoch-skalierbare Monitoring-Architektur. Die berwachung verteilt sich ber mehrere, oft redundant
ausgelegte Ebenen. Die einzelnen Ebenen fungieren dabei als intelligente Manager, um Korrelation aber auch Automation weitgehend unabhngig von einer zentralen Instanz durchfhren zu knnen. Auch lassen sich diese Ebenen
nutzen, um die Verteilung von berwachungskommandos und Parametern effizient zu organisieren und so das dabei anfallende Datenaufkommen oder die Anzahl der Verbindungen zu
minimieren.
Skalierbarkeit bezieht sich nicht allein auf die
Anzahl der zu berwachenden Systeme wei-
Agentenbasiert oder
agentenlos
www.linuxtechnicalreview.de
Studien
Anwendungs-Monitoring
Das Monitoring von Anwendungen und Middleware erfordert ein hohes Ma an Kenntnis der
internen Strukturen, der kritischen Parameter
und deren Schwellwerte. Das Identifizieren von
geeigneten Metriken, die Konfiguration des Monitoring und die Integration in den Life-Cycle
der Anwendung kann durchaus eine beachtliche
Eigendynamik entwickeln und wertvolle Ressourcen binden.
Daher ist es vorteilhaft, das Monitoring solcher
Komponenten in eine generische MonitoringStruktur einzubetten. Anstelle von Punktlsungen nimmt man lieber eine Lsung mit vielleicht
nur 90-prozentiger Abdeckung in Kauf, die sich
aber auch effizient betreiben lsst.
Hersteller von kommerziellen Monitoring-Suiten haben eine Vielzahl spezialisierter Module
im Angebot. Sie ermglichen beispielsweise die
mageschneiderte berwachung von Datenbanken (DB2, Informix, Oracle, MySQL, Sybase,
MS-SQL und andere), von ERP- und CRM-Programmen (etwa SAP, Siebel oder Peoplesoft),
von Web-Infrastrukturen (Websphere, BEA,
Jboss, Apache), von Middleware (MQ-Series,
Message Broker) oder Collaboration Software
(Lotus Notes, Exchange). Heutzutage sind solche Module in der Regel mit so genannten BestPractices kombiniert, die eine Auswahl von
relevanten Metriken vorgeben. Damit wird der
Aufwand fr Installation und Konfiguration,
aber auch das ntige Know-how auf der Anwenderseite reduziert.
Die Integration in eine Produktlsung erleichtert den Einsatz beim Endkunden. Das Suchen
von geeigneten Plugins, deren Konfiguration
und Integration in eine Monitoring-Lsung und
die Wartung und Pflege dieser Lsung wird zum
Groteil vom Hersteller der Monitoring-Suite
bernommen.
Diese Monitoring-Module sind mittlerweile
uerst mchtig und durchaus vergleichbar mit
anwendungsspezifischen berwachungspaketen. Fr eine umfassende berwachung einer
SAP-Landschaft verwenden sie beispielsweise
eine Vielzahl von Schnittstellen, zum Beispiel
CCMS, IDOC, SAP syslog, Statistical Records,
Mageschneiderte Monitore
Neben Modulen fr kommerzielle Anwendungen ist es selbstverstndlich notwendig, auch fr
kundenspezifische Lsungen Monitore selbst
entwickeln zu knnen. Hierzu bieten Hersteller von Monitoring-Suiten generische Agenten
oder Toolkits an. IBM Tivoli bietet beispielsweise ber den Universal Agent ein derartiges
reichhaltiges Spektrum an Adaptoren zum
Beispiel der Klassen API, File, SNMP, ODBC,
Socket und Script die fr die Integration von
eigenen Lsungen zur Verfgung stehen. Daneben hat IBM mit der Open Process and Automation Library [1] eine Platform etabliert, die
entsprechende Best Practices fr Kunden zum
freien Download anbietet.
Zunehmend setzen sich lose gekoppelte Komponenten gegenber monolithischen Anwendungen durch, man spricht von Composite Applications und Service Oriented Architectures
(SOA). Teile der Anwendung laufen auf unterschiedlichen Komponenten und Plattformen ab,
vom Webserver auf Linux-Farmen bis zur Datenbank auf dem Mainframe. Damit wird auch
fr das Monitoring solcher Applikationen eine
Lsung notwendig, die auf all diesen Plattformen einsetzbar ist und die an unterschiedlichen
Orten ermittelte Einzelergebnisse zu einer Gesamtschau kombinieren kann.
Sicherheit
Oft umfasst das Monitoring gerade auch die
unternehmenskritischen Server, daher ist eine
sicherheitskritische Bewertung zwingend erforderlich. Sie umfasst Themen wie die sichere
Kommunikation zwischen einzelnen Komponenten oder die Robustheit des Codes gegen Attacken.
Ein hufiges Problem dabei ist die Kommunikation zwischen Monitoring-Server und Agenten ber Firewalls hinweg. In diesem Bereich
www.linuxtechnicalreview.de
Studien
Netzberwachung
Ein Aspekt des Monitoring ist die Netzberwachung primr der aktiven Netzkomponenten
wie Router, Switches oder Hubs. Auch Protokolle oder die Performance in diesen Netzen
lassen sich berwachen. Entscheidend fr die
Qualitt der berwachung ist dabei die korrekte
Abbildung der Netzwerktopologie.
Whrend die Pflege von kleineren Netzen auf
Layer-3- Ebene vielleicht noch realisierbar ist,
ist dies in greren Umgebungen nicht mehr
praktikabel. Kommerzielle Netzwerklsungen
stellen daher aufwndige Autodiscovery- und
automatische Topologiefunktionen zur Verfgung. Sie gewinnen ihre Information neben dem
OSI-Layer 3 auch aus den tieferen Schichten.
Zudem untersttzen sie moderne Netzwerktechnologien wie Multi Protokoll Label Switching (MPLS).
Integration
Einer der wesentlichen Grnde, warum groe
Unternehmen kommerzielle berwachungstools einsetzen, ist die Integration in ein bergeordnetes System- und Servicemanagement.
Oft agieren berwachungstools dabei nicht isoliert sondern integriert in ein Monitoring-Portal (Dashboard). Alle beobachteten Ereignisse
laufen hier zusammen. Die einzelnen Events
lassen sich dann miteinander korrelieren und in
einer grafischen Konsole prsentieren. Gerade
bei greren Umgebungen ist es hier besonders
wichtig, fr bersichtlichkeit zu sorgen, denn
allzu schnell kann sich der Benutzer in einer zu
detaillierten Anzeige verlieren.
Oft ist diese Konsole in einen Servicedesk integriert, sodass sie automatisch Trouble Tickets
(Incidents) generieren kann. Sollte die Eskalation nicht ohnehin im Servicedesk-Tool erfolgen, kann sie auch direkt der Event-Manager
steuern. Man unterscheidet hier oft zwischen
funktioneller Eskalation (Weiterleitung an die
entsprechende Fachgruppe) und hierarchischer
Eskalation (Weiterleitung, wenn das Problem
nach einer vorgegebenen Zeit fortbesteht).
Abbildung 3: Das Zusammenspiel von Verfgbarkeitsinformation (links oben), Detailinformationen (rechts oben) und spezifischen Handlungsanweisungen (unten)
verdeutlicht die Mglichkeiten eines integrierten Monitoring-Portals.
Eine oft genutzte Funktion ist die automatische Reaktion auf Fehler und
der Versuch einer Fehlerbehebung
bereits durch den Monitor-Agenten.
Ein einfaches Beispiel dafr ist das automatische Neustarten von Diensten
nach einem Ausfall oder das Lschen
von temporren Dateien, sobald ein
Filesystem voll luft. Eine grafische
Anzeige der Ergebnisse ist Bestandteil eines jeden Monitoring-Pakets.
Neben einer tabellenartigen, priorisierten Liste der Ereignisse kommen
zunehmend baumartige Strukturen
in Mode, welche die Bedeutung eines
Ereignisses fr ein Business-System
verdeutlichen.
Damit der Administrator schnell und
sicher auf ein bestimmtes Ereignis
reagieren kann, lassen sich Handlungsanweisungen mit dem Monitor
www.linuxtechnicalreview.de
Studien
CMDB
Eine besondere Bedeutung hat hier die Integration mit einer Konfigurationsdatenbank (Configuration Management Database, CMDB). ber
eine CMDB lassen sich alle fr ein Betriebsmittel relevanten Konfigurationsinformationen und
deren Beziehungen abrufen. So knnen etwa
Soll- und Istzustand verglichen werden, wobei
Inventory- und Discovery-Tools zum Einsatz
kommen. Dabei kann man nachvollziehen, welche nderungen wann durchgefhrt wurden.
Wie wichtig dieses Wissen ist, veranschaulicht
eine Zahl: 85 % aller Probleme haben ihre Ursachen in nderungen in der IT (Quelle: Tivoli
Primary Research 2005).
Die in der CMDB hinterlegten Informationen
geben auch Aufschluss ber die Bedeutung des
Betriebsmittels aus technischer und wirtschaftlicher Sicht. War es redundant ausgelegt oder
ein Single Point of Failure? Ist es eine unternehmenskritische Anwendung? Wurden Service
Level Agreements (SLAs) vereinbart, und sind
diese in Gefahr? Werden Vertragsstrafen bei
lngerem Ausfall fllig?
Wirtschaftliche Aspekte
Neben diesen technischen und funktionellen
Aspekten unterscheiden sich kommerzielle
Tools auch in wirtschaftlicher Hinsicht von
Open-Source-Lsungen. Als Erstes stehen hier
oft die Lizenz- und Wartungskosten zur Diskussion, die bei einer kommerziellen Lsung
anfallen. Oft ist dies auch der wesentliche Motivationsgrund, sich nach freier Software umzusehen.
Auf der anderen Seite muss man aber in Kauf
nehmen, dass die Integration und Konfiguration der Module und Plugins dann eben nicht
ber das Produkt geliefert wird, sondern selbst
zu leisten ist. Nachdem viele Unternehmen in
den letzten Jahren auf Kosteneinsparungen fokussiert waren, fehlt dort nun die notwendige
Erfahrung fr Open-Source-Produkte. Immer
hufiger sind sie gezwungen, auf die Dienstleistung von Spezialisten und externen Beratungshusern zurckzugreifen, was die Kostenvorteile von Open-Source-Lsungen schnell wieder
relativieren kann.
Ein von Unternehmen oft geforderter, zentraler, namentlich bekannter Ansprechpartner, der
zudem auch die Verantwortung bernimmt, ist
im Open-Source-Bereich nicht immer die Regel. Selten ist auch ein professioneller Support
fr 24 Stunden an sieben Wochentagen. Gerade
fr unternehmenswichtige Anwendungen und
fr den IT-Betrieb zhlt das Monitoring allemal
zu dieser Kategorie ist dies eine unabdingbare
Forderung.
Fazit
Eine unternehmensweite Monitoring-Lsung
ist weit mehr als das einfache berwachen von
Diensten oder Ressourcen. Themen wie Visualisierung, Reporting, aber auch Netzmanagement
und Anwendungsmanagement gehren seit
langem zu den Anforderungen, nicht nur von
groen Unternehmen. Die zunehmende Notwendigkeit, Monitoring mit einer Incident- und
Problemmanagement-Lsung zu verbinden,
zeigt die Richtung der knftigen Entwicklung:
von einer technisch motivierten Lsung hin zur
prozessorientierten, fast schon fabrikhnlichen
Automation, die alle ntigen Komponenten integriert. (jcb)
nnn
Infos
[1] Open Process and Automation Library (OPAL);
[http://www.ibm.com/software/tivoli/opal]
www.linuxtechnicalreview.de
Der Autor
Ingo Averdunk ist als
Consulting IT Architect
bei IBM Tivoli ttig. Zu
seinem Verantwortungsbereich gehrt
Architekturberatung
fr strategische Kunden. Ingo Averdunk
hat einen Abschluss in
Informatik und besitzt
das Zertifikat ITIL Service Manager.
Monitoring ist berwachung. berwachung bedeutet Kontrolle. Kontrolle von betriebsinternen Ablufen, aber auch von Mitarbeitern. Ist der betriebliche
Big Brother ein juristisches Problem? Fred Andresen
www.linuxtechnicalreview.de
Studien
Privates berwachen
Das Interesse des Unternehmers an Optimierung der EDV-Ablufe findet dort seine Grenze,
wo die individuelle Sphre der Arbeitnehmer
oder freier Mitarbeiter beginnt. Dabei ist zu
beachten, dass sich die Grenzen beider Sphren berlappen und eine exakte Grenzziehung
schwierig und nur im Einzelfall sicher feststellbar ist. Der Arbeitnehmer (und auch der freie
Mitarbeiter) hat ein Recht auf angemessene
Privatsphre am Arbeitsplatz. Das bedeutet, die
Kontrolle seiner Arbeistleistung in qualitativer
wie auch in quantitativer Hinsicht ist gewissen
Einschrnkungen unterworfen. Das bedeutet
somit auch, die berwachung dessen, was er tut,
ist im gleichen Mae eingeschrnkt.
Der Schutzbereich des Persnlichkeitsrechts
umfasst das Recht des Arbeitnehmers, auch an
seinem Arbeitsplatz eine angemessene Privatsphre zu erhalten. Kerninhalte des Persnlichkeitsrechts, die bei der Arbeit ebenfalls berhrt
sein knnen, sind das Recht am eigenen Wort
und das Recht am eigenen Bild. Aber auch der
Zwang, bestimmte Handlungen auszufhren
oder zu unterdrcken, kann durch den permanenten psychologischen Druck veranlasst sein,
wenn sich der Arbeitnehmer einer dauerhaften
www.linuxtechnicalreview.de
Studien
berwachung bewusst ist. Aber auch eine dauerhafte, ohne bestimmten Anlass eingerichtete
Videoberwachung, von der die Mitarbeiter
nichts wissen, verstt gegen ihre Menschenrechte.
An eine verdeckte berwachung, also Monitoring, von dem der Mitarbeiter keine Kenntnis
hat, stellt die Rechtsprechung hhere Anforderungen: Sie sei allenfalls dann zulssig, wenn
eine offene berwachung keinen Erfolg bringt.
schen berwachung ber sie erhobenen Daten einzusehen, zu kritisieren und zu berichtigen.
nAufnahmen, die fr den Zweck, zu dem sie erhoben wurden, nicht mehr lnger bentigt werden, sind zu vernichten.
nberwachungsdaten, durch die individuelle Arbeitnehmer identifizierbar sind, drfen nicht Dritten bekannt gegeben werden, es sei denn, es besteht dafr eine gesetzliche Pflicht.
nArbeitnehmer oder zuknftige Arbeitnehmer knnen auf
das Recht auf Privatsphre nicht verzichten.
nVorgesetzte, welche diese Grundstze verletzen, mssen
mit Disziplinarmanahmen oder Entlassung rechnen.
www.linuxtechnicalreview.de
Studien
Abteilung, Marsch!
Grund- und Menschenrechte sind individuelle
Rechte. Das Argument liegt demnach auf der
Hand, wenn das Monitoring nicht auf individuelle Arbeitspltze also auf einzelne Arbeitnehmer ausgerichtet ist, wren die gesammelten
Daten ja nicht einzelnen Personen zuzuordnen,
und deshalb knnten keine individuellen Rechte
verletzt sein. Dieser Ansatz ist jedoch falsch.
Das Bundesarbeitsgericht hat bereits in seinem
Beschluss vom 26.7.1994 [5] festgehalten, dass
technische berwachungsmanahmen einer
Arbeitsgruppe geeignet sind, einen Gruppendruck aufzubauen, der insoweit mittelbar die
freie Entfaltung der Persnlichkeit der einzelnen
Gruppenmitglieder und damit deren individuelle Rechte beeintrchtigt.
Je weniger Personen eine solche Gruppe umfasst, desto grer ist die Wahrscheinlichkeit,
dass einzelner Netzverkehr von einem der Gruppenmitglieder verursacht ist. Daraus folgt: Je
kleiner die gemonitorte Gruppe, desto eher sind
individuelle Persnlichkeitsrechte betroffen.
Infos
[1] Wikipedia zu Monitoring: [http://de.wikipedia.
org/wiki/Monitoring]
[2] Betriebsverfassungsgesetz: [http://bundesrecht.
juris.de/bundesrecht/betrvg/gesamt.pdf]
[3] Internationale Arbeitsorganisation: [http://www.
ilo.org/public/german/region/eurpro/bonn/
index.htm]
[4] Bildschirmarbeits-Verordnung: [http://
bundesrecht.juris.de/bildscharbv/]
[5] Bundesarbeitsgericht zur Gruppenberwachung: [http://www.lexrex.de/rechtsprechung/
innovativ/ctg1086615676632/1386.html]
www.linuxtechnicalreview.de
Zabbix
Die Featureliste liest sich wie das Ergebnis einer
Kreuzung der bekanntesten Open-Source-Monitore in einem unbekannten Produkt. Denn was
viele Konkurrenten erst mit Untersttzung durch
Third-Party-Software schaffen, das bringt Zabbix
gleich mit.
Daniel Drrer, Bogdan Taru, Markus Feilner
www.linuxtechnicalreview.de
Projekte
Informationsbeschaffung
Bereits beim Sammeln von Informationen, der
Grundfunktion jeder berwachungssoftware,
gibt sich Zabbix kaum eine Ble. Es beherrscht
alle gngigen Methoden: aktive und passive,
solche, die sich auf Netzwerkprotokolle sttzen,
und natrlich auch SNMP. (Mit dem SNMPProtokoll beschftigt sich ein weiterer Artikel
dieser Ausgabe.)
Direkt nach der Installation stehen bereits rund
100 eingebaute Tests zur Verfgung, mit denen
sich grundlegende Funktionen und Ressourcen
wie die CPU-Last oder der Speicherverbrauch
beobachten lassen. Fr viele dieser Tests kommt
ein so genannter Agent zum Einsatz, der entweder auf dem zentralen Server oder dem berwachten Client als Informationsbeschaffer ttig
ist. In manchen Fllen sammelt er permanent
Informationen, gibt sie aber nicht ungefragt
Zentrallager fr Daten
Alle Beobachtungswerte gelangen in eine zentrale Datenbank, von wo aus sie zum Beispiel in
vielfltig konfigurierbare Diagramme einflieen.
Mglich sind Kurzzeitdarstellungen und Statusbersichten ebenso wie Langzeitstatistiken, wie
www.linuxtechnicalreview.de
Projekte
Kartierte Informationen
Abbildung 2: Zabbix sammelt Informationen ber verschiedene Kanle, neben seinen Agenten verwendet es SNMP oder zapft Netzwerkprotokolle an.
Zabbix kann darber hinaus Statusinformationen mit Karten (Maps) verknpfen, die die
Infrastruktur entweder physisch oder logisch
abbilden. Diese Karten lassen sich zudem so
verschachteln, dass man von einer bersichtsdarstellung in immer detailliertere Ansichten
hinein absteigen kann. Eine Karte als Ausgangspunkt beschleunigt erfahrungsgem die
Fehlersuche, weil sie dem Administrator einen
schnellen berblick verschafft. Dabei lsst sich
der Zugriff auf bestimmte Zoom-Stufen oder
Bereiche an die Berechtigungen bestimmter
Nutzer knpfen.
Die Karten lassen sich komplett ber das Frontend im Browser erstellen. Alles ntige findet
sich im Dialog Configuration | Maps | Create
Map. Hier legt der Administrator eine neue
Karte an, benennt sie und platziert anschlieend
via Add Element beliebige von Zabbix berwachte Objekte. Auch die Verbindungen zwischen den Hosts sind sowohl darstell- wie auch
berwachbar.
Templates
Beim schnellen Integrieren neuer Hosts in das
berwachungssystem helfen Vorlagen dem
Administrator. Diese Templates fr Web-, Application-, Datenbank- oder Mailserver oder
auch Desktoprechner legen fest, welche Dienste
oder Systemparameter zu berwachen, welche
Checks dafr auszufhren sind und in welchen
Grafiken Zabbix die Werte darstellt. Auch fr
ganze Hostgruppen stehen Templates zur Verfgung, so dass Administratoren Serverfarmen
oder Cluster mit wenigen Mausklicks hinzufgen und in gemeinsamen Grafiken berwachen
knnen.
Abbildung 3: Verschiedene Zeitreihen in einem Diagramm sind eine Spezialitt von Zabbix.
www.linuxtechnicalreview.de
Projekte
Dashboards fr jeden
Ein besonders interessantes Feature von Zabbix
stellen die so genannten Screens dar. Das sind
Ansichten, in denen sich beliebige Tabellen,
Listen, Karten oder Diagramme auf einer Bildschirmseite kombinieren lassen. ber Configuration | Screens | Create Screen kann der Administrator die gewnschten Beobachtungspunkte
fr eine auf seine Bedrfnisse zugeschnittene
Ansicht auswhlen.
Zabbix beinhaltet wie jede Software seiner Art
Algorithmen, die die Beobachtungsergebnisse
mit bestimmten Grenzwerten vergleichen, die
auch in Service Level Agreements (SLAs) festgeschrieben sein knnen. Bei einer Verletzung
dieser Limits, die sich auf Fehlerraten, Ressourcenauslastung oder auch Performancekennwerte beziehen knnen, lst Zabbix ber einen
Triggermechanismus beliebige Aktionen aus.
Auf diese Weise lsst sich sowohl die Alarmierung steuern wie auch jede andere Aktion starten, die beispielsweise zur Schadensbegrenzung
oder Selbstheilung sinnvoll erscheinen mag. Zustzlich kann der Admin Zeitfenster festlegen,
in denen ein bestimmter Trigger reagieren oder
pausieren soll.
Die Standardkonfiguration berwacht bereits
direkt nach der Installation so viele Items, dass
es oft sinnvoll erscheint, zuerst die nicht bentigten zu deaktivieren (unter Configuration |
Items). Dasselbe lsst sich auch schon auf der
Ebene der Vorlagen einstellen. Dazu whlt man
als Gruppe Templates und als Host das entsprechende Template.
Zabbix-Installation
Die Installation des Zabbix-Servers und seiner
Agenten stellt den Administrator vor keine groen Probleme. Allerdings muss er dafr berwiegend auf der Kommandozeile operieren, wogegen sich die folgende Konfiguration dann fast
vollstndig in der Browser-GUI erledigen lsst.
Im Beispiel kam ein Ubuntu Server LTS 6.0.6
(installiert mit LAMP-Option) zum Einsatz, bei
einem weiteren Agenten ein Red Hat Enterprise
Linux 4.
Damit die Installation gelingt, sollte allerdings
eine Reihe von Voraussetzungen erfllt sein
(siehe Tabelle 1).
Auerdem empfiehlt sich das Anlegen eines Accounts fr den Benutzer zabbix. Und
schlielich sollte auch die Datenbank fertig und
arbeitsfhig eingerichtet sein, bevor man die
Abbildung 4: Netzwerkdarstellungen, die den Status der berwachten Gerte reflektieren, lassen sich direkt in Zabbix entwerfen.
Abbildung 5: Neue Hosts lassen sich auf der Grundlage von Templates
leicht integrieren.
www.linuxtechnicalreview.de
Projekte
sich die Installation aus den Quellen. Der Quellcode steht auf der Zabbix-Homepage [1] zum
Download bereit. Das Configure-Skript bentigt folgende Optionen:
$ ./configure \
--enable-server \
--enable-agent \
--with-mysql \
--with-net-snmp
Der Parameter --with-net-snmp ist optional. Der Parameter --with-mysql hngt von
der Datenbank ab, die als Backend verwendet
wird. Im Beispiel soll der Zabbix-Server sich
auf dem lokalen Rechner selbst berwachen.
Dafr braucht es auerdem einen Agenten, also
--enable-agent. Nach configure komplettieren make und make install den Dreisatz
ohne Besonderheiten.
Konfiguration
Im Anschluss an das bersetzen trgt der Installateur
die ntigen Ports in /etc/
services ein.
zabbix_agent
10050/tcp
zabbix_trap
10051/tcp
Die Konfigurationsdateien
des Zabbix-Servers (zabbix_server.conf) und des
Agenten (zabbix-agentd.
/usr/local/bin/zabbix_server
zabbix@monitoring:/etc/zabbix$ U
/usr/local/bin/zabbix_agentd
www.linuxtechnicalreview.de
Projekte
zabbix@monitoring:/var/www$ sudo cp -R U
/home/zabbix/install/zabbix-1.1.6/U
frontends/php/ ./zabbix
="MYSQL";
$DB_SERVER ="DB-Host";
In dieser Zeile sollte der Admin fr dieses Beispiel DB-Host durch localhost (oder die IP
des Datenbankservers) ersetzen. Die folgenden
Zeilen enthalten die Zugangsdaten fr den Datenbankserver:
$DB_DATABASE ="zabbix";
$DB_USER
="DB-User";
$DB_PASSWORD ="**********";
Windows-Agenten
Der Zabbix-Agent fr Windows-Systeme ZabbixW32.exe verwendet den Performance Data
Helper PDH, um Informationen unter Windows 2000 und XP zu sammeln. In Windows
NT 4.0 ist PDH nicht enthalten, ein Artikel aus
der Microsoft Knowledge Base [2] beschreibt die
nachtrgliche Installation. WMI (Windows Management Instrumentation) wird offensichtlich
noch nicht untersttzt, ebenso fehlt ein Client
fr Vista.
Zabbix konfigurieren
Im Webfrontend ist der Zabbix-Server ber die
Arbeitsaufnahme seines Agenten zu unterrichten. Das geschieht ber Login | Configuration |
Hosts | Create Host. Bereits unmittelbar danach
sind dank der automatischen Checks zahlreiche
Beobachtungswerte abfragbar. Ein Klick auf den
Reiter Monitoring besttigt das. Ganz rechts
in dieser Liste der Trigger befindet sich jeweils
eine Spalte fr jeden berwachten Host. Weitere
Einstellungen erfordern von nun an kein Editieren von Konfigurationsdateien mehr, sondern
nur noch die Mens der GUI.
E
www.linuxtechnicalreview.de
Projekte
Zabbix-Benutzerverwaltung
Abbildung 8: Die Benutzerverwaltung von Zabbix erlaubt ein fein abgestuftes Berechtigungskonzept.
Alarmierung
Fr den Einsatz in greren Unternehmen ntzlich ist die flexible Benutzer- und Rechteverwaltung von Zabbix. Auch sie kann der Administrator komplett im Webfrontend konfigurieren
(Abbildung 8). Im oberen Teil der Abbildung
sind die Daten eines neu angelegten Benutzers
und einige Einstellungen zu sehen. In der unteren Hlfte dieses Dialoges stehen die User-Berechtigungen.
Der Administrator hat fr den Beispiel-User offensichtlich sehr strenge Vorgaben gewhlt: Der
Benutzer darf nur Screens betrachten (Read
Meldet ein Agent eine Strung, kann er den Administrator auf den blichen Wegen benachrichtigen: ber E-Mail, SMS, Pager oder beliebige
externe Programme. Das Zabbix-Forum auf
Sourceforge [4] enthlt zahlreiche Anleitungen
dazu; die Spanne der Mglichkeiten reicht von Audio Alerts
bis zur Benachrichtigung ber
WinPopUps.
Als Grundlage fr Alarme dienen Zabbix wahlweise auch kumulierte Daten oder die Ergebnisse von Berechnungen. Ein
Administrator erhlt in diesem
Fall bereits eine E-Mail, wenn
der bentigte Speicher oder die
durchschnittliche CPU-Auslastung einer Gruppe von Hosts,
zum Beispiel eines Clusters, einen vordefinierten Schwellwert
bersteigt. Die Vitalitt der gesamten Infrastruktur zeigt die
zentrale Statusbersicht (Abbil- Abbildung 9: In der kommenden Zabbix-Version soll die Installation komplett in der Web-GUI ablaufen.
dung 7).
www.linuxtechnicalreview.de
Projekte
only), die Konfiguration, Graphen und das Benutzermanagement bleiben vollstndig vor ihm
verborgen (Hide).
Der Dialog am unteren Ende des Bildschirms
erstellt neue Berechtigungen (die verwendbaren
Optionen sind Add, Hide, Read-Write
und Read-Only). Durch die geschickte Verknpfung von Ressource-IDs mit Berechtigungen kann der Administrator jeden User auf eine
fr ihn mageschneiderte Zabbix-Umgebung
beschrnken. Der Entzug von Ressourcen ist
dabei umfassend und betrifft alle Elemente von
Zabbix, einschlielich der Kommentare und Benachrichtungen
Zusammenfassung
Zabbix macht einen sehr ausgereiften Eindruck,
was angesichts des geringen Bekanntheitsgrades
berrascht. Der Hersteller testet nach eigenen
Die Autoren
Infos
[1] Zabbix-Homepage: [http://www.zabbix.com/
download.php]
[2] Installation PDH unter NT 4.0: [http://
support.microsoft.com/default.
aspx?scid=kb;en-us;284996]
[3] Zabbix Windows-Agent: [http://www.zabbix.
com/manual_config_w32.php]
[4] Zabbix-Projektseite bei Sourceforge: [https://
sourceforge.net/projects/zabbix]
www.linuxtechnicalreview.de
Projekte
Applikations-Monitoring mit
Opensmart
www.linuxtechnicalreview.de
Projekte
Systemarchitektur
Config-Server
Dazu zhlt ein so genannter Config-Server, der
die zentrale Verwaltung von Konfigurationsdateien der Agenten bernehmen kann. Er prft
via HTTP-HEAD-Request, ob die auf dem
Server zentral hinterlegte Agent-Konfiguration
neuer als die lokale ist, und berschreibt sie vor
Ort gegebenenfalls mit der jngeren Version
vom Server.
Den Filetransfer bernimmt ein HTTP-Server (Apache), von dem sich der Agent mittels
HTTP-GET bedient. Symlinks machen es dabei mglich, dass viele Agents auf ein und dieselbe Config-Datei zugreifen, was den Pflegeaufwand von Fall zu Fall dramatisch verringert.
Deployment-Server
Neben dem Config-Server existiert als weitere
Backend-Funktion ein Deployment-Server,
der die Agents mit einer aktuellen Version der
Opensmart-Clientsoftware versorgt. Dies erleichtert insbesondere Updates in Umgebungen mit vielen Agenten. Auch hier wird nur
via HTTP(S) kommuniziert. Abbildung 2 zeigt
schematisch den Ablauf. Um das Software-Repository des Deployment-Servers selbst zu aktualisieren, gibt es ein Kommandozeilentool
www.linuxtechnicalreview.de
Projekte
whrend der Installationsvorbereitung Gedanken zur Ressourcenausstattung des OpensmartServers machen. Ausschlaggebend dafr ist die
Anzahl der Agenten, ihr Aufrufintervall und die
Gesamtzahl der Checks.
Config
-Versi
on?
neuer
e Con
fig
Server
Daten
Frontend
Client
Webserver-Konfiguration
Da sich sowohl Config- als auch DeploymentServer fr den Filetransfer der Funktionen eines
Webservers bedienen, mssen sie auch in dessen Konfiguration bedacht werden. Ein Beispiel
dafr zeigt Listing 1. Sind mehrere Rechner zu
berwachen, empfiehlt es sich auf jeden Fall,
mod_perl zu verwenden (das jedoch per Default deaktiviert ist). Damit lsst sich wertvolle
CPU-Zeit sparen. Auch sollte sich der Admin
Listing 1: Apache-Konfiguration
01
# osmart.apache.conf
15 <Directory /home/osmart/htdocs/deployment>
02
<VirtualHost osmart.company.com>
16 Order allow,deny
03 ServerName osmart.company.com
04 ErrorLog /var/log/apache/osmart-error.log
05 CustomLog /var/log/apache/osmart-access.log
19 Options +Indexes
common
20 </Directory>
06
21
07 DocumentRoot /home/osmart/htdocs
22 <Directory /home/osmart/htdocs/conf>
23 Order allow,deny
09 <Directory /home/osmart/cgi-bin>
11 Order allow,deny
26 Options +Indexes
27 </Directory>
13 </Directory>
28
14
29
</VirtualHost>
www.linuxtechnicalreview.de
Projekte
= "geheim";
07
08
# 3. Opensmart uses auto_commit
09
$has_autocommit=1;
Systemvoraussetzungen
Opensmart stellt keine hohen Ansprche. Alles,
was auf dem zu berwachenden Server bentigt
wird, ist ein Perl-Interpreter in Version 5.005
oder hher und etwa 1 MByte Speicherplatz fr
die Installation des Ag.ents.
Auf der Serverseite braucht Opensmart einen
Apache-Webserver, dessen mod_perl Funktion (optional), die Perl-Module XML::Simple,
Chart::Lines und DBI sowie eine Datenbank.
Die Datenbank nimmt alle Werte auf. Dafr
kommen derzeit MySQL (ab Version 4.1), PostgreSQL, Oracle oder DB2 in Frage.
Auf der Downloadseite [1] finden sich die folgenden drei Tar-Archive:
nopensmart-server-version.tgz: Beinhaltet
das Server-Paket von Opensmart.
nopensmart-docs-version.tgz: Dokumentation fr Server und Checks, die auf dem Server laufen.
nopensmart-agent-version.tgz: Dieses TarFile beinhaltet den Opensmart-Agenten mit
allen Built-In-Checks.
Server-Installation
Nach dem Entpacken wird die Server-Installation durch das Kommando export OSMART_
HOME=$HOME /usr/bin/perl ./source/server/
install_server $OSMART_HOME gestartet.
Die Variable $OSMART_HOME bestimmt
dabei das Zielverzeichnis der Server-Installation. Hier ist es das Home-Verzeichnis des Benutzers, der die Installation startet.
Zu beachten ist, dass der Benutzer, unter dessen Kennung Apache luft, Schreibrechte
auf die Logdatei $OSMART_HOME/logs/
opensmart.log haben muss. Fr die Konfiguration der Datenbank liegen Create-Skripte
unter
$OSMART_HOME/install/createdb_
RDBMS_.sql. Das Schema lsst sich mit dem
Befehl cat createdb_mysql-1.0.sql | mysql -u
osmart -p 'geheim' osmart anlegen. Die Konfigurationsdatei, die der Opensmart-Server fr
die Datenbank-Verbindung bentigt, liegt unter
$OSMART_HOME/etc/opensmart.db.config
Listing 3: Crontab-Eintrge
01
export $OSMART_HOME=$HOME
02
03
# Notify-Server alle 5 Minuten
ausfuehren
04
* */5 * * * $OSMART_HOME/bin/
notifysrv
05
06
# archive_errors jede halbe Stunde
ausfuehren
07
* */30 * * * $OSMART_HOME/bin/
archive_arrors
www.linuxtechnicalreview.de
Projekte
Listing 4: Agent-Konfiguration
001
<!DOCTYPE OSAGENT SYSTEM "osagentconfig.dtd">
040
002 <OSAGENT>
042 <PROC>
004 <OSAGENTCONFIG>
043
005
044
<PROCNAME>squid</PROCNAME>
045
<ERRORLEVEL>ERROR</ERRORLEVEL>
046
006
<COLLECTORSERVER>
<URL>http://192.168.1.1/cgi-bin/
collectorcgi.pl</URL>
007
</COLLECTORSERVER>
008
<CONFIGSERVER>
009
<URL>http://192.168.1.1/conf/</URL>
010
</CONFIGSERVER>
011
<DEPLOYMENTSERVER>
012
<URL>http://192.168.1.1/cgi-bin/
deploymentcgi.pl</URL>
013
</DEPLOYMENTSERVER>
dieser
047
automatisch nachgestartet
(Error-Correction) -->
048
FIXCMD>
049
</PROCESS>
050
<PROCESS>
051
<PROCNAME>sshd</PROCNAME>
014 </OSAGENTCONFIG>
052
053
</PROCESS>
016
054
<PROCESS>
055
018 <DISK>
056
019
057
</PROCESS>
<PROCESS>
<FS>
020
<FSNAME>.*</FSNAME>
058
021
<ERRORLEVEL>WARNING</ERRORLEVEL>
059
022
<VALUE>85</VALUE>
060
023
<FORMULA>PERCENT</FORMULA>
061
<ERRORLEVEL>WARNING</ERRORLEVEL>
<PROCNAME>xinet</PROCNAME>
<ERRORLEVEL>ERROR</ERRORLEVEL>
<PROCNAME>crond</PROCNAME>
<ERRORLEVEL>ERROR</ERRORLEVEL>
</PROCESS>
024
</FS>
062 </PROC>
025
<FS>
063
026
<FSNAME>.*</FSNAME>
027
<ERRORLEVEL>ERROR</ERRORLEVEL>
065
028
<VALUE>95</VALUE>
066 <SIMPLE>
<FORMULA>PERCENT</FORMULA>
067
029
030
</FS>
031
032
033
068
SCRIPTNAME>
069
070
<CHECKNAME>uptime</CHECKNAME>
<ERRORLEVEL>WARNING</ERRORLEVEL>
034
<FSNAME>/mnt/tmp</FSNAME>
071
035
<ERRORLEVEL>NORMAL</ERRORLEVEL>
072
036
<VALUE>105</VALUE>
073
037
<FORMULA>PERCENT</FORMULA>
074
<SCRIPT>
038
</FS>
039 </DISK>
<PROCESS>
075
</SCRIPT>
<SCRIPTNAME>/home/opensmart/bin/checkfan</
SCRIPTNAME>
www.linuxtechnicalreview.de
Projekte
mance ntig: Tte man dies nicht, verlngerten sich nach und nach die Antwortzeiten des
Frontends. Bei einer groen Anzahl von Agenten, lassen sich die einzelnen OpensmartBackend-Komponenten auch auf verschiedene
Rechner verteilen.
Agent installieren
Der Opensmart-Agent wird, hnlich wie der
Server, durch ein Installationsskript aufgespielt:
<CHECKNAME>fan</CHECKNAME>
116
<HTTPRQST>GET http://www.linux-magazin.de
HTTP/1.0</HTTPRQST>
</SCRIPT>
078 </SIMPLE>
117
079
118
<ERRORLEVEL>ERROR</ERRORLEVEL>
119
<RUNIF_CUSTOM>ping -c 4 www.google.de</RUNIF_
CUSTOM>
081 <SOCKETS>
082 <!-- SSH Socket auf Port 22 -->
120 </APP2CHECK>
083 <CHECK4SOCKET>
121 </WEBAPP>
084
<INTERFACE>0.0.0.0</INTERFACE>
122
085
<PORT>22</PORT>
086
<ERRORLEVEL>WARNING</ERRORLEVEL>
124 <SWAP>
087 </CHECK4SOCKET>
125 <TRESHOLD>
126
<MAX>60</MAX>
089 <CHECK4SOCKET>
127
<ERRORLEVEL>WARNING</ERRORLEVEL>
090
<INTERFACE>0.0.0.0</INTERFACE>
128 </TRESHOLD>
091
<PORT>3128</PORT>
129
092
<ERRORLEVEL>ERROR</ERRORLEVEL>
130 <TRESHOLD>
093 </CHECK4SOCKET>
131
<MAX>90</MAX>
094 </SOCKETS>
132
<ERRORLEVEL>ERROR</ERRORLEVEL>
095
133 </TRESHOLD>
096 <LOAD>
134 </SWAP>
135
098 <LOAD2CHECK>
099
<LOADINTERVALL>1</LOADINTERVALL>
137 <LXSWRAID>
100
<LOADALLOWED>6</LOADALLOWED>
101
<ERRORLEVEL>WARNING</ERRORLEVEL>
139 <DEVICE>
102 </LOAD2CHECK>
140
<NAME>md0</NAME>
141
<ERRORLEVEL>ERROR</ERRORLEVEL>
104 <LOAD2CHECK>
142 </DEVICE>
105
<LOADINTERVALL>15</LOADINTERVALL>
106
<LOADALLOWED>8</LOADALLOWED>
144 <DEVICE>
107
<ERRORLEVEL>ERROR</ERRORLEVEL>
145
<NAME>md1</NAME>
108 </LOAD2CHECK>
146
<ERRORLEVEL>ERROR</ERRORLEVEL>
109 </LOAD>a
147 </DEVICE>
110
148 </LXSWRAID>
111 <WEBAPP>
149
112 <APP2CHECK>
113
<APPNAME>Verfuegbarkeit-www.linux-magazin.
Listing5
151
de</APPNAME>
dargestellt -->
114
<HOST>192.168.1.1</HOST>
152
115
<PORT>3128</PORT>
153
</OSAGENT>
www.linuxtechnicalreview.de
Projekte
Apache-Webserver. Eine vollstndige Tag-Referenz fr den Agenten ist unter [2] zu finden.
In unserem Beispiel wird das Betriebssystem
(hier Debian Sarge) sowie die Applikation Squid
[3] berwacht. Aus der Liste der Built-In-Checks
[4] werden dafr die folgenden ausgewhlt:
nuptime: Hat der Proxyserver unerlaubterweise gebootet (Listing 4, Zeile 67-71)?
ndisk: Filesysteme ab einem Fllgrad von
85 Prozent werden aufgrund der Konfiguration mit dem Status WARNING dargestellt,
ab 90 Prozent wird ein ERROR gemeldet
(Zeile 18-39). Wichtig: Wird ein Filesystem
wie etwa Ext3 verwendet, so ist zu bercksichtigen, dass meistens die Option Reserved-Block-Count nicht auf Null steht und
sich somit die Ausgabe von df von der
Rechnung Gesamtkapazitt - Benutzer-Speicher unterscheidet.
nproc: Elementare Betriebssystem-Prozesse
sowie der Squid-Prozess werden berwacht
(Zeile 42-62).
nlogs: Regulre Ausdrcke filtern Systemund Squid-Logfiles auf Fehler.
nload: Steigt der Load-Average des Systems,
kann unter Umstnden eine Beeintrchtigung
des Dienstes die Folge sein ( Zeile 96-109).
nlxswraid: Dieser Check signalisiert md-
21
<REGEX>session.*opened.*for.*user</REGEX>
02
[ .. ]
22
03 <LOGS>
REGEX>
23
05 <LOGFILE>
24
06
25
<LOGFILENAME>/var/log/messages</LOGFILENAME>
07
08
09
26
<!-- MaxAge Funktion, Fehler wenn Logfile
seit 300 Minuten nicht mehr beschrieben
wurde -->
10
11
12
13
<AGE>
<MAXAGE>300</MAXAGE>
<ERRORLEVEL>ERROR</ERRORLEVEL>
</AGE>
<!-- Meldungen, welche ignoriert werden
koennen -->
16
17
18
19
20
27
28
29
<PRIORITY>200</PRIORITY>
30
<ERRORLEVEL>WARNING</ERRORLEVEL>
31
32
<REGEX>.*</REGEX>
</LOGFILTER
33 </LOGFILE>
34
14
15
[ .. ]
</LOGFILTER>
<LOGFILTER>
<PRIORITY>100</PRIORITY>
<ERRORLEVEL>NORMAL</ERRORLEVEL>
<REGEX>syslogd.*restart</REGEX>
<REGEX>session.*closed.*for.*user</REGEX>
37 [ .. ]
38 </LOGS>
39 [ .. ]
40
</OSAGENT>
www.linuxtechnicalreview.de
Projekte
Conditional-Tags
Um Checks nur unter bestimmten Bedingungen
ablaufen zu lassen, stehen so genannte RUNIFTags (conditional checks) zur Verfgung, die
zusammen mit jedem anderen Test verwendbar
sind. Sie bewirken, dass der Agent Checks nur
in bestimmten Zeitfenstern startet (RUNIF_
TIME), nur dann ausfhrt, wenn ein definiertes
Verzeichnis existiert (RUNIF_DIR), eine bestimmte Zeitspanne seit der letzten Ausfhrung
verstrichen ist (RUNIF_INTERVAL) oder ein
benutzerdefinierter Befehl den Returncode 0
liefert (RUNIF_CUSTOM). Diese Konditionen
sind in vielen Fllen sehr ntzlich, zum Beispiel:
nRUNIF_TIME: Eine Datenbank wird in
der Zeit zwischen 02:00 und 03:00 Uhr morgens fr ein Offline-Backup gestoppt. Ansonsten soll der Datenbankprozess allerdings
berwacht werden. Dieses Zeitfenster wird in
einer Cron-hnlichen Syntax im RUNIFTag verpackt: <RUNIF_TIME>* 03-02 * *
*</RUNIF_TIME>
nRUNIF_DIR: Ein Heartbeat-Cluster (Aktiv/Passiv) arbeitet mit Shared Storage, der
immer vom aktiven Knoten gemountet wird.
Nur auf diesem Knoten luft dann auch der
Applikations-Prozess mysql-safe. Mit Hilfe
einer RUNIF_DIR-Bedingung (zum Beispiel <RUNIF_DIR>/mnt/san/lost+found
</RUNIF_DIR>) kann nun der Agent feststellen, ob sein Knoten der aktive ist und ob
er also hier auch nach dem Applikations-Prozess schauen muss.
nRUNIF_CUSTOM: Um die Funktion unseres Proxyservers zu testen, wird ein HTTPRequest an www.linux-magazin.de gesendet.
Liefert dieser Request nicht das gewnschte
Ergebnis (nmlich die HTML-Seite des Linux-Magazins), so kme als Ursache entwe-
Selbstheilung
Wie die RUNIF-Tags, ist auch das Tag FIXCMD in allen Konfigurationsbereichen verwendbar. Jeder Built-In-Check kann so versuchen, eine Fehlerbehebung zu starten, sobald
das Check-Ergebnis ungleich NORMAL ist.
Listing 4 Zeile 48 zeigt ein FIXCMD-Tag fr
den Proc-Check. Luft der Prozess Squid nicht
mehr, so wird versucht, diesen durch ein Kommando (FIXCMD) wieder zu starten. In unserem Beispiel wre dies der Befehl sudo /etc/init.
d/squid restart.
Logfiles durchstbern
Eines der hilfreichsten Tools aus Opensmarts
Werkzeugkiste ist der Check LOGS. Er ermglicht es, Logfiles zeilen- oder blockweise
auf das Vorhandensein oder Fehlen bestimmter
Muster zu durchsuchen. Listing 5 beschreibt das
LOGS-Element anhand des Squid-Proxyserver-Beispiels. Zum einen wird das System-Logfile /var/log/messages geprft, zum anderen
/var/log/squid/cache.log, in dem alle Squidrelevanten Meldungen stehen.
Doch zunchst zum LOGFILE-Element von
/var/log/messages (Zeile 5-33). Unterhalb
dieses Elements sind zwei Logfilter-Klassen definiert. Alle Eintrge, auf die Filter der Klasse 1
nicht zutreffen (Zeile 16-24), werden von Klasse
2 erfasst (Zeile 28-32). Dabei wird die Reihen-
www.linuxtechnicalreview.de
Projekte
Logformate
Der LOGS-Check kann mit einzelnen Logzeilen oder auch Logblcken umgehen. Eine Syslog-Ausgabe kann mit dem LOGTYPE NORMAL (default) analysiert werden, Spezial-Logformate die beispielsweise IBMs DB2 oder auch
Websphere MQ verwenden, werden mit einem
LOGTYPE UDB beziehungsweise MQS geprft.
Listing 6: chckfan
01
#!/bin/bash
18 echo "FATAL"
02
19 echo
03
# Script, um alle Luefter von HP-Proliant
Hardware zu ueberwachen
vorhanden."
04
# Wenn ein oder mehrere Luefter nicht den Status
"Nominal"
22
fi
05
# haben, so wird der ERRORLEVEL "ERROR"
23
ausgegeben
24
# /proc/cpqfan auslesen
06
07
# Wichtig: Alle cpq* Module muessen geladen sein
08
09
# ein "normaler" Output von "cat /proc/cpqfan"
ist:
10
#ID
TYPE
LOCATION
Low
12
# 2
Low
13
# 3
Low
14
# 4
Low
Var. Speed
(
Processor Zone
Nominal
Yes
I/O Zone
Nominal
Yes
Processor Zone
Nominal
Yes
Yes
( 15)
Var. Speed
(
8)
Var. Speed
( 20)
"LOCATION" \
26
"Nominal"
| grep -v
\
| wc -l`
28
8)
Var. Speed
25
export failed_devices=`cat /proc/cpqfan | grep -v
27
STATUS
29
if [ $failed_devices -ge 1 ]; then
30 echo "ERROR"
31 echo
32 echo "$failed_devices Luefter meldet ein Status
<> Nominal:"
33 cat /proc/cpqfan
34
else
35 echo "NORMAL"
15
36 echo
16
# pruefen, ob /proc/cpqfan vorhanden ist:
37 cat /proc/cpqfan
17
if [ ! -e /proc/cpqfan ]; then
38
fi
www.linuxtechnicalreview.de
Projekte
Checks zu implementieren. Opensmart bewerkstelligt dies mit dem so genannten SIMPLEAdapter. Dies ist ein mitgeliefertes kleines Programm, das ein beliebiges eigenes Check-Skript
ausfhrt.
Einzige Bedingung fr dieses Skript: Die Fehlerklasse (ERRORLEVEL) muss in der ersten Zeile der Ausgabe (STDOUT) hinterlegt
sein. Die restliche Ausgabe wird nicht durch den
SIMPLE-Adapter interpretiert, sondern nur
als Detail an den Opensmart-Server weitergegeben. Listing 4, Zeile 74-77 zeigt die Einbindung
des Shell-Skripts checkfan (unter Listing 6 zu
finden). ber den SIMPLE-Adapter lassen
sich auerdem auch Nagios-Plugins einbinden.
Dies wird ber das dafr vorgesehene CHECKTYPE-Tag konfiguriert.
Fazit
Opensmart stellt ein breites Spektrum an Werkzeugen und eingebauten Checks zur Verfgung.
Sie eignen sich unter anderem besonders dafr, Datenbanken wie Oracle, DB2 oder auch
MySQL zu berwachen. Auch verbreitete Middleware wie Websphere, Websphere MQ, Tomcat,
Jboss oder ein Webserver lsst sich mhelos mit
Opensmart beobachten. Built-In-Checks fr die
verschiedensten Unix-Derivate sind ebenfalls
mit an Bord.
Die Konfiguration der Agenten der zeitaufwndigste Teil bei der Implementierung einer
Monitoring-Lsung bleibt dem Admin aber
nach wie vor nicht erspart. Untersttzt wird er
dabei durch Monitoring Guides, die in der Benutzer-Dokumentation von Opensmart [7]
enthalten sind. Sie erleichtern merklich die korrekte Konfiguration, was sich wiederum durch
automatische Fehlerbehebung, vereinfachte Diagnosen und letztlich durch hhere Verfgbarkeit auszahlt.
Mit dem automaischen Deployment der Agenten und der zentralen Konfigurationsverwaltung
verfgt Opensmart ber zwei Features, die selbst
wesentlich umfangreichere Lsungen nicht immer mitbringen.
Bei allem bleibt Opensnart schlank und handlich und empfiehlt sich daher besonders auch
dort, wo wesentlich komplexere Software, die
entsprechened mehr Verwaltungsaufwand bentigte, ungerechtfertigt wre. (jcb)
nnn
Infos
[1] Opensmart-Homepage:
[http://opensmart.sourceforge.net]
[2] Tags zur Konfiguration des Agenten:
[http://opensmart.sourceforge.net/
docs/documentation/userguide/
osagentxmlcommon.html]
[3] Squid-Homepage:
[http://www.squid-cache.org]
[4] bersicht Built-In-Checks:
[http://opensmart.sourceforge.net/docs/
documentation/userguide/overview_checks.
html]
[5] Perl Regular-Expressions Howto:
[http://www.comp.leeds.ac.uk/Perl/matching.
html]
[6] xmllint-Homepage: [http://xmlsoft.org]
[7] Opensmart-Userguide:
[http://opensmart.sourceforge.net/docs/
documentation/userguide/]
www.linuxtechnicalreview.de
10
Open NMS
Die meisten Netzwerkmanagement-Lsungen starteten ihre Karriere als Hacks dazu geschrieben,
eine kleine berwachungsaufgabe einfach zu lsen.
Mit der Zeit und anderen Anforderungen wuchsen
und generalisierten sich die Pakete dann. Nicht so
Open NMS. Charly Khnast
www.linuxtechnicalreview.de
Projekte
Open NMS grast damit die mglichen 254 Nodes zwischen 10.50.5.1 und 10.50.5.254 regelmig ab. Bekommt es auf einem Interface eine
Antwort, unterzieht die Software dieses Interface
einem Portscan. Die gefundenen Dienste landen
gleich mit in der berwachung, ebenso wie alle
Informationen, die sich eventuell per SNMP
beziehen lassen. Damit das Datensammeln per
SNMP funktioniert, muss der Admin die dazugehrigen SNMP-Communities einrichten. Das
passiert in einer anderen Konfigurationsdatei,
der snmp-config.xml. Sie sieht beispielsweise
so aus:
<snmp-config retry="3" timeout="800"
read-community="public"
write-community="private">
<snmp-config>
Open NMS [1] ist angenehm anders: Seine Entwickler haben es von Anfang an mit dem Ziel
entwickelt, umfangreiche Netze im Blick halten
zu knnen. In der Tat arbeitet das Paket berdurchschnittlich hufig in sehr groen Installationen, wie bei Hostern oder Internetprovidern.
Open NMS ist Open Source, in Java geschrieben
und auf vielen Linux-Distributionen, Solaris 8
und 9 sowie Mac OS X lauffhig.
Um mglichst effizient zu sein, konzentriert sich
Open NMS auf drei Kernbereiche: die Ausfallberwachung von Systemen und Diensten, das
Datensammeln via SNMP und das Alarmierungsmanagement. Open NMS bringt ein Web
interface mit, ber das der Admin die hufigsten
Konfigurationsarbeiten erledigen kann, jedoch
bei weitem nicht alle. Fr fortgeschrittene Funktionen oder das Feintuning gibt es eine Reihe
von XML-Konfigurationsdateien. Eine davon
regelt das Auto-Discovery.
Auto-Discovery konfigurieren
Nicht immer kann oder will der Admin jede
einzelne zu berwachende Komponente eigenhndig einpflegen. Fr diesen Fall gibt er der
Auto-Discovery-Funktionen einen Netzbereich
vor, innerhalb dessen Open NMS vorhandene
Nodes selbst findet und automatisch in die
berwachung einbindet. Die zustndige Konfigurationsdatei heit discovery-configuration.
xml und sieht der aus Listing 1 hnlich.
Listing 1: discovery-configuration.xml
01
<discovery-configuration threads="1" packets-per-second="1"
02
initial-sleep-time="300000" restart-sleep-time=
"86400000"
03
retries="3" timeout="800">
04
05
06
<begin>10.50.5.1</begin>
07
08
<end>10.50.5.254</end>
</include-range>
09
</discovery-configuration>
www.linuxtechnicalreview.de
Projekte
Geplante Wartungsfenster
In der Poller-Datei poller-configuration.xml
findet sich serienmig ein Verweis auf den
Wartungskalender:
<outage-calendar xmlns="">zzz fromU
poll-outages.xml zzz</outage-calendar>
Dort kann der Administrator einzelne oder wiederkehrende Termine definieren, zu denen ein
Listing 2: poller-configuration.xml
01
<service name="HTTP" interval="300000" user-defined="false"
status="on">
02
03
04
05
06
share/rrd/response"/>
07
08
</service>
Systemvoraussetzungen
Fr die Tests anlsslich dieses Beitrags kam
Open NMS 1.3.2 aus dem Subversion-Respository der Projektseite zum Einsatz, um mit einer mglichst neuen Version zu arbeiten. Da
Open NMS zum berwiegenden Teil in Java
geschrieben ist, sind Tomcat 5.5 und Suns JDK
in der Version 5.0 mit im Boot. Als Datenbank
diente PostgreSQL, sptere Versionen von
Open NMS werden wohl auch andere Datenbanksysteme untersttzen.
Als Testsystem diente ein Debian von der bevorstehenden Version Etch. Unter [2] gibt es
eine brauchbare Installationsanleitung fr
Open NMS auf dieser Plattform. Sie ist sicherheitstechnisch etwas fragwrdig, fr einen
Testbetrieb aber genau das Richtige.
www.linuxtechnicalreview.de
Projekte
Alarmierungsmanagement
Stellt nun ein Server drei Dienste bereit und fllt
er pltzlich vollstndig aus, wre es unschn,
wenn Open NMS vier separate Alarme sendet
einen pro Dienst und einen fr den Node. Besser wre, wenn die Software lediglich node
down senden und auf die Alarmierung der einzelnen ausgefallenen Dienste verzichten wrde.
Der Admin konfiguriert dieses Verhalten, indem
er in der Poller-Konfiguration die Zeile
<node-outage status="on">
einfgt. Ebenso kann er Path-Outages definieren: Fllt beispielsweise ein Switch aus, so sind
in der Regel alle daran angeschlossenen Nodes
nicht mehr verfgbar. Solche Beziehungen lassen sich in Open NMS abbilden, sodass es beim
Ausfall einer zentralen Komponente nur deren
Malheur anzeigt, nicht aber der Ausfall aller davon abhngigen Nodes.
Abbildung 2: Das Webinterface informiert ber den Status der berwachten Nodes. Hier scheint der Datenbankserver pflegebedrftig zu sein.
[3] Skripte an die Polling-Engine bergeben: [http://
opennms.org/index.php/CheckWebSite.pl]
[4] Preisliste fr Open-NMS-Dienstleistungen: [http://
www.opennms.com/site/index.php?option=
com_content&task=view&id=13&Itemid=26]
Der Autor
Charly Khnast administriert Unix-Betriebssysteme
im Rechenzentrum Niederrhein in Moers. Zu seinen
Aufgaben gehren die Sicherheit und Verfgbar
keit der Firewalls und der DMZ (demilitarisierte
Zone). Er schreibt zudem jeden Monat im LinuxMagazin eine Admin-Kolumne, welche die gleichnamige Rubrik einleitet.
03
04
05
06
</service>
Listing 4: poll-outages.xml
01
<outage name="Mailserver1 Maintenance" type="weekly">
02
03
<interface address="10.50.5.20"/>
Infos
04
</outage>
06
07
<interface address="10.50.6.20"/>
05
<outage name="Mailserver2 Maintenance" type="weekly">
08
</outage>
www.linuxtechnicalreview.de
Langzeitberwachung mit
www.linuxtechnicalreview.de
Praxis
Rrdtool
Messzyklen
Wenn klar ist, welche Datentypen sich fr die
Messung eignen, ist es an der Zeit, die Intervalle
fr die Aufzeichnung festzulegen. Die Zahl der
Messwerte eines Zyklus (die Schrittweite oder
Steps) und die Zahl der Generationen bestimmen die Struktur der Round Robin Archive
(RRAs). Eine Konsolidierungsfunktion errechnet aus den archivierten Daten Minimal- und
Maximalwerte fr den nchsten Zyklus.
E
ABSOLUTE:heartbeat:min:max]...]
04 RRA:AVERAGE | MIN | MAX | LAST:xff:steps:rows
05
[[RRA:AVERAGE | MIN | MAX | LAST:xff:steps:rows]...]
www.linuxtechnicalreview.de
Praxis
04
DS:load_1min:GAUGE:600:0:500 \
05
DS:load_5min:GAUGE:600:0:500 \
06
DS:load_15min:GAUGE:600:0:500 \
07
RRA:AVERAGE:0.5:1:600 \
08
RRA:AVERAGE:0.5:6:700 \
09
RRA:AVERAGE:0.5:24:775 \
10
RRA:AVERAGE:0.5:288:797 \
11
RRA:MAX:0.5:1:600 \
12
RRA:MAX:0.5:6:700 \
13
RRA:MAX:0.5:24:775 \
14
RRA:MAX:0.5:288:797
www.linuxtechnicalreview.de
Praxis
den Bezeichner vname eindeutig zu kenzeichnen. Das folgende Listing zeigt die Syntax fr
den Zugriff auf die Datenbank:
<vname>=<rrdfile>:<ds-name>:U
<CF>[:step=<step>]U
[:start=<time>][:end=<time>]U
[:reduce=<CF>]
13
--vertical-label="processes in the run queue" \
14
--slope-mode \
15
DEF:a="/var/www/cacti/rra/localhost_load_1min_5.rrd":load_
1min:AVERAGE \
16
DEF:b="/var/www/cacti/rra/localhost_load_1min_5.rrd":load_
5min:AVERAGE \
17
DEF:c="/var/www/cacti/rra/localhost_load_1min_5.rrd":load_
15min:AVERAGE \
18
AREA:a#EACC00:"1 Minute Average"
19
GPRINT:a:LAST:" Current\:%8.2lf\n"
20
LINE2:b#EA8F00:"5 Minute Average"
\
\
21
GPRINT:b:LAST:" Current\:%8.2lf\n"
22
LINE1:c#FF0000:"15 Minute Average"
23
GPRINT:c:LAST:"Current\:%8.2lf\n"
www.linuxtechnicalreview.de
Praxis
www.linuxtechnicalreview.de
Praxis
phen. Hinter den meisten Einstellungen sind die entsprechenden Rrdtool-Parameter erkennbar. Cacti verwaltet die Vorlagen fr Devices, Graphen und
Datasources in einem eigenen
Abschnitt der Konsolenansicht.
Details dazu finden sich auf der
Webseite [2], die ergiebigste Anlaufstelle fr spezielle Fragen ist
das Cacti-Forum [3].
Enterprisefhigkeit
SetHandler server-status
Order deny,allow
Deny from all
Allow from 10.10.10.10
</Location>
www.linuxtechnicalreview.de
Praxis
Abbildung 4: Fr den Austausch von Templates kennt Cacti ein eigenes XML-Dateiformat.
fehlenden Trennung von GUI und Datacontrolling ist dann jedoch kein Upgrade von Cacti
mehr mglich.
Fazit
Cacti und Rrdtool sind die im Moment wohl
verbreitetsten Werkzeuge fr die Langzeitberwachung. Die grafische Oberflche von Cacti
erleichtert die Bedienung der leistungsfhigen
Bibliothek Rrdtool. Dass Cacti nicht alle Features von Rrdtool erfasst, ist als Kompromiss
akzeptabel: Die Weboberflche ist bersichtlich
und konsequent strukturiert.
Strend wirkt allerdings, dass manche Administrationsaufgaben wegen der vielen erforderlichen Schritte, die immer mit einem Reload der
Seite einhergehen, viel Zeit kosten.
Ein Kommandozeilen-Interface, um solche Vorgnge zu automatisieren, fehlt. Eine Einbindung
von Cacti in eine Kundenoberflche oder ein
berwachungswerkzeug, das neben der Langzeitberwachung noch andere Monitoring-Aspekte erfasst, ist wegen der fehlenden Trennung
von Oberflche und Datenhaltung nur unter
groem Aufwand mglich. (pkr)
nnn
Infos
[1] Rrdtool: [http://oss.oetiker.ch/rrdtool]
[2] Cacti: [http://www.cacti.net]
[3] Cacti-Foren: [http://forums.cacti.net]
[4] Templates: [http://www.debianhelp.co.uk/
cactitemplates.htm]
[5] Forum-Thread zum Apache-Monitoring:
[http://forums.cacti.net/about9861.html]
[6] Nagios: [http://www.nagios.org]
[7] BigBrother: [http://www.bb4.org/home1.html]
Der Autor
Abbildung 5: Cacti integriert in eine individuelle Administrationsoberflche hlt meistens nur bis zum nchsten Update.
Dipl.-Inform. Marc Grimme ist einer der Geschftsfhrer der Atix GmbH. Sein Ttigkeitsschwerpunkt
umfasst Storage- un d hochskalierbare Infrastrukturlsungen sowie Cluster auf Linux..
www.linuxtechnicalreview.de
www.linuxtechnicalreview.de
Praxis
Alles, was es berwacht, egal ob Rechner, Router oder jede andere Ressource im Netz, nennt
Nagios einen Host. Um ber dessen Zustand
etwas sagen zu knnen, prft ihn die Software
regelmig, entweder lediglich auf Erreichbarkeit (Hostcheck) oder funktional. Die Funktionsprfung (Servicecheck) bezieht Dienste
unter der Adresse des Host ein oder untersucht
zum Beispiel die Inanspruchnahme von Ressourcen, etwa den Fllstand der Festplatte. Die
Ergebnisse vergleicht Nagios mit zwei festgelegten Warnschwellen und stellt so fest, ob sich der
Proband im Status OK, WARNING oder
CRITICAL befindet. Stellt sich dabei ein Problem heraus, lst das eine Benachrichtigung der
Admins aus, etwa via E-Mail oder SMS.
Die eigentlichen Checks fhrt Nagios dabei gar
nicht selbst aus, sondern bedient sich dafr externer Plugins, also kleiner, eigenstndiger Testprogramme. Ihnen bergibt der Admin ber
eine standardisierte Schnittstelle Parameter wie
die IP-Adresse des Ziel-Host oder Schwellwerte
fr die Statuslevel. Im Gegenzug melden sie ihr
Prfergebnis ebenso wohl formatiert zurck.
Der Vorteil dieses Konzeptes ist seine leichte Erweiterbarkeit, denn die ntigen Plugins lassen
sich in beinahe jeder Sprache selbst programmieren.
Installation vorbereiten
Die aktuelle, stabile Nagios-Version ist derzeit
2.7, und fr den produktiven Einsatz in kleinen
und mittleren Netzwerken ist das auch genau
die richtige. Lediglich fr die berwachung
eines sehr groen Netzes, also ab 300 oder 400
Hosts, kann sich auch schon jetzt ein Blick auf
die kommende Version 3.0 lohnen, denn sie bietet vor allem in greren Umgebungen deutliche
Performancevorteile und kann Probleme noch
schneller erkennen. (Ausfhrliches zur Zukunft
von Nagios in einem Beitrag seines Entwicklers
und Maintainers Ethan Galstad lesen Sie ebenfalls in dieser Ausgabe.)
Grundstzlich ist es unproblematisch, die Nagios-Pakete der eingesetzten Linux-Distribution
zu verwenden, solange sie im Vergleich zur aktuellen Version nicht zu weit hinterherhinken.
Fr eine erste interne Evaluierung reicht Nagios
ab Version 2.5 bereits vllig aus. Pakete fr Debian bekommt man beispielsweise unter [1], fr
Red Hat, Fedora oder Red Hat Enterprise direkt
auf [2] und fr Suse auf den bekannten FTPMirrors. Fr den produktiven Einsatz ist es aber
sicher besser, Nagios selbst zu kompilieren besonders, weil sich Sicherheitsupdates so schneller einspielen lassen.
Nagios bersetzen
Um Nagios selbst zu kompilieren, sollten auf
dem Server die Pakete apache oder apache2,
libgd, libjpeg-devel und openssl-devel
inklusive der entsprechenden Abhngigkeiten
installiert sein. Die folgenden Kommandos bereiten den Server auf die kommende Nagios-Installation vor:
useradd nagios
groupadd nagios
mkdir /usr/local/nagios
chown nagios:nagios /usr/local/nagios
useradd nagcmd
groupmod -A nagcmd www-data
groupmod -A nagcmd nagios
www.linuxtechnicalreview.de
Praxis
Die Nagios-Konfiguration im
berblick
Die zentrale Nagios-Konfigurationsdatei /usr/
local/nagios/etc/nagios.conf enthlt alle globalen Einstellungen fr den Nagios-Server selbst.
Weitere Einstellungen, die vor allem festlegen,
was, wann, wo und wie zu berwachen ist, bezeichnet Nagios als Object Configuration. Derartige Einstellungen landen in eigenstndigen
Konfigurationsdateien, auf die nagios.conf
verweist. Am besten legt man dafr ein komplettes Unterverzeichnis an und legt dort die
verschiedenen Objekte in einer oder mehreren
Dateien ab.
Damit Nagios auch nur eine einzige berwachung in Angriff nehmen kann, bentigt es
mindestens Konfigurationseintrge fr die folgenden Objekte.
nTimeperiods: Zeitperioden
nCommands: berwachungschecks und Benachrichtigungen
Listing 1: Timeperiod-Konfiguration
01
define
timeperiod {
02
timeperiod_name
nonworkhours
03
alias
04
monday
00:00-09:00,17:00-24:00
05
tuesday
00:00-09:00,17:00-24:00
06
wednesday
00:00-09:00,17:00-24:00
07
thursday
00:00-09:00,17:00-24:00
08
friday
00:00-09:00,17:00-24:00
09
saturday
00:00-24:00
10
sunday
00:00-24:00
11
}
nContacts:
Zeitrume
Hat man sich einen ersten berblick verschafft,
kann man sich den Objekten im Einzelnen zuwenden. Ein erstes, leicht zu berblickendes
Objekt sind die so genannten Timeperiods. Sie
verwendet Nagios an unterschiedlichen Stellen,
berall dort, wo festzulegen ist, wann etwas zu
berwachen ist oder wann Benachrichtigungen
zu verschicken sind. Die Definition eines Timeperiod-Objekts ist dabei recht einfach (siehe
Listing 1).
Das wichtigste Attribut bei der Definition eines
Zeitraums ist der timeperiod_name, den spter
viele andere Stellen in der Nagios-Konfiguration
referenzieren. Den ausfhrlichen Aliasnamen
dagegen verwendet vor allem das Webinterface.
Die Zeitangaben in den einzelnen Zeilen beziehen sich jeweils auf einen Wochentag. Fr die
Timeperiods empfiehlt sich eine eigene Konfigurationsdatei, zum Beispiel /usr/local/nagios/
etc/objects/timeperiods.cfg. Anfangs braucht
man hchstens drei solcher Definitionen, zum
Beispiel fr always, workhours und nonworkhours.
Kommandodefinitionen
Unter der berschrift Commands subsumiert
Nagios alle Arten von Kommandodefinitionen,
die Programme oder Konsolenbefehle aufrufen.
Die wichtigsten Commands sind natrlich die
Aufrufe der Check-Plugins. Weiter zhlen aber
www.linuxtechnicalreview.de
Praxis
command {
command_name
check_smtp
command_line
$USER1$/check_smtp -H
define
hostgroup {
hostgroup_name
linux-servers
alias
Linux Server
members
linux1,linux2,tux,U
webserver,mybox
contact {
02
contact_name
03
alias
Jon Doe
04
service_notification_period
nonworkhours
05
host_notification_period
nonworkhours
06
service_notification_options
w,u,c,r
07
host_notification_options
d,u,r
08
service_notification_commands
notify-by-email
09
host_notification_commands host-notify-by-email
10
jdoe
jdoe@example.com
11
}
Listing 3: Host-Definition
01
define
host {
02
host_name
linux1
03
alias
Linux Server 1
04
address
192.168.1.254
05
parents
main-switch
06
check_command
check-host-alive
07
max_check_attempts
08
check_period
always
09
contact_groups
linux-admins
linux-admins
10
notification_interval
30
alias
Linux Administratoren
11
notification_period
always
members
jdoe,mtestmann,wadmin
12
notification_options
d,u,r
define
contactgroup {
contactgroup_name
Wie schon erwhnt, definiert man alle zu berwachenden Gerte gleich welcher Art als Hosts
(Listing 3).
Wichtigste Eigenschaften des Host sind sein
Name und seine IP-Adresse. Die Variable max_
check_attempts definiert, wie oft ein Check zu
wiederholen ist, bevor Nagios wirklich einen
Ausfall annimmt. Dabei legt contact_groups
fest, wer von dem Ausfall erfahren soll. Das Beispiel verwendet eine zuvor angelegte Contactgroup.
Einzelne Hosts lassen sich beliebig zu Hostgroups zusammenfassen. Diese Gruppen machen vor allem die Anzeige im Webinterface
bersichtlicher oder vereinfachen die berwachung zusammengehriger Hosts :
13
}
www.linuxtechnicalreview.de
Praxis
Notify Service
Notify Host
Commands
Timeperiods
Member
Of
Contacts
Contact
Groups
Notify
Notify
Acces
s
Member
Of
Host
Groups
Hosts
Services
Abbildung 2: Die Nagios-Konfigurationsdateien referenzieren sich ausgiebig gegenseitig. Das erhht die bersicht und vermindert zugleich den
Tippaufwand.
01
define
service {
02
service_description
smtp check
03
host_name
linux1
04
check_command
<B>check_smtp<B>!25!10!20
05
max_check_attempts
06
normal_check_interval
07
retry_check_interval
08
check_period
always
09
notification_interval
30
10
notification_period
always
11
notification_options
w,c,r
12
contact_groups
linux-admins
13
!. Damit gelangen die Werte in die Makros $ARG1$, $ARG2$ und so weiter, die
schlielich das Plugin bergeben bekommt.
Im normalen Betrieb ist es sinnvoll, die Nagios-Konfiguration auf viele einzelne Dateien
zu verteilen und je nach Projekterfordernissen
in verschiedenen Unterverzeichnissen zu strukturieren. Fr den Anfang reicht aber auch ein
einzelnes File. Die Nagios-Quellen liefern eine
Datei localhost.cfg oder minimal.cfg mit,
die sich sehr gut fr erste Gehversuche mit Nagios eignen.
Nach dem Neuanlegen oder ndern der Nagios-Konfigurationsdateien empfiehlt es sich,
zuerst einen Konfigurations-Check durchzufhren. Mit dem Switch -v berprft Nagios die
komplette Konfiguration auf syntaktische Fehler
und vor allem darauf, ob smtliche Bezge auf
andere Objekte korrekt auflsbar sind. Als Argument erwartet Nagios dabei nur den Namen
der Hauptkonfigurationsdatei: /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.
cfg.
Im Erfolgsfall meldet der Konfigurationstest am
Ende Things look okay. No serious problems
were detected during the pre-flight check und
man kann den Daemon mit dem folgenden
Kommando starten: /etc/init.d/nagios start.
Wenn der Daemon schon luft, reicht ein Reload
aus, um die neue Konfiguration zu aktualisieren:
/etc/init.d/nagios reload.
Wenn Nagios dabei keine Fehlermeldungen
mehr ausgibt, ist der Daemon gestartet und
berwacht nun die konfigurierten Hosts und
Services. Welche Schritte Nagios dabei gerade
ausfhrt, kann man sich im Nagios-Logfile
genau ansehen: tail -f /usr/local/nagios/var/
nagios.log.
www.linuxtechnicalreview.de
Praxis
Die Benutzernamen mssen dabei mit den vorher angelegten Nagios-Contacts bereinstimmen, damit das Webinterface den richtigen User
erkennen und nur die ihm zugeordneten Hosts
anzeigen kann. Weitere Funktionen des Webinterface und andere Berechtigungseinstellungen
steuert die Datei cgi.cfg.
berwachungen im Detail
Wenn der Nagios-Server erstmal luft, ist es nun
an der Zeit, einen genaueren Blick auf die Plugins zu werfen. Da es eigenstndige Programme
sind, kann man neue Plugins einfach auf der
Kommandozeile aufrufen und testen. Am besten erledigt man das gleich mit dem User-Account des Nagios-Servers, da der die Plugins im
Livebetrieb ja auch ausfhrt. Der Aufruf unterscheidet sich allerdings je nach Plugin, da jeder
Check-Typ ja mglicherweise andere Parameter
bentigt. Einzig die Option -h oder --help
sollte bei allen Plugins implementiert sein, wenn
es nach den Nagios Developer Guidelines geht.
Nach diesem ersten Schritt hat man einen guten
Anhaltspunkt und kann die verschiedenen Optionen testen. Als Beispiel hier ein Aufruf des
check_disk-Plugins:
der besseren Lesbarkeit noch einmal das Ergebnis der berwachung im Klartext, wie im obigen Beispiel das DISK OK zeigt. Darauf kann
man sich allerdings nicht verlassen und sollte im
Zweifel den Returncode zurate ziehen.
Den dritten Teil der Rckgabe trennt das PipeSymbol | vom Rest. Nagios nennt diesen Abschnitt Performance Data. Diese Werte verarbeiten Add-ons weiter, beispielsweise zu Charts
oder Graphen, die den Verlauf des Wertes darstellen. Performance Data ist aber ein optionaler
Wert nur neuere Nagios-Plugins liefern ihn
zurck. Notwendig sind nur die ersten beiden
Bestandteile, also Returncode und Plugin-Output. Wenn Nagios das Plugin nicht finden kann,
es nicht ausfhrbar ist oder es keine korrekte
Antwort an den Daemon zurckliefert, zeigt das
Webinterface den Status UNKNOWN, mit
der Fehlermeldung Return Code of 127 is out
of bounds an.
Die oben angefhrten Parameter -w und -c
sind bei den meisten Plugins vorhanden, denn
sie definieren die Warnschwellen fr WARNING und CRITICAL. Das Beispiel legt die
Schwellwerte fr den verbleibenden freien Platz
(64% inode=98%);U
09 AuthType Basic
| /=25137MB;37080;59328;0;74160
10 AuthUserFile /usr/local/nagios/etc/htpasswd.users
11 Require valid-user
12
</Directory>
13
14
Alias /nagios /usr/local/nagios/share
15
16
<Directory "/usr/local/nagios/share">
17 Options None
18 AllowOverride None
19 Order allow,deny
20 Allow from all
21 AuthName "Nagios Access"
22 AuthType Basic
23 AuthUserFile /usr/local/nagios/etc/htpasswd.users
24 Require valid-user
25
</Directory>
www.linuxtechnicalreview.de
Praxis
host_name
linux1
check_command
check_disk!50%!20%!/
(...)
}
command {
command_name
check_disk
command_line
$USER1$/check_disk -w U
www.linuxtechnicalreview.de
Praxis
command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H U
Abbildung 4: Statusbersichten kann Nagios auch in Form von Karten darstellen, die logische oder physische Beziehungen zwischen berwachten
Objekten abbilden.
$HOSTADDRESS$ -c $ARG1$
}
Um Arbeit zu sparen, kann man den NRPEDienst auf den Clients aus Paketen installieren
oder vom Nagios-Server kopieren. Es ist ratsam, den NRPE unter inetd oder xinetd zu
betreiben und TCP-Wrapper zu verwenden.
Eine passende Anleitung dafr findet sich im
README-File des NRPE-Pakets. Die mglichen Checks, die der NRPE dann remote ausfhren soll, trgt man schlielich in nrpe.cfg
(Listing 6) ein. Beispiele dafr finden sich in der
sample-Datei:
Zwar ist der NRPE quasi das offizielle Tool fr
Remote-Checks, aber es hat gegenber SSH
doch deutliche Nachteile: So bentigt es einen
zustzlichen Daemon und auerdem einen weiteren geffneten Port. Auch die Konfiguration
der Checks auf den Clients bedeutet zustzliche
Listing 6: NRPE-Beispiele
01
command[check_users]=@libexecdir@/check_users -w 5 -c 10
02
command[check_load]=@libexecdir@/check_load -w 15,10,5 -c 30,25,20
03
command[check_disk1]=@libexecdir@/check_disk -w 20 -c 10 -p /dev/hda1
04
command[check_disk2]=@libexecdir@/check_disk -w 20 -c 10 -p /dev/hdb1
www.linuxtechnicalreview.de
Praxis
Nagios wacht
ber WindowsServer
Natrlich
existieren
auch fr die berwachung von WindowsServern mehrere Lsungen. Neben NRPE,
der auch in einer Windows-Version verfgbar ist, galt lange Zeit
NsClient als recht einfach zu verwendender
www.linuxtechnicalreview.de
Praxis
Alerting
Die beste berwachung Ihres Netzwerks bringt
wenig Erfolg ohne Benachrichtigung des Admins im Problemfall. Auch dafr bietet Nagios
ausgeklgelte Funktionen. Jedes Mal, wenn es
irgendwo im System einen Fehler erkennt, startet es eine komplexe Analyse und prft, ob und
wer darber zu informieren ist. Zuerst prft die
Software, ob jemand den Fehler schon besttigt
hat (siehe max_check_attempts), ob vielleicht
im Webinterface eine Downtime fr den Host
oder Service eingetragen ist und ob zur aktuellen Zeit berhaupt Benachrichtigungen zu
versenden sind (siehe notification_intervall).
Danach ermittelt Nagios die diesem Host zugeordneten Contacts und prft deren Benachrichtigungseinstellungen. Sollen die Contacts berhaupt Benachrichtigungen erhalten, und wenn
ja, welche (siehe notification_options). Zuletzt
gilt es noch zu checken, ob der Contact zum aktuellen Zeitpunkt Benachrichtigungen erhalten
soll (siehe notification_period). Dank dieses
Schemas lassen sich die Benachrichtigungen
Verwaltung der
Konfigurationsdateien
Als Ausgangspunkt fr die ersten eigenen Versuche mit der Objekt-Konfiguration liefert Nagios verschiedene Beispieldateien mit. Die Datei
minimal.cfg implementiert nur einige wenige
berwachungen fr den lokalen Rechner. In der
bigger.cfg sind weitergehende Beispiele enthalten. Schon ab der berwachung eines kleineren Netzes ist es allerdings sinnvoll, sich etwas
mehr Gedanken ber die Organisation der Ob-
command {
02
command_name notify-by-email
03
04
05
06
Service: $SERVICEDESC$\n $$
07
Host: $HOSTALIAS$\n $$
08
Address: $HOSTADDRESS$\n $$
09
State: $SERVICESTATE$\n\n $$
10
Date/Time: $DATETIME$\n\n $$
11
Additional Info:\n\n $$
12
$OUTPUT$" | /usr/bin/mail -s $$
13
$SERVICEDESC$ $$
14
15
}
www.linuxtechnicalreview.de
10
Praxis
Der Autor
Julian Hein ist Grnder und geschftsfhrender
Gesellschafter der Netways GmbH [http://www.
netways.de], die sich seit mehr als zehn Jahren mit
der Implementierung und dem Betrieb von groen
und komplexen Netzwerken aller Hersteller beschftigt. Der Hauptfokus dabei ist die Nutzung von
Linux- und Open-Source-Tools wie Nagios fr das
Netz- und System-Management.
11
Infos
[1] Debian-Repository mit Nagios-Paketen: [http://
www.backports.org]
[2] Nagios-Homepage: [http://www.nagios.org]
[3] Add-on-Portal: [http://www.NagiosExchange.
org]
www.linuxtechnicalreview.de
Nagios
Zukunft
Noch nie gab es so viel Neues auf einen Schlag:
www.linuxtechnicalreview.de
Projekte
stammen, das heit, die lokalen Variablen berschreiben in den meisten Fllen die aus den
Vorlagen ererbten. In manchen Fllen wre es
unter Umstnden wnschenswert, die Werte
der geerbten und lokalen Variablen gemeinsam
zu nutzen. Das wird nun mglich. Dazu mssen
die lokalen String-Variablenwerte lediglich mit
einem Pluszeichen (+) beginnen, wie das folgende Beispiel in Listing 2 zeigt.
In diesem Fall hngt der Host linuxwebserver
den Wert der lokalen Variablen hostgroups an
den aus generic-host geerbten Wert an. Die
sich daraus ergebende Definition von linuxwebserver sieht folgendermaen aus:
define host{
Vererbung
Schon heute ist der Vererbungsmechanismus
eines der wichtigsten Features des Nagios-Konfigurationsformats. Schlielich sorgt die Mglichkeit, Objektvariablen von anderen Objektvorlagen zu erben, besonders in einer komplexen Umgebung fr mehr bersicht und weniger
Tipparbeit. Nagios 3 baut die Ausdrucksmglichkeiten dieser Objektvererbungslogik nun
noch weiter aus.
Traditionell konnten Objektdefinitionen lediglich variable Werte aus einer einzigen Vorlage
erben. Mit Nagios 3 knnen nun Objektdefinitionen variable Werte aus mehreren Vorlagen
erben. Ein erstes Beispiel zeigt das Listing 1.
In diesem Beispiel erbt der Host devweb variable Werte aus zwei Quellen: Zum einen von
generic-host und zum anderen von development-server. Wie zu sehen ist, definieren beide
Quellen eine Variable namens check_interval.
Weil generic-host die erste Vorlage ist, die in
der devweb-Host-Definition erscheint, hat sie
Vorrang. Die resultierende Definition von devweb sieht daher wie folgt aus:
# Entwicklungs-Webserver
define host{
host_name
linuxwebserver
hostgroups
all-servers,U
linux-servers,U
web-servers
...
}
name
generic-host
04
active_checks_enabled
05
check_interval
10
06
...
07
register
08
09
10
# Vorlage fr Entwicklungs-Webserver
11
define host{
12
name
13
check_interval
15
14
notification_options
d,u,r
15
...
host_name
devweb
16
register
active_checks_enabled
17
check_interval
10
18
notification_options
d,u,r
19
# Entwicklungs-Webserver
...
20
define host{
21
use
22
generic-host,development-server
23
host_name
24
...
25
Eine zweite nderung der Vererbungslogik betrifft die so genannte additive Vererbung. Unter Nagios haben lokale Variablen in der Regel
Vorrang gegenber Variablen, die aus Vorlagen
www.linuxtechnicalreview.de
development-server
devweb
Projekte
GENERIC HOST
DEVELOPMENT SERVER
define host{
host_name
webserver
contact_groups
contacts
web-admins
john,paul,!eric
...
}
Active Checks,
Check Interval
Notification
Options
WEBDEV _1
Abbildung 1: Neu in Nagios 3: Eine Objektdefinition kann Teile von mehreren verschiedenen Vorfahren gleichzeitig erben.
define hostgroup{
Objekte
hostgroup_name
name
generic-host
03
hostgroups
all-servers
04
...
05
register
06
07
08
define host{
09
use
generic-host
10
host_name
linuxwebserver
11
hostgroups
+linux-servers,web-servers
12
...
13
members
hg3
webserver,linuxserver,
fileserver,firewall
...
}
Die Verwaltung der Gruppenmitgliedschaft unter Nagios gestaltet sich dadurch viel einfacher
als je zuvor.
Benutzerspezifische
Objektvariablen
Seit einigen Jahren wnschen sich die Benutzer
neue Variablen fr die Host-, Service- und Kontaktdefinitionen. Auf der Wunschliste stehen
Variablen fr die SNMP-Community, die MACAdresse, den AIM-Benutzernamen, die SkypeNummer und die Strae die Liste nimmt kein
Ende. Das Problem, das ich dabei sehe, ist dass
Nagios dadurch weniger allgemeingltig wird
und strker von der Infrastruktur abhngt.
Dabei sollte es mglichst flexibel bleiben, weshalb sich die Entwicklung eher an generischen
Funktionen orientiert. Zum Beispiel besitzen
die Hostdefinitionen in Nagios eine generische
Variable address, die alles mgliche enthalten kann, von einer IP-Adresse bis hin zu einer
Wegbeschreibung, was auch immer sich fr die
Umgebung des Nutzers am besten eignet.
www.linuxtechnicalreview.de
Projekte
hostgroup_name
hg1
03
members
webserver,linuxserver
04
...
05
06
07
define hostgroup{
08
hostgroup_name
hg2
09
members
fileserver,firewall
10
...
11
12
13
define hostgroup{,
14
hostgroup_name
hg3
15
hostgroup_members
hg1,hg2
16
...
17
host_name
linuxserver
03
_mac_address
00:06:5B:A6:AD:AA
<-- Custom
04
MAC_ADDRESS variable
05
_rack_number
R32
<-- Custom
14
SNMP_COMMUNITY variable
15
_TechContact
Jane Doe
<-- Custom
16
TECHCONTACT variable
17
....
18
19
06
RACK_NUMBER variable
20
define contact{
07
...
21
contact_name
john
08
22
_AIM_username
john16
john32
09
10
define service{
11
host_name
linuxserver
12
description
Memory Usage
13
_SNMP_community public
23
variable
24
_YahooID
<-- Custom
www.linuxtechnicalreview.de
25
...
26
Projekte
Objekttyp
Variablenname
Makroname
Host
Host
Service
Service
Contact
Contact
MAC_ADDRESS
RACK_NUMBER
SNMP_COMMUNITY
TECHCONTACT
AIM_USERNAME
YAHOOID
$_HOST_MAC_ADDRESS$ NAGIOS__HOST_MAC_ADDRESS
$_HOST_RACK_NUMBER$ NAGIOS__HOST_RACK_NUMBER
$_SERVICE_SNMP_COMMUNITY$ NAGIOS__SERVICE_SNMP_COMMUNITY
$_SERVICE_TECHCONTACT$ NAGIOS__SERVICE_TECHCONTACT
$_CONTACT_AIM_USERNAME$
NAGIOS__CONTACT_AIM_USERNAME
$_CONTACT_YAHOOID$
NAGIOS__CONTACT_YAHOOID
Umgebungsvariable
www.linuxtechnicalreview.de
Projekte
Benachrichtigungen
Unter Nagios 3 lassen sich Benachrichtigungen
nun bei Beginn, Ende oder Stornierung von geplanten Auszeiten fr Hosts oder Services bermitteln. Eine Benachrichtigung ist auerdem
mglich, wenn die Flap-Erkennung fr Hosts
oder Services deaktiviert wird.
Manchmal mchte man nicht sofort von einem
Problem mit einem Host oder einem Service
erfahren. Abwarten heit hier die Devise: Vielleicht erledigt sich das Problem ja auch von alleine, und das ist den meisten Admins allemal
lieber als eine Unterbrechung der Nachtruhe,
weil jemand ein Kinkerlitzchen als Problem
gemeldet hat. Um diesem Wunsch entgegenzukommen, gibt es nun eine Variable first_notification_delay, um Erstwarnungen verzgert
ausgeben zu knnen. Mithilfe der Variable definieren Sie die Verzgerung zwischen dem Auftreten eines problematischen Status und dem
Versenden der ersten Benachrichtigung. Vor
Nagios 3 musste man dazu komplexe Host- und
Service-Escalation-Definitionen einsetzen: Jetzt
lsst sich die gleiche Funktionalitt viel einfacher implementieren.
Performancesteigerungen
Nagios 3 enthlt weitere Performanceverbesserungen im Vergleich zu den bisherigen Releases. Bei vielen handelt es sich um Code-VerNagios
berarbeiteter Host-Check
In der Vergangenheit verursachten Host-Checks
die grten Performanceeinbuen im Monitoring-Prozess. Das ndert sich mit Nagios 3. Ich
habe mich dazu entschlossen die Host-CheckLogik komplett von Grund auf neu zu schreiben, und die bisherigen Ergebnisse zeugen von
deutlichen Performanceverbesserungen. Die
folgende Liste fhrt einige der nderungen der
Host-Check-Logik auf:
nHost-Checks laufen parallel, wie ServiceChecks.
nHost-Check-Retries knnen verzgert starten, wie Service-Checks.
nZeitgesteuerte Host-Checks knnen die Leistung sogar verbessern, statt sie zu beeintrchtigen.
nGecachete Host-Checks verbessern die Effizienz der Monitoring-Logik.
Einer der grten Performancevorteile der
neuen Host-Check-Logik rhrt daher, dass die
Host-Checks grtenteils parallel laufen. Wenn
Nagios eine Statusnderung bei einem Host
feststellt, lst es parallele Prfungen aller direkt
Up
Monitor_1
Not Up
Parallel Host Check
Host Depenency
Parent-Child-Relationship
Switch_1
File_1
Web_1
EMail_1
Router_1
Switch_2
Comp_2
Comp_1
Firewall_1
Switch_3
Router_2
www.linuxtechnicalreview.de
Projekte
Nagios
Monitor_1
Switch_1
File_1
Web_1
EMail_1
Router_1
Switch_2
Comp_2
Comp_1
Firewall_1
Switch_3
Router_2
Listing 5: Benchmark-Resultate
01
/usr/local/nagios/bin/nagios $$
20
Register:
2.654628 sec
02
-s /usr/local/nagios/etc/nagios.cfg
21
Free:
0.021347 sec
03
22
============
04
...
23
TOTAL:
11.555925 sec
05
06
OBJECT CONFIG PROCESSING TIMES
24
07
(* = Potential for precache
25
Timing information on configuration
08
savings with -u option)
26
verification is listed below.
09
----------------------------------
27
10
Read:
0.486780 sec
11
Resolve:
0.004106 sec
29
(* = Potential for speedup with -x option)
12
Recomb Contactgroups: 0.000077 sec
30
----------------------------------
13
Recomb Hostgroups:
0.000172 sec
31
Object Relationships: 1.400807 sec
14
Dup Services:
0.028801 sec
32
Circular Paths:
54.676622 sec
15
Recomb Servicegroups: 0.010358 sec
33
Misc:
0.006924 sec
16
Duplicate:
5.666932 sec
34
============
17
Inherit:
0.003770 sec
35
TOTAL:
56.084353 sec
18
Recomb Contacts:
0.030085 sec
19
Sort:
2.648863 sec
28
CONFIG VERIFICATION TIMES
www.linuxtechnicalreview.de
Projekte
Die Zukunft
Ich bin gerade dabei, den Code und die Dokumentation fr die Nagios-3.0-Alpha-Release abzuschlieen. Groe Abschnitte der bestehenden
Dokumentation neu zu schreiben, ist sehr zeitaufwndig, aber ich bin mir sicher, dass dieser
Schritt letztendlich zu einem besseren Produkt
fhren wird Der Gedanke an die bevorstehende
Nagios-3.0-Release ist ziemlich aufregend, nicht
nur wegen der Verbesserungen, sondern auch in
Bezug auf die geplanten nderungen, nachdem
Nagios 3.0 sich stabilisiert hat.
Im nchsten Jahr knnen Sie sich auf die Verffentlichung einiger Tools freuen, welche die Synchronisierung der Daten in redundanten, Failover- und verteilten Monitoring-Umgebungen
zum Kinderspiel machen; auerdem beginnt die
Entwicklung eines neuen PHP-basierten Webinterface fr Nagios. Es ist eine spannende Zeit
in der Nagios-Entwicklung, und ich bin mir
ziemlich sicher, dass das Ergebnis einmal viele
Anwender zufriedenstellt. (jcb)
nnn
monday
03
tuesday 3
04
thursday -1 nov
; am letzten Donnerstag in
November
05
day 21
06
july 4
; am 4. Juli
07
12-25-2007
08
www.linuxtechnicalreview.de
Nagios
lernt zeichnen
Nagios bietet selbst keine Mglichkeit, Peformancewerte grafisch aufzubereiten. Mit Nagios Grapher
wird diese Funktion nachgerstet, ohne Nagios
selbst verndern zu mssen. Gerd Mller
www.linuxtechnicalreview.de
Praxis
Installation
Die aktuellste Version von Nagios Grapher bekommt man auf NagiosExchange [2]. Die Installation nach dem Auspacken braucht nur wenige
Schritte. Zuerst passt man die Konfiguration an
das laufenden System an. Bei einer Nagios-Standardinstallation aus den Sourcen in /usr/local/
nagios gelingt das mit:
autoconf
./configure
Ist Nagios an einem anderen Ort installiert, gengt es, das File config.layout entsprechend
anzupassen und die Konfiguration mit dem entsprechenden Layoutwert aufzurufen, etwa:
./configure --with-layout=debian
Abbildung 1: Ein kleines klickbares Grapher-Icon fhrt im NagiosWebinterface direkt zur Kurvendarstellung.
./configure --enable-perl-site-install
Nagios konfigurieren
Nach der erfolgreichen Installation sind nur
noch wenige Schritte notwendig, damit Nagios
Werte an den Nagios Grapher bermittelt. Die
Datei nagios.cfg braucht dafr folgende Eintrge:
cfg_dir=/usr/local/nagios/etc/serviceext
process_performance_data=1
service_perfdata_command=U
process-service-perfdata
graph_value
http
03
graph_units
seconds
04
graph_legend
05
rrd_plottype
AREA
06
rrd_color
c0c0ff
07
service_name
HTTP
08
graph_perf_regex
time=\s*(\d+\.\d+)
09
}
www.linuxtechnicalreview.de
Praxis
1023
use_authentication
yes
cfg_dir=/usr/local/nagios/etc/ngraph.d
type
CDEF
03
graph_value
http_cdef
04
graph_calc
http_res
05
rrd_plottype
LINE1
06
rrd_color
000000
07
service_name
HTTP
08
}
www.linuxtechnicalreview.de
Praxis
Abbildung 3: Die veredelte Version des Graphen. Eine feine schwarze Linie
schliet die Flche nach oben hin ab.
www.linuxtechnicalreview.de
Praxis
Stattdessen ist der Parameter type zu definieren. Fr die Berechnung von neuen Werten
stellt das Rrdtool den Typ CDEF zur Verfgung.
graph_calc bedeutet nichts anderes, als dass
fr den Wert der Linie der Wert von http_res
benutzt wird. CDEF ist nur einer der vielen Typen, die das Rrdtool zur Verfgung stellt. Alle
untersttzten sind in der Dokumentation zum
Nagios Grapher zu finden.
Nach der Definition und einem Neustart wird
der Graph nun optisch ansprechender gezeichnet. Abbildung 3 zeigt den neuen Graphen. Alle
Elemente eines Graphen, die nicht zur Definition eines Wertes aus dem Plugin dienen, lassen
sich jederzeit hinzufgen oder entfernen. Diese
zustzlichen Definitionen funktionieren dann
nicht erst ab dem Zeitpunkt der Definition, sondern bereits rckwirkend ab dem ersten aufgezeichneten Wert.
Der Nagios Grapher bietet noch eine Flle weiterer Mglichkeiten, vor allem die Untersttzung
smtlicher Typen des Rrdtool (GPrint, VDEF,
Tick und so weiter) verdient Erwhnung. Fr
Interessierte bilden die mit dem Nagios Grapher
mitgelieferten Graphen einen guten Ausgangspunkt. Das Rrdtool als Basis des Nagios Grapher ist ebenfalls sehr gut dokumentiert. Es sind
smtliche verwendbaren statistischen Funktionen und Typen beschrieben. Zustzlich kann
der Nagios Grapher Graphen aus verschiedenen
Services in einem so genannten MultiGraph
kombinieren (Abbildung 4). Auch wie sich das
bewerkstelligen lsst, ist in der Dokumentation
ausfhrlich beschrieben. Ein typischer Anwendungsfall dafr ist der Vergleich zwischen verschiedenen Services.
Berechnete Graphen
Fazit
Infos
[1] Rrdtools: [http://oss.oetiker.ch/rrdtool/]
[2] NagiosExchange: [http://www.
nagiosexchange.org]
[3] ImageMagick: [http://www.imagemagick.org]
www.linuxtechnicalreview.de
Nagios
lernt sprechen
Eine zuverlssige Mglichkeit, das Administrato-
www.linuxtechnicalreview.de
Praxis
ISDN-Treiber bersetzen
Die Verbindung zwischen Asterisk und CAPI-fhigen ISDN-Karten stellt der Treiber ChanCapi
[2] her. Die Installation aus dem Quelltext dieses
Paketes [3] bentigt auf dem System die Header
der Treiber aus dem Paket libcapi20-dev.
Nach der Installation mit make und make
install erzeugt das Kommando make install_
config eine funktionierende Beispielkonfiguration. Ein zustzlicher Eintrag in /etc/asterisk/
Listing 1: /etc/asterisk/modules.conf
01
load => res_features.so
02
load => chan_capi.so
03
04
[global]
05
chan_capi.so=yes
Listing 2: Txt2pho-Konfiguration
01
DATAPATH=/usr/local/mbrola/txt2pho/data/
02
INVPATH=/usr/local/mbrola/txt2pho/data/
03
TEMPPATH=/tmp/
04
05
# Default prosody (male or female)
06
INVENTORY=female
07
# Debuglevel
08
DEBUGLEVEL=0
09
# Reduction level
10
REDUCTION=0
11
# Prominence computation by rule or CART tree
Asterisk ist in den meisten aktuellen Distributionen enthalten, auch die Installation aus den
Quellen bereitet keine Schwierigkeiten mehr.
Fr das folgende Beispiel kommt die aktuelle
Version von Asterisk 1.2.15 [1] unter Debian
12
PROMCOMP=1
13
# Default speech rate
14
SPEECHRATE=1.50
15
# Duration computation
16
USENET=3
www.linuxtechnicalreview.de
Praxis
modules.conf sorgt dafr, dass die Telefonanlage das Modul beim nchsten erfolgreichen
Start automatisch ldt (Listing 1). Die Reihenfolge der Eintrge spielt dabei eine wichtige
Rolle: chan_capi.so darf erst nach res_features.so geladen werden, sonst bringt Asterisk
beim Starten eine Fehlermeldung.
ChanCapi testen
Die Beispielkonfiguration von ChanCapi in
/etc/asterisk/capi.conf ist in den meisten Fllen ausreichend. Ob Asterisk das neue Modul
geladen hat, zeigt nach dem Start des Telefonservers die Ausgabe des CLI im interaktiven Debug Mode mittels asterisk -vvvvvgc.
Listing 3: call.pl
01
#!/usr/bin/perl -w
34
02
35
print_help ("") if($opt_h);
03
use strict;
36
($opt_n) || print_help("Number not specified\n");
04
use Getopt::Long;
37
($opt_m) || print_help("No message specified\n");
05
use vars qw($opt_n $opt_h $opt_m $opt_c $opt_H
38
($opt_C) || print_help("No channel specified\n");
39
($opt_c) || print_help("No Callerid specified\
06
n");
07
my $tmp="/tmp/";
40
($opt_c) || print_help("No Host specified\n");
08
my $prefix="";
41
09
my $filename="$$";
10
my $asterisk_sounds=$prefix."/var/lib/asterisk/
sounds/voicealerts/";
11
my $asterisk_spool=$prefix."/var/spool/asterisk/
outgoing/";
12
my $txt2pho=$prefix."/usr/local/mbrola/txt2pho/
txt2pho -f -p ".$prefix."/usr/local/mbrola/
txt2pho/data/ ";
14
my $mbrola=$prefix."/usr/local/mbrola/mbrola
".$prefix."/usr/local/mbrola/voices/".$voice." ".$tmp.$filename.".wav";
15
my $sox="/usr/bin/sox ".$tmp.$filename.".wav
-t wav -r 8000 - > ".$asterisk_
47
my $output="";
49
$output.="MaxRetries: 2\n";
50
$output.="RetryTime: 60\n";
51
$output.="WaitTime: 30\n";
52
$output.="Context: Voicealerts\n";
53
$output.="Extension: s\n";
57
$output.="Set: CONTACT=$opt_n\n";
17
58
$output.="Set: HOST=".$opt_H."\n";
18
$PROGNAME = "call.pl";
59
$output.="Set: SERVICE=$opt_S\n";
19
60
open(OUT,"> ".$asterisk_spool.$filename.".call");
20
sub print_help($);
61
print OUT $output;
21
22
Getopt::Long::Configure('bundling');
23
GetOptions
46
56
$output.="Set: MSG=voicealerts/".$filename."\n";
".$tmp.$filename.".wav";
=> \$opt_n,
25
=> \$opt_c,
26
=> \$opt_C,
27
=> \$opt_H,
28
=> \$opt_S,
45
system("$unlink");
55
$output.="Callerid: $opt_c\n";
16
my $unlink="/usr/bin/unlink
"h"
44
system("$sox");
54
$output.="Priority: 1\n";
sounds.$filename.".wav";
30
rola;
43
system($syntax);
48
$output.="Channel: $opt_C\n";
13
my $voice="de3/de3";
29
42
my $syntax='echo "'.$opt_m.'"|'.$txt2pho.'|'.$mb
=> \$opt_h);
62
close(OUT);
63
64
exit 0;
65
66
sub print_help ($) {
67
my ($message) =@_;
68
31
while(<STDIN>) {
69
print $message."\n";
32 $opt_m.=lc $_;
70
exit 0;
33
}
71
}
www.linuxtechnicalreview.de
Praxis
Nagios-Kommandos
In einer Konfigurationsdatei fr Nagios-Objekte
(typischerweise misccommands.cfg) mssen
die Kommando-Definitionen zur Erzeugung der
Sprachbenachrichtigung eingetragen werden.
In Listing 5 definieren die Zeilen, die mit command_line beginnen, den Aufruf von call.pl.
Das Skript erwartet den Alarmierungstext auf
Listing 4: Asterisk-Callfile
01
Channel: CAPI/ISDN1/1234
02
MaxRetries: 2
03
RetryTime: 60
04
WaitTime: 30
05
Context: Voicealerts
06
Extension: s
07
Priority: 1
08
Callerid: 110
09
Set: MSG=voicealerts/31764
10
Set: CONTACT=voice
11
Set: HOST=localhost
12
Set: SERVICE=VoiceTest
13
StartRetry: 31175 1 (1171128433)
www.linuxtechnicalreview.de
Praxis
host-notify-by-voice
03
command_line
/usr/bin/printf "%b" "Dies ist eine Nachricht von Nagios. Der Host $HOSTNAME$.
notify-by-voice
07
command_line
Der Service
.$SERVICEDESC$. auf dem Host .$HOSTNAME$. mit der Addresse .$HOSTADDRESS$. Hat den Status
.$SERVICESTATE$.
; loop n times
03
exten => s,2,Set(GROUP()=voicealert)
04
exten => s,3,Set(TIMEOUT(response)=4)
05
exten => s,4,Background(${MSG})
; Play Msg
06
exten => s,5,Background(nag2ast/acknowledge)
07
exten => s,6,Background(nag2ast/disablenotification)
08
exten => s,7,Set(LOOP=${LOOP:1})
; Loopcounter
09
exten => s,8,Gotoif($["${LOOP}x" != "x"]?4)
; Finished?
10
exten => s,9,Hangup
; Hangup
11
exten => 1,1,AGI(acknowledge.agi|${HOST}|${SERVICE}|${CONTACT})
12
exten => 1,2,Playback(nag2ast/acknowledged)
13
exten => 1,3,Hangup
14
exten => 2,1,AGI(disablenotifications.agi|${HOST}|${SERVICE}|${CONTACT})
15
exten => 2,2,Playback(nag2ast/disablednotifications)
16
exten => 2,3,Hangup
www.linuxtechnicalreview.de
Praxis
Nag2ast
Die eigentlichen Aktionen fhren die Skripte
acknowledge.agi und disablenotifications.
agi aus. Sie geben das jeweils passende externe
Kommando an Nagios weiter. Asterisk erwartet
diese AGI-Skripte als ausfhrbare Dateien im
Verzeichnis /var/lib/asterisk/agi-bin.
Fr die standardisierten Ansagen der verfgbaren Aktionen, zum Beispiel Drcken Sie die 1,
um das Problem zu besttigen, verwendet Asterisk fertige WAV-Dateien aus dem Verzeichnis /var/lib/asterisk/sounds/nag2ast. Die hier
verwendeten AGI-Scripte, WAV-Dateien und
das call.pl-Skript sind auf der Webseite unter
[9] gesammelt.
Zu guter Letzt mssen den Kontakten in der
Nagios-Konfiguration noch die in Listing 5
definierten notification_commands host-notify-by-voice und notify-by-voice zugewiesen werden. Eine Kontaktdefinition mit fr Asterisk gltiger Pager-Definition zeigt Listing 7.
Nagios-Kontakte, die Asterisk per Sprachnachricht alarmieren soll, bentigen eine PagerAdresse. Diese muss einer von Asterisk verwendbaren Dial-Definition ohne Optionen entsprechen, damit Alarmierungen ber mehrere
verschiedene Kanle versendet werden knnen.
Das Listing verwendet fr ISDN CAPI/ISDN1/
Nummer, fr VoIP wre auch SIP/Nummer
mglich. Der neu angelegte oder vernderte
Kontakt wird in Nagios noch in eine Kontaktgruppe eingepflegt und diese wiederum einem
Service zugewiesen.
Nagios spricht
Fr einen besseren berblick ber die Vorgnge
bei einer Sprachbenachrichtigung durch Asterisk empfiehlt es sich, die Telefonanlage zu-
nchst erneut im Debug Modus zu starten. Abbildung 1 zeigt den Vorgang, wenn die Software
einen Admin auf dem Anschluss SIP/21 alarmiert. Wenn der von Nagios berwachte Service
den Status wechselt, wird sofort ein Callfile im
Asterisk Spooler-Verzeichnis erzeugt und ein
Anruf initiiert.
Nach erfolgreicher Installation der Sprachbenachrichtigungen sind der Kreativitt des Administrators keine Grenzen mehr gesetzt. In
weiteren mglichen Konfigurationen alarmiert
das Gespann Asterisk-Nagios eine Kette von
Administratoren nacheinander oder leitet den
Anruf von einem Administrator an den nchsten weiter. Die flexiblen Dial-Plne von Asterisk
bieten hier zahlreiche Mglichkeiten. (mfe)n nn
Infos
[1] Asterisk: [http://ftp.digium.com/pub/asterisk/
releases/asterisk-1.2.15.tar.gz]
[2] Webseite von ChanCapi: [http://www.melware.
org/ChanCapi]
[3] ChanCapi-Download: [ftp://ftp.chan-capi.org/
chan-capi/chan_capi-0.7.1.tar.gz]
[4] Mbrola-Download: [http://tcts.fpms.ac.be/
synthesis/mbrola/bin/pclinux/mbr301h.zip]
[5] Weibliche deutsche Stimme de3: [http://
tcts.fpms.ac.be/synthesis/mbrola/dba/de3/
de3-000307.zip]
[6] Mbrola-Stimmenauswahl: [http://tcts.fpms.ac.
be/synthesis/mbrola.html]
[7] Hadifix-Projekt: [http://www.ikp.uni-bonn.de/dt/
forsch/phonetik/hadifix/]
[8] Txt2pho: [http://www.ikp.uni-bonn.de/dt/forsch/
phonetik/hadifix/txt2pho.zip]
[9] Nag2ast: [http://www.nagiosexchange.org/
Notifications.35.0.html?&tx_netnagext_pi1[p_
Listing 7: Nagios-Kontakte
01
define contact{
02
contact_name
voice
03
alias
Sprachbenachrichtigung
04
service_notification_period
24x7
05
host_notification_period
24x7
06
service_notification_options
w,u,c,r
07
host_notification_options
d,r
08
service_notification_commands
notify-by-voice
09
host_notification_commands
host-notify-by-voice
10
email
nagios-admin@localhost
11 pager
CAPI/ISDN1/<Nummer>
12
}
www.linuxtechnicalreview.de
Der Autor
Michael Streb ist als
Consultant fr
Netzwerk- und NagiosProjekte bei der
Netways GmbH in
Nrnberg angestellt. Er
beschftigt sich seit
zehn Jahren mit OpenSource-Software.
Nagios
und SNMP
Das freie Monitoring-Programm Nagios erfreut sich
bei Admins schon lange groer Beliebtheit. Doch
in komplexen Netzwerken mit redundanten Verbindungen, Clustern und SANs gilt es, neben Serverdiensten auch die Netzkomponenten zu berwachen. Sptestens hier kommt SNMP ins Spiel.
Jrg Linge
www.linuxtechnicalreview.de
Praxis
SNMP-berwachung
Eine genaue Beschreibung des Szenarios findet
sich im Kasten Das Szenario. Da mindestens
zwei FC-Pfade die Server mit dem SAN verbinden, sollte die Software eventuelle Strungen
bereits im Vorfeld erkennen und melden. Die
Strungen lassen sich in der Regel auf den Servern selbst erkennen; allerdings laufen in vielen
Umgebungen die unterschiedlichsten Betriebssysteme auf den Servern.
Grundstzlich knnte ein Programmierer zwar
Nagios-Plugins fr alle Plattformen entwickeln,
es gibt jedoch noch eine einfachere Lsung: die
Prfung der Verfgbarkeit des SAN direkt am
SAN-Switch. Strungen lassen sich so am Status
der FC-Ports im Switch erkennen. Das Administrations-Frontend der Switches liefert zwar
detaillierte Informationen ber die einzelnen
Ports, leider kommt es als Java-Plugin daher
und dient damit nur schwerlich als Datenquelle
fr Nagios-Plugins.
Das Szenario
Die Basis fr diesen Artikel bildet ein Cluster
aus sechs Novell-Netware-6.5-Servern, die mit
einem zentralen SAN ber Fibre Channel verbunden sind. Die Disks der Cluster Volumes
stellt das SAN bereit. Zur Kopplung mit dem
SAN kommen zwei SAN-Switches vom Typ IBM
2104 F32 zum Einsatz. Die Server wiederum sind
jeweils mit beiden SAN-Switches verbunden.
www.linuxtechnicalreview.de
Praxis
www.linuxtechnicalreview.de
Praxis
SNMP-Plugin
Im nchsten Schritt kommt das Plugin check_
snmp zum Einsatz. Bei der gestellten Aufgabe
erreicht der Sysadmin damit aber schnell die
Grenzen des Machbaren. Die WARNINGund CRITICAL-Schwellwerte stellt er ber
die Optionen -w und -c ein. Solange nur der
Wert 6 als OK-Status dient, reicht ein -w :6 -c
6:. Das bedeutet aber, dass alle Werte kleiner als
6 einen CRITICAL-Status und alle Werte ber
6 einen WARNING-Status erzeugen.
Diese Variante ermglicht es nicht, weitere
Werte als OK-Status zu definieren. Bleibt die
Option -r. Ein Aufruf von check_snmp
mit -r [2,6] liefert einen CRITICAL-Status
bei Werten ungleich 6 oder 2. Das kommt der
Anforderung schon recht nahe. Mit -L "Fibre
Channel Port" lsst sich zustzlich ein Label
angeben. Die Ausgabe Fibre Channel Port OK
- 6 sagt schon mehr aus als SNMP OK - 6.
Aus den bis jetzt gesammelten Informationen
ergibt sich folgender Aufruf des Plugin:
check_snmp -H <I>Hostname<I> -C U
<I>Community<I> -o .1.3.6.1.4.1.U
1588.2.1.1.1.6.2.1.3.1 -r [2,6] U
-l "Fibre Channel Port"
17
.1.3.6.1.4.1.1588.2.1.1.1.6.2.1.19.1 = Counter32:
15239754
02 .
1.3.6.1.4.1.1588.2.1.1.1.6.2.1.1.1 = INTEGER: 1
03 .
1.3.6.1.4.1.1588.2.1.1.1.6.2.1.2.1 = INTEGER: 4
18
.1.3.6.1.4.1.1588.2.1.1.1.6.2.1.20.1 = Counter32:
47319301
04 .
1.3.6.1.4.1.1588.2.1.1.1.6.2.1.3.1 = INTEGER: 6
19
.1.3.6.1.4.1.1588.2.1.1.1.6.2.1.21.1 = Counter32: 0
05 .
1.3.6.1.4.1.1588.2.1.1.1.6.2.1.4.1 = INTEGER: 1
20
.1.3.6.1.4.1.1588.2.1.1.1.6.2.1.22.1 = Counter32: 0
06 .
1.3.6.1.4.1.1588.2.1.1.1.6.2.1.5.1 = INTEGER: 1
21
.1.3.6.1.4.1.1588.2.1.1.1.6.2.1.23.1 = Counter32: 0
07 .
1.3.6.1.4.1.1588.2.1.1.1.6.2.1.6.1 = INTEGER: 1
22
.1.3.6.1.4.1.1588.2.1.1.1.6.2.1.24.1 = Counter32: 0
08 .
1.3.6.1.4.1.1588.2.1.1.1.6.2.1.7.1 = INTEGER: 3
23
.1.3.6.1.4.1.1588.2.1.1.1.6.2.1.25.1 = Counter32: 0
09 .
1.3.6.1.4.1.1588.2.1.1.1.6.2.1.11.1 = Counter32:
24
.1.3.6.1.4.1.1588.2.1.1.1.6.2.1.26.1 = Counter32:
878380176
6815394
10 .
1.3.6.1.4.1.1588.2.1.1.1.6.2.1.12.1 = Counter32:
17155371
25
.1.3.6.1.4.1.1588.2.1.1.1.6.2.1.27.1 = Counter32: 0
26
.1.3.6.1.4.1.1588.2.1.1.1.6.2.1.28.1 = Counter32: 0
11 .
1.3.6.1.4.1.1588.2.1.1.1.6.2.1.13.1 = Counter32:
2426871545
27
.1.3.6.1.4.1.1588.2.1.1.1.6.2.1.29.1 = Counter32: 0
28
.1.3.6.1.4.1.1588.2.1.1.1.6.2.1.30.1 = Counter32: 0
12 .
1.3.6.1.4.1.1588.2.1.1.1.6.2.1.14.1 = Counter32:
3245433487
29
.1.3.6.1.4.1.1588.2.1.1.1.6.2.1.31.1 = Counter32: 0
30
.1.3.6.1.4.1.1588.2.1.1.1.6.2.1.32.1 = Counter32: 0
13 .
1.3.6.1.4.1.1588.2.1.1.1.6.2.1.15.1 = Counter32: 0
14 .
1.3.6.1.4.1.1588.2.1.1.1.6.2.1.16.1 = Counter32:
3245433487
31
.1.3.6.1.4.1.1588.2.1.1.1.6.2.1.33.1 = Hex-STRING:
00 00 00 00
32
.1.3.6.1.4.1.1588.2.1.1.1.6.2.1.34.1 = Hex-STRING:
15 .
1.3.6.1.4.1.1588.2.1.1.1.6.2.1.17.1 = Counter32: 0
16 .
1.3.6.1.4.1.1588.2.1.1.1.6.2.1.18.1 = Counter32: 0
www.linuxtechnicalreview.de
20 00 00 60 69 90 16 26
33
.1.3.6.1.4.1.1588.2.1.1.1.6.2.1.35.1 = INTEGER: 3
Praxis
Listing 3: Perl-SNMP-Plugin
39
my $swFCPortRxWords = ".1.3.6.1.4.1.1588.2.1.1.1.
01
#! /usr/bin/perl -w
02
# nagios: +epn
6.2.1.12.$opt_P";
03
use strict;
40
04
use Getopt::Long;
41
my $result = $session->get_request(
05
use Net::SNMP;
42
06
07
my $opt_C="public";
43
);
08
my $opt_H="";
44
09
my $opt_p=161;
45
$session->close;
10
my $opt_P=1;
46
11
my $opt_t="5";
47
if (!defined($result)) {
12
13
Getopt::Long::Configure('bundling');
14
GetOptions(
15
=> \$opt_
=> \$opt_
=> \$opt_
=> \$opt_
=> \$opt_
C,
16
H,
17
p,
18
P,
19
t,
22
print "UNKNOWN: No Hostname specified\n" and exit
3 if(!$opt_H);
exit 1;
50
}
51
52
my $PerfData =
"|TxWord=$result->{$swFCPortTxWords}c;;;;
RxWord=$result->{$swFCPortRxWords}c;;;;";
53
54
55
for ($result->{$swFCPortPhyState}){
56
if (/1/){ print "CRITICAL: No Card found in Port
$opt_P (id=$_) $PerfData\n" and exit 2;};
58
if (/3/){ print "CRITICAL: Laser fault on Port
$opt_P (id=$_) $PerfData\n" and exit 2;};
59
if (/4/){ print "CRITICAL: Port $opt_P is not
23
24
# Just in case of problems, let's not hang Nagios
25
$SIG{'ALRM'} = sub {
print ("UNKNOWN: Connection to $opt_H timed
out\n");
exit 3;
28
};
62
if (/7/){ print "CRITICAL: Power fault on Port
29
alarm($opt_t);
30
31
my ($session, $error) = Net::SNMP->session(
32
-hostname
=> $opt_H,
33
34
-port
=> $opt_p,
63
if (/8/){ print "CRITICAL: Diag Fault on Port
$opt_P (id=$_) $PerfData\n" and exit 2;};
64
if (/9/){ print "CRITICAL::Lock Ref on Port $opt_
P (id=$_) $PerfData\n" and exit 2;};
35
);
65
}
36
66
37
my $swFCPortPhyState = ".1.3.6.1.4.1.1588.2.1.1.1
67
print "UNKNOWN: State id
.6.2.1.3.$opt_P";
38
my $swFCPortTxWords = ".1.3.6.1.4.1.1588.2.1.1.1.
6.2.1.11.$opt_P";
49
21
27
48
57
if (/2/){ print "OK: No Gbic found in Port $opt_P
20
);
26
$swFCPortTxWords, $swFCPortRxWords]
www.linuxtechnicalreview.de
Praxis
Define service {
...
service_description fc_port1
check_command
check_brocade_port!1
....
}
Eigene Plugins
Die Aufgabenstellung ist hiermit vorerst erfllt.
Nagios erzeugt einen Alarm, wenn die SwitchPorts nicht den Wert 2 fr noGbic oder 6 fr
inSync liefern. Diese Lsung weist aber noch
einige Unzulnglichkeiten auf: So weist der numerische OID-Wert nicht auf das eigentliche
Problem hin. Bessere wre hier eine Umwandlung in einen aussagekrftigen Text. Dafr eignet sich das Plugin check_snmp jedoch nicht.
Es liegt also nahe, diese Aufgabe durch ein selbst
entwickeltes Plugin zu erledigen.
Die sehr einfache Nagios-Schnittstelle zum
Entwickeln eigener Plugins erweist sich hier als
hilfreich. Es gibt nur wenige Anforderungen, die
ein Plugin fr die Kommunikation mit dem Nagios-Daemon erfllen muss. Genaue Informationen bietet ein eigener Artikel in dieser Ausgabe
sowie die Website der Nagios-Plugins [5] und
das deutschsprachige Wiki [6].
Nagios interpretiert nur die erste Zeile der Plugin-Ausgabe. Alle ntigen Informationen mssen also bereits hier stehen. Den Status ermittelt
Nagios ber den Rckgabewert; beendet sich ein
Plugin mit dem Wert 0, so ergibt dies in Nagios den Status OK der Returncode 1 steht
fr den Status WARNING und 2 fr CRITICAL. Eine Besonderheit stellt der Returncode 3 (UNKNOWN) dar. UNKNOWN
sollte ein Plugin immer dann liefern, wenn interne Fehler in der Verarbeitung auftreten.
Dies sind schon die grundlegenden Eigenschaften eines Plugins, die verwendete Programmiersprache hngt von den eigenen Kenntnissen ab.
Jedoch sollten Entwickler stets auf die Ausfhrungsdauer achten. Ein Plugin, das von Nagios
aktiv aufgerufen wird, sollte so schnell wie mglich ein Ergebnis liefern. Langsame Plugins fhren oft zu einer hohen Service Check Latency.
Daraus resultiert, dass Nagios den Check nicht
mehr zum geplanten Zeitpunkt ausfhrt. Plugins, die schon im Normalzustand lnger als zwei
Sekunden zur Ausfhrung bentigen, sollte der
Programmierer dringend berarbeiten oder als
passiven Check [7] implementieren.
Performancedaten sammeln
Nagios zerlegt wenn mglich die Ausgabe
von Plugins in zwei Teile. Als Trennzeichen
dient dabei das Pipe-Symbol |. Der linke Teil
der Ausgabe wird als Plugin-Output bezeichnet,
der rechte Teil kennzeichnet so genannte Performancedaten. Sie haben zwar keinen Einfluss auf
den Status innerhalb von Nagios, jedoch verfgt
Nagios ber eine Schnittstelle, die diese Perfor-
www.linuxtechnicalreview.de
Praxis
Fazit
SNMP erweist sich fr die berwachung eines unbersichtlichen Systems mit Nagios als sehr
hilfreiches Protokoll. Administratoren knnen nach einer kurzen Einarbeitungsphase durchaus ruhiger schlafen whrend
Nagios seinen Dienst tut. Sollte doch ein Fehler
auftreten, bleibt alle Zeit der Welt, um das Problem in Ruhe zu lsen. (mwe)
nnn
Abbildung 2: Nagvis visualisiert das System und hilft, Fehler schnell zu lokalisieren. Ein grnes Icon zeigt den Normalstatus an, bei roten Symbolen gibt es Handlungsbedarf.
Dokumentation
Das Skript lst die Aufgabe sehr komfortabel;
es berwacht die beiden Switches mit jeweils 32
Ports und gibt aussagekrftige Meldungen zurck. Doch was bedeutet die Information ber
Fehler auf einem Switch-Port? Wie schnell muss
reagiert werden? Welcher Server hngt an diesem Port? Je rascher die Admins diese Informa-
Infos
[1] Nagios-Plugins:
[http://nagiosplug.sourceforge.net]
[2] Net-SNMP: [http://net-snmp.sourceforge.net]
[3] Liste der Enterprise-Nummern bei der
IANA: [http://www.iana.org/assignments/
enterprise-numbers]
[4] MIB-Depot: [http://www.mibdepot.com]
[5] Entwickeln eigener Plugins: [http://nagiosplug.
sourceforge.net/developer-guidelines.html]
[6] Deutsches Nagios-Wiki:
[http://www.nagios-wiki.de]
[7] Passive Checks mit Nagios: [http://nagios.
sourceforge.net/docs/2_0/passivechecks.html]
[8] Nagios Grapher: [http://www.nagiosexchange.
org/NagiosGrapher.84.0.html]
[9] PNP: [http://www.ederdrom.de/doku.php/
nagios/pnp]
[10] N2rrd: [http://n2rrd.diglinks.com]
[11] Perf Parse: [http://perfparse.sourceforge.net]
[12] Nagvis: [http://www.nagvis.org]
www.linuxtechnicalreview.de
Nagios-Werkstatt:
Eigenbau von Perl-Plugins
Das riesige Angebot fertiger Lsungen ist eine
der groen Strken von Nagios. Wo selbst das
nicht reicht, ist es aber auch nicht schwer, den
Bedarf mit selbst geschriebenen Skripten zu decken. Wolfgang Barth
www.linuxtechnicalreview.de
Praxis
Abbildung 1: Mit einer solchen bersicht zeigt Nagios dem Admin auf einen Blick, in welchen Zustand
sich welcher Service befindet.
www.linuxtechnicalreview.de
Praxis
Performancedaten
Checks
durchfhren
Onlinehilfe
Ergebnis
zurckliefern
Kommandozeile
parsen und
prfen
Abbildung 2: In diese Funktionsgruppen gliedert sich intern ein typisches
Nagios-Plugin. Fr viele immer wiederkehrende Aufgaben bieten sich dabei Bibliotheksfunktionen an, die Nagios::Plugin anbietet.
Als erstes Beispiel (Listing 1) dient ein ganz einfaches Plugin, das die Verfgbarkeit einer DSLLeitung prft, fr die auf dem lokalen Rechner
ein PPP-over-Ethernet- (PPPoE)-Prozess startet. Es enthlt zwar weder eine Onlinehilfe noch
wertet es die Kommandozeile aus, ist dafr aber
direkt einsetzbar. Es gengt, das Interface einzutragen, an dem die DSL-Leitung angeschlossen
ist. Daraufhin fragt das Plugin mittels pppoe -I
<interface> -A ab, ob sich die Gegenstelle mel-
Long
Beschreibung
- -version Ausgabe der Plugin-Version, Plugin beendet sich sofort
- -help Ausgabe einer Onlinehilfe, die bei -h als Kurzhilfe, bei --help als vollstndige Hilfe ausfallen kann
- -timeout
Timeout, nach dem das Plugin den Test abbricht
- -warning
Warnschwellwert
- -critical
kritischer Schwellwert
- -hostname Hostname oder IP-Adresse (bei Netzwerkchecks)
- -verbose
Debugging-Ausgaben
- -community
SNMP-Passwort (nur bei SNMP-Abfragen)
- -authentication Passwort, sonstige Authentifikationsangaben
- -logname
Loginname
- -port, - -passwd, normalerweise fr die Angabe eines Zielports bei Netzwerkplugins, ist aber auch fr die Angabe
- -passwort eines Passwortes verwendbar.
--url --username URL und/oder Username fr die Authentifikation.
www.linuxtechnicalreview.de
Praxis
Listing 1: check_pppoe.pl
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
!/usr/bin/perl -w
#
use strict;
use warnings;
use Nagios::Plugin 0.15;
my $interface = 'eth1';
my $accessconcentrator = '';
my $failedconn = 0;
my $verbose = 0;
my $np = Nagios::Plugin->new( shortname =>
"CHECK_PPPOE" );
open ( OUT, "/usr/sbin/pppoe -I $interface -A
2>&1 |" )
or $np->nagios_die( "can't start /usr/sbin/
pppoe" );
while (<OUT>) {
print "$_" if ($verbose);
chomp $_;
if ( /Access-Concentrator:\s+([^ ]+.*$)/ ) {
www.linuxtechnicalreview.de
19
$accessconcentrator = $1;
20 } elsif ( /Timeout waiting for PADO packets/
) {
21
$failedconn++;
22 }
23
}
24
close (OUT);
25
26
SWITCH: {
27 if ( "$accessconcentrator" ne "" ) {
28
$np->nagios_exit( OK, "Access Concentrator:
$accessconcentrator");
29
last SWITCH;
30 }
31 if ( $failedconn > 0 ) {
32
$np->nagios_exit(CRITICAL, "no DSL link"
);
33
last SWITCH;
34 }
35 $np->nagios_die( "for unknown reasons" );
36
}
Praxis
Das Plugin check_du.pl (Listing 2) ermittelt und addiert mit Hilfe des Unix-Programms
du die Gre von Verzeichnissen oder auch
von einzelnen Dateien und prft anschlieend,
Listing 2: check_du.pl
001
#!/usr/bin/perl -w
030
002
031
=item -v|--verbose
003
=head1 NAME
032
004
033
34increases verbosity, specify twice to see the
original output from sapinfo.
005
5check_du.pl - Nagios plugin for checking size
034
007
=head1 SYNOPSIS
036
008
037
print version an exit
038
[-w warning_threshold]
[-c critical_threshold]
039
=item -h|--help
040
041
print help message and exit
012
042
013
=head1 OPTIONS
043
=cut
014
044
use strict;
015
=over 4
045
use warnings;
016
046
017
=item -P|--path=expression
047
use Nagios::Plugin 0.15;
018
048
use Getopt::Long qw(:config no_ignore_case
bundling);
019
Path expression for calculating size. May be a
shell expression like
020
/var/log/*.log
050
021
051
022
=item -w|--warning=threshold
052
my $np = Nagios::Plugin->new( shortname =>
023
threshold can be max (warn if < 0 or > max),
min:max (warn if < min or >
024
max), min: (warn if < min), or @min:max (warn if
>= min and <= max). All values must be
"CHECK_DU" );
053
my $line = '';
054
my $warn_threshold = '0:';
055
my $crit_threshold = '0:';
025
integer.
056
my $what = '';
026
057
my $denied = 0;
027
=item -c|--critical=threshold
058
my $size = 0;
028
059
my $result = UNKNOWN;
029
see --warning for explanation of threshold
format
049
use Pod::Usage;
060
my $version = 'V1.0/2007-01-28/wob';
061
my $printversion = 0;
www.linuxtechnicalreview.de
Praxis
094
063
my $help = 0;
095
064
096
# -- main
065
# -- GetOpt
097
open ( OUT, "LANG=C; /usr/bin/du -cs $what 2>&1
|" )
066
GetOptions(
098
067
"P|path=s"
=> \$what,
068
"w|warning=s"
=> \$warn_threshold,
069
"c|critical=s"
=> \$crit_threshold,
099
070
"h|help"
=> \$help,
100
while (<OUT>) {
071
"V|version"
=> \$printversion,
101
072
"v|verbose+"
=> \$verbose,
102
chomp $_;
073
) or pod2usage({ -exitval => UNKNOWN,
103
my $line = $_;
074
-verbose => 0,
104
075
-msg
105
);
106
107
077
pod2usage(-verbose => 2,
108
078
109
079
last;
}
111
close (OUT);
081
pod2usage(-msg
112
113
$np->add_perfdata( label => "size", value =>
$version\n",
$size,
082
-verbose => 0,
083
114
$np->threshold() );
115
085
086
pod2usage(-msg
087
directories or files");
-verbose => 0,
088
116
if ( $denied ) {
117
specified ***",
089
$size = $1;
110
}
) if ( $help );
080
084
118
}
119
090
120
$result = $np->check_threshold(
091
# -- thresholds
121
092
$np->set_thresholds(
122
$np->nagios_exit( $result, "check size: $size
093
warning
=> $warn_threshold,
www.linuxtechnicalreview.de
$size );
kByte");
Praxis
Performancedaten
Die Textausgabe eines Plugin ist, wie schon gesagt, in erster Linie fr den Administrator gedacht, und soll ihn per Weboberflche oder ber
das Benachrichtigungssystem mit Informationen ber das Ergebnis der berprfungen versorgen.
Fr die bergabe von Performancedaten an externe Programme, die solche Werte dann grafisch aufbereiten knnen (ein Beispiel dafr ist
der Nagios Grapher, den ein weiterer Beitrag
dieser Ausgabe ausfhrlich vorstellt), gibt es
eine besondere Syntax. Bei der Weiterleitung
solcher Werte folgt hinter der Textausgabe ein
|-Zeichen. Alle folgenden Textausgaben unterdrckt Nagios. Das einheitliche Format fr
Performancedaten lautet: name=wert[uom];
warn;crit[;min[;max]].
Dabei ist name die Bezeichnung fr eine Variable. Die Abkrzung uom hinter dem zugeordneten Wert steht fr Unit of Measurement,
also eine Maeinheit. Als Einheiten kommen
% (Prozentangabe), s (eine Zeitangabe in
Sekunden, auch Milli- oder Mikrosekunden),
B (eine Datengre in Byte, auch KByte,
MByte oder TByte) oder c fr einen monoton
wachsenden Zhler (Counter) infrage. Die An-
Der Autor
Der studierte Physiker Wolfgang Barth ist Systemadministrator mit Leib und
Seele. Er betreute oder betreut Systeme unter VMS, Digital Unix (Tru64), SunOS/
Solaris, IBM AIX und HP-UX. Linux ist fr ihn nur die logische Fortsetzung zum Unix
berall. Seine Begeisterung fr alles, was mit Systemadministation zu tun hat,
gibt er gerne weiter: In Bchern ("Das Firewall-Buch", "Netzwerkanalyse unter
Linux" oder "Nagios", in Artikeln, Seminaren und im persnlichen Kontakt.
Ausblick
Auch das zweite Beispiel ist noch nicht hundertprozentig perfekt. Noch nachzursten wre etwa
ein Timeout-Mechanismus, ber den NagiosPlugins immer verfgen sollten. Er brche nach
einer voreingestellten Zeit ihre Ausfhrung ab.
Das wiederum wrde gewhrleisten, dass sich
Nagios nicht unntig lange mit aussichtslosen
Versuchen aufhlt, falls etwas bei der Skriptausfhrung klemmt. Es hat sich mittlerwile eingebrgert, diesen Timeout auf 10 Sekunden festzusetzen.
Ermittelt man die Gesamtgre von vielen Verzeichnissen, reicht der Timeout aber nicht. In
Perl lsst sich der zeitgesteuerte Abbruch mit
der Funktion alarm() einrichten, die einen
Aufruf nach einer vom Anwender vorgegebenen
Zeit abbricht.
Die beiden vorgestellten Plugins arbeiten lokal,
das heit, man installiert sie auf der Maschine,
auf der der Test auch auszufhren ist. Um sie alternativ vom Nagios-Server aus ber das Netzwerk aufzurufen, muss man auf Mechanismen
wie den Dienst NRPE (Nagios Remote Plugin
Executor) oder die Secure Shell (SSH) zurckgreifen.
Wer in Perl schon ein paar Erfahrungen gesammelt hat, dem wird der Eigenbau von NagiosPlugins fr spezielle Zwecke nach dem hier vorgestellten Mustersicher nicht mehr schwerfallen.
(jcb)
nnn
Infos
[1] Nagios Plugins:
[http://nagiosplug.sourceforge.net]
[2] Nagios-Tauschbrse:
[http://www.nagiosexchange.org]
[3] Beispiele aus dem Text:
[http://linux.swobspace.net/projects/nagios]
[4] CPAN das Modul-Archiv von Perl:
[http://www.cpan.org]
[5] Nagios Developer Guide:
[http://nagiosplug.
sourceforgenet/developer-guidelines.html
#THRESHOLDFORMAT].
www.linuxtechnicalreview.de
Nagvis
www.linuxtechnicalreview.de
Projekte
Den meisten Admins erscheint es als undankbare Aufgabe: die Dokumentation der Netzwerk-Infrastruktur. Was aber fr einen technikorientierten Menschen wie eine Strafe wirkt, hat
durchaus seine Berechtigung. Je mehr die Infrastruktur wchst, desto schwieriger wird es, sich
darin zurechtzufinden. Gerade fr neue Mitarbeiter gleichen undokumentierte Rechnerlandschaften einer Irrfahrt durchs Unbekannte.
Genau aus diesem Grund schmcken Rechnerrume nicht selten DIN-A0-Ausdrucke, auf
denen sich mit Pfeilen verbundene IT-Komponenten tummeln. ndert sich die Infrastruktur,
wird ein neuer Ausdruck fllig. Fr solche Aufgaben haben sich Applikationen wie Microsofts
Visio oder freie Vektorgrafikprogramme wie
Xfig und Inkscape bewhrt.
Diese Tools haben aber gemeinsam, dass der
Admin anhand der Skizzen nicht sieht, in welchem Zustand sich die einzelnen Komponenten
befinden. Eine aktive Skizze des Netzes, die bei
Fehlern gleich die Alarmlampen blinken liee,
wrde das Leben der Systemadministratoren
deutlich erleichtern. Hier bietet sich das NagiosFrontend Nagvis [1] an.
Im Fokus
Als Sammlung von PHP- und JavaScript-Dateien integriert sich Nagvis sehr komfortabel
in eine vorhandene Nagios-Installation und
zeigt die Monitoring-Informationen genau wie
Nagios ber ein Webinterface an. Nagvis stellt
dazu die Daten des Nagios-Servers so dar, dass
sie sich auf einer Hintergrundgrafik anordnen.
Diese Grafik erstellen Admins vorher zum Beispiel mit Visio oder Inkscape.
Nagvis bietet zur Darstellung der Nagios-Daten
eine Browser-basierte Konfigurationsoberflche
an. Im Web User Interface (WUI, siehe Abbildung 1) reprsentieren Icons, die sich auf der
Hintergrundgrafik platzieren lassen, die Hosts,
Services oder Kombinationen aus beiden. Dazu
bietet das WUI in der aktuellen Nagvis-Version
0.9 Final die Mglichkeit, Icons per Drag and
Drop an die gewnschte Position zu verschieben. Vorher mussten Anwender die Positionen
noch explizit ber X- und Y-Koordinaten festlegen. Mittlerweile lassen sich Maps (Hintergrundgrafiken samt positionierter Icons) vollstndig mit dem WUI verwalten.
Icons verndern, je nach Zustand des von ihnen
reprsentierten Objekts, die Farbe. Welches Icon
welche Farbe annimmt, bestimmen so genannte
Effiziente Fehlersuche
Wer sich ber mgliche Darstellungsformen
seines Netzes informieren will, findet im Kasten Beispiele fr Maps einige Vorschlge fr
Nagvis-Skizzen. Mit Nagvis lassen sich neben
Hosts, Services und Gruppen auch ganze Maps
in Maps einlagern. Anhand eines solchen Gebudeplans reprsentiert die Map dann einen
IT-Schrank auf dem Flur, den Flur als Teile einer
Etagen-Karte und so weiter.
ndert sich der Zustand eines der Objekte in
dieser Map, zeigt das Icon im Gebudeplan den
Wechsel an und signalisiert, dass die dahinterliegende Map einen Problemstatus aufweist. Mit
einem Klick auf das Map-Icon gelangen Benutzer auf diese Map und kreisen so das Problem
ein. Um nicht jeden einzelnen Service auf einer
Map zu platzieren, knnen Hosts und HostGruppen veranlasst werden, den Gesamtzustand
aller enthaltenen berwachten Services anzuzeigen (Option recognize_services=1).
Abbildung 1: Mit dem Web User Interface platziert der Admin Objekte auf
dem Hintergrundbild und verschiebt sie per Drag and Drop direkt im Browser. So lassen sich Plne der Infrastruktur sehr komfortabel erstellen.
www.linuxtechnicalreview.de
Projekte
Beschreibung
global
host
service
hostgroup
servicegroup
map
textbox
Parameter
Fllt der Service eines Host oder einer HostGruppe aus, zeigt das Icon einen kritischen
(Farbe Rot) oder Warnungs-Zustand (Orange)
an. Bleibt die Option url (siehe Tabelle 1) eines Icons leer, zeigt ein Klick darauf die NagiosSeite des Objekts an und erlaubt es, den Fehler
zu beurteilen. So lsst sich durch ein paar Klicks
herausfinden, wo das Problem auftritt.
Installation
Nagvis liegt auf der Sourceforge-Seite des Projekts [2] als gezipptes Tar-Archiv vor. Da es
komplett ber eine Weboberflche luft, gestal-
Beispiele fr Maps
Flurplan: Eine Map basierend auf einem Gebude- oder Flurplan. Die
Icons knnen in den Rumen platziert werden und erleichtern einem
Admin somit die Suche (siehe Abbildung 1).
Gebudeplan: Zeichnung eines Gebudes, in das Flurplne als Maps
eingebettet sind. Diese Maps zeigen den Gesamtstatus eines Flures an,
so dass bei Linksklick auf die alarmierende Map der fehlerhafte Host
oder Service lokalisiert werden kann.
Netzwerkplan: Gngiger Fall einer Darstellung, in der die Infrastruktur
anhand von Symbolen skizziert wird. Als grafische Elemente dienen hier
Linien fr die Netzverbindungen, Rechner oder Server. Die Verbindungen zwischen ihnen stellen Pfeile oder Linien dar, die fr das EthernetNetzwerk stehen. Aufgrund des hohen Abstraktionsgrades eignet sich
der Netzwerkplan nicht immer.
Landkarte: Land- oder Stadtkarte einer Region mit berwachten Standorten. Je nachdem, ob es sich um einzeln berwachte Gebiete handelt,
knnen die Standorte ihrerseits mit Maps oder nur mit Hosts/Services
weiter gegliedert sein.
Schrank: Befinden sich Rechner in einem Rack, zeichnet der Admin es
in einem Grafikprogramm nach. Die Zustnde lassen sich neben den
Maschinen darstellen.
Tabelle: Eine Tabelle von Hosts/Services und Orten mit Icons auf ihren
Schnittpunkten. Vorteil hier: Viele Icons passen auf eine Map.
www.linuxtechnicalreview.de
Projekte
Aufgabe
Berechtigungen
share/nagvis/etc/config.ini.php
share/nagvis/etc/header.nagvis.inc
share/nagvis/etc/maps/
share/nagvis/maps/
share/nagvis/iconsets/
share/side.html
Haupt-Konfigurationsdatei
Kopf der Nagvis-Ansicht
Map-Konfigurationsdateien
Hintergrundgrafiken
Zustands-Icons
Nagios-Sidebar
www.linuxtechnicalreview.de
Projekte
Fazit
Der Autor
Markus Klimke ist Mitarbeiter des Instituts
fr Modellierung und
Berechnung an der
Technischen Universitt Hamburg-Harburg.
Integration in Nagios
Als eigenstndige Webseite, wie in Abbildung 3
zu sehen, kommt die berwachung dieses hier
beispielhaft gezeigten Flures recht einsam daher.
Interessanter und systematischer wird es, wenn
alle Maps in die bereits bestehende Nagios-
Infos
[1] Nagvis-Projektseiten: [http://www.nagvis.org]
[2] Nagvis-Download: [http://www.nagvis.org/
doku.php?id=downloads]
[3] Nagvis-Installationsanleitung:
[http://www.nagvis.org/doku.php?id=installatio
ninstructions_0_9]
[4] Nagvis-Dokumentation: [http://www.nagvis.org/
doku.php?id=doc]
[5] NDO-Utils-Download: [http://www.nagios.org/
download/]
[6] NDO-Utils auf 64-Bit-Systemen bersetzen:
[http://www.nagios-portal.de/forum/thread.
php?threadid=5363]
[7] Arbeitsprinzip der NDO-Utils: [http://www.
ederdrom.de/doku.php/nagios/ndo]
[8] Nagios-Forum: [http://www.nagios-portal.de/
forum]
www.linuxtechnicalreview.de
Projekte
Die NDO-Utils
Umgebung mit ausschlielich einem Nagios-Server und einer Nagios-Instanz stellt dafr die einfachste Lsung dar.
Der Sinn von Nagios-Instanzen und ihrer eindeutigen Namensvergabe erschliet sich dem Anwender erst dann,
wenn ein Server mehrere Nagios-Prozesse beherbergt. Damit der NDO2DB-Daemon wei, welche Daten von welchem
Nagios-Daemon kommen, werden sie mit einem eindeutigen Namen als Instanz versehen. Genauere Informationen
finden sich als PDF nach dem Entpacken der NDO-Quellen im Verzeichnis docs oder unter [7].
NagiosDaemon
Programm
logik
TCP
Socket
Installation
NDOBroker
Modul
Unix
Socket
NDO2DB
www.linuxtechnicalreview.de
Datenbank
/usr/nagios/bin/ndo2db -c /etc/nagios/ndo2db.cfg
Konsolentools
frs Monitoring
Fr die schnelle Abfrage zwischendurch sind die
groen Monitoring-Lsungen oft berdimensioniert.
Zum Glck gibt es zahlreiche unkomplizierte Tools
fr die Konsole. Christoph Wegener
www.linuxtechnicalreview.de
Projekte
Ping
Eines der grundlegendsten Werkzeuge bei der
Analyse von Netzwerkproblemen ist Ping. Es
ermglicht die schnelle berprfung des Status
von Hosts und erzeugt Statistiken ber deren
Verfgbarkeit.
Ping versendet ICMP-Pakete vom Typ Echo Request an einen oder mehrere Server und wartet
auf eine passende Antwort vom Typ Echo Reply. ber die zwischen den beiden Ereignissen
verstrichene Zeit erstellt das Tool eine einfache
Statistik.
Neben der Information ber die Erreichbarkeit
ergibt sich die Verbindungsqualitt zur Gegenstelle aus der Anzahl der erhaltenen Antwortpakete und ihrer Laufzeiten. Ping errechnet das
Verhltnis von verlorenen zu ankommenden
Paketen und stellt dies in Prozentwerten dar.
server mit einer Payload von 16437 Byte fragmentiert werden mssen, gibt der Befehl ping
-s 16437 server -Mdo aus. Ein ping -R server
gibt die Route zu server zurck.
Pfadfinder
Wie ping -R nutzt auch traceroute die TTL
der ICMP-Pakete, um die Route zum Zielgert
zu ermitteln. Darber hinaus hilft es bei Problemen mit MTUs und liefert zahlreiche weitere
Informationen. Tracepath berechnet auch die
sogenannte Path MTU, also die MTU ber den
ganzen Netzwerkpfad. Bei Verbindungen, an denen mehrere Carrier beteiligt sind, ergeben sich
dabei ab und zu berraschende Werte.
Die Funktionalitten von Ping und Traceroute
vereint Mtr. Es sammelt Minimal-, Maximalund Durchschnittswerte und stellt diese in einer
bersichtlichen Tabelle dar. Pakete fr die meisten Distributionen stehen unter [1] zur Verfgung.
Erweiterte Optionen
Telnet
Telnet, wie Ping standardmig bei allen Distributionen installiert, leistet gute Dienste bei der
berprfung von Serverdiensten. Viele Protokolle, wie HTTP, IMAP oder SMTP lassen sich
ber eine einfache Telnet-Verbindung bedienen. Allerdings ist hierfr die genaue Kenntnis
der entsprechenden Protokollkommandos und
Ablufe Voraussetzung fr die Kommunikation
mit dem Serverdienst. In den meisten Fllen finden sich alle bentigten Informationen dazu in
den jeweiligen RFCs .
Schon der Verbindungsaufbau zum Server bietet
erste Rckschlsse auf einen mglichen Fehler:
Ist das Gert berhaupt unter der angegebenen
Adresse auf dem angegebenen Port erreichbar?
Meldet Telnet ein Connected to..., oder wird
www.linuxtechnicalreview.de
DNS-Werkzeuge
Die DNS-Clients host
und dig sowie das veraltete, aber immer noch
verbreitete nslookup
ermitteln auf der Konsole
Daten von DNS-Servern
wie die IP eines Rechners
oder den zustndigen
Mailserver.
Routing-Tools
route und ip route
show zeigen die eingestellten Routen. ip
kennt Routing Policies,
um Pakete auf unterschiedlichen Wegen ins
Ziel zu bringen.
Projekte
Netcat
Wie Telnet kann auch Netcat mit TCP-basierten
Protokollen kommunizieren, kombiniert diese
Fhigkeit aber mit Features, die von dem Befehlszeilentool cat bekannt sind. Netcat bietet
darber hinaus noch weitere ntzliche Features.
Es sendet und empfngt binre Daten ber TCP
oder UDP, kann auf eingehende Verbindungen
lauschen und empfangene Daten in Dateien
umleiten.
Netcat bietet neben einer langen Reihe von
ntzlichen Optionen zwei verschiedene Arbeitsmodi. Als Capturer zeichnet es alle Daten auf,
08
250 mail-server C=DE
09
mail from: test@test.de
10
250 ok
11
rcpt to: test@test.de
12
553 sorry, we do not relay for your IP address (#5.7.1)
13
quit
14
221 mail-server C=DE
15
Connection closed by foreign host.
16
#>
Tcpdump
Tcpdump kann komplette Pakete des EthernetProtokolls oder jedes anderen Protokolls auf
OSI-Layer 2 und darber an der lokalen Netzwerkschnittstelle protokollieren. Gerade bei
nicht-trivialen Netzwerkproblemen ist derartiges Packet Sniffing eine gute Alternative.
Tcpdump hilft beispielsweise, den Hintergrnden einer schlechten Netzwerkperformance auf
die Spur zu kommen. Absender, Empfnger,
Ports und Protokolle des gesamten Netzwerkverkehrs werden erfasst. Aus diesem Profil ergibt
sich fast zwangslufig die Anwendung, die den
mglicherweise fehlerhaften Traffic verursacht.
Weil Tcpdump die Herkunft von unbekannten
Paketen anzeigt, ist es auch bei Denial-Of-Service-Angriffen eine groe Hilfe.
Das einfache Werkzeug arbeitet direkt auf der
Ebene der Netzwerkschnittstelle und unterscheidet sich dadurch erheblich von Werkzeugen wie Ping, Telnet, MRTG oder Nagios, die
den OSI-Layer 3 berwachen. Im Gegensatz zu
diesen zeichnet Tcpdump allerdings keine langfristigen Trends auf, sondern liefert einen LiveMitschnitt des aktuellen Netzwerkzustandes, es
eignet sich perfekt zum Netzwerk-Debuggen.
Das folgende Beispiel illustriert den Einsatz von
Tcpdump zur Fehleranalyse: Ein lokaler Webserver antwortet nicht auf Clientanfragen. Der
Administrator startet auf dem Clientrechner
Tcpdump und startet dann eine Anfrage an den
www.linuxtechnicalreview.de
Projekte
Promiscuous Mode
Soll das Tool auf der lokalen Netzwerkschnittstelle Daten protokollieren, die nicht fr das lokale Gert bestimmt sind, muss das Netzwerkinterface mit Administratorrechten in den Promiscuous Mode geschalten werden. Alle Pakete
der Collision-Domain werden jetzt auch durch
die lokale Netzwerkkarte angenommen.
Tcpdump bietet umfangreiche Filtermglichkeien, die vor allem im Promiscuous Mode sehr
gute Dienste leisten. Mit diversen Ausdrcken
und Boolschen Operatoren lsst sich der mitgeschnittene Netzwerkverkehr schnell auf die
Pakete mit den gewnschten Eigenschaften einschrnken.
Um auf der Netzwerkschnittstelle eth0 beispielsweise den Netzwerkverkehr von Host A auf Port
22 mitzulesen, dabei aber alle Pakete auszuschlieen, die von oder zu Host B gehen, dient
folgender Befehl:
tcpdump -i eth0 host A and U
not host B and port 22
Hinter Tcpdump steht unter anderem die Bibliothek Libpcap, auf die auch zahlreiche andere
Programme aufsetzen und teilweise eine viel
umfangreichere Funktionalitt bereitstellen.
Wireshark, Nachfolger von Ethereal, bringt eine
grafische Oberflche zur Analyse des Netzwerkverkehrs und eine groe Anzahl bereits vorkonfigurierter Filter mit. Das Programmpaket
Nfsen bietet sehr ausgereifte Mglichkeiten zur
Protokollierung von Paketen auch in greren
Netzen.
Nmap
Netzwerkberwachung umfasst in vielen Fllen
mehr als die fortlaufende Analyse der Verfgbarkeit von Servern oder die Performance der
angebotenen Dienste. Auch die berwachung
von Desktoparbeitspltzen und der dort angebotenen Dienste oder eine berprfung von
neuen Softwareversionen auf Sicherheitslcken
sind potenzielle Anwendungsszenarien fr Monitoring-Tools.
Mit dem Netzwerkscanner Nmap steht ein hervorragendes Werkzeug zur Verfgung, das unkompliziert und mit vielen Optionen eine bersicht der im lokalen Netz angebotenen Dienste
liefert. Es ermglicht dem Administrator auf
der Kommandozeile eine Flle von Scans gegen
ganze Netze und Portbereiche und ist auf allen
Unix-Systemen verfgbar.
Scan Modes
Darber hinaus bietet Nmap verschiedene ScanModi, die eine ganze Palette von Mglichkeiten
erffnen. Fr einen schnellen berblick, welche
Rechner in einem Netz vorhanden und aktiv
sind, bietet sich der List-Scan nmap -sL oder
ein Ping-Scan nmap -sP an.
Im einem zweiten Schritt kommen erweiterte
Scan-Techniken zum Einsatz, mit denen offene
Ports, verwendete Betriebssysteme oder auch
die Versionen der angebotenen Dienste identifiziert werden.
Nmap kann dabei sowohl TCP-Scans in verschiedenen Varianten als auch UDP-Scans
durchfhren. Bei Letzteren sollte aber beachtet
werden, dass diese mglicherweise aufgrund
von Beschrnkungen der ICMP-Pakete etwas
lnger dauern. Drei bis vier Sekunden pro gescanntem Port sind dabei keine Seltenheit, was
einen Scan ber 1000 Ports schnell ber eine
Stunde dauern lsst. Hier helfen dann nur noch
gezielte Abfragen weiter.
Sniffing
iptraf und intop
sammeln Netzwerkdaten
und prsentieren die Daten in konfigurierbaren
Tabellen. Den Traffic auf
dem lokalen Rechner,
einer Firewall oder einem
Router listet der Aufruf
iptables -L -vv -x gezhlt und sortiert nach
den Regelketten einer
installierten Firewall.
Scanner
Neben nmap,ethereal
und wireshark identifizieren auch nessus
und dessen freies Pendant
openVAS angebotene
Services oder Schwachstellen auf Rechnern.
Fazit
In puncto Netzwerkberwachung gibt es auch
auf der Kommandozeile eine groe Anzahl von
ntzlichen Werkzeugen, die im Standardumfang der meisten Distributionen enthalten sind.
Viele alltgliche Probleme lassen sich damit mhelos und ohne Konfiguration lokalisieren und
beheben. Umfangreiche Werkzeuge wie Nagios
oder MRTG haben fr diesen Einsatzzweck ein
eher schlechtes Kosten-Nutzen-Verhltnis, dafr bieten sie aber die Mglichkeit von Langzeitanalysen, optimierten und gut automatisierbaren Vorgehensweisen. Fr einen schnellen Einsatz sind die in diesem Beitrag beschriebenen
Hilfsmittel jedoch oft hervorragend geeignet. Es
muss eben doch nicht immer MRTG oder Nagios sein. (mfe)
nnn
Infos
[1] Mtr: [http://www.bitwizard.nl/mtr]
www.linuxtechnicalreview.de
Der Autor
Christoph Wegener ist
promovierter Physiker
und seit vielen Jahren
mit der wecon.it-consulting (www.wecon.
net) als freier Berater
in den Bereichen Linux
und IT-Sicherheit unterwegs. Darber hinaus
ist er seit Anfang 2005
am europischen
Kompetenzzentrum fr
Sicherheit in der Informationstechnologie
(eurobits) in Bochum
ttig.
Berechenbare
Performance
Wer nicht bei einem Monitoring stehen bleiben will,
das nur feststellt, ob ein Dienst verfgbar ist oder
nicht, fr den stellt sich schnell die Frage: Was tun
mit den gesammelten Performancedaten? Man
kann sie interpolieren und mit statistischen Mitteln
Trends ableiten, klebt damit allerdings an den aktuellen Voraussetzungen, die man in die Zukunft
fortschreiben muss. Oder man simuliert auf dieser
Datengrundlage, wie sich beispielsweise eine Aufstockung der Hardware oder auch Lastnderungen
auswirken wrden. Wie das geht, demonstriert dieser Beitrag. Neil J. Gunther
www.linuxtechnicalreview.de
Grundlagen
Einfhrung
Eine passende Monitoring-Lsung ist ausgewhlt, installiert und konfiguriert jetzt luft sie
im Produktivbetrieb. Das aber ist nicht etwa das
Ende, sondern ein neuer Anfang und Ausgangspunkt. Erfolgreiches Performance-Management
umfasst nmlich mindestens drei Phasen: Das
Performance-Monitoring, die PerformanceAnalyse und das Performance-Modeling (Abbildung 1).
Diese Phasen sind eng miteinander verknpft.
So besteht eine wesentliche Voraussetzung zunchst darin, die Leistung zu messen und Performancedaten zu sammeln. Ohne Daten lassen
sich die Leistungseigenschaften der zu berwachenden Systeme und Applikationen nicht
quantifizieren. Dies ist auch die Aufgabe der
Monitoring-Phase.
Allerdings ist das Monitoring auf sich alleine
gestellt so sinnlos wie das bloe Starren auf die
tnzelnden Zeiger des Armaturenbretts eines
Autos. Um die Lage richtig einschtzen zu knnen, muss man durch die Windschutzscheibe
schauen, um andere Fahrzeuge in der Nhe zu
erkennen. Mit anderen Worten: Wer sich ausschlielich auf das Monitoring verlsst, der erhlt lediglich einen kurzfristigen Eindruck des
Systemverhaltens (Abbildung 2).
Der Blick aus dem Fenster erffnet dagegen
die Fernsicht. Doch je weiter weg ein Beobachtungsobjekt ist, desto schwieriger lsst sich mit
Bestimmtheit sagen, wie wichtig es einmal werden knnte.
Um aus Beobachtungswerten spter Prognosen
ableiten zu knnen, muss man die Leistungsdaten aus der berwachungsphase mit Zeitstempeln versehen und sie in einer Datenbank
speichern. Darauf baut die nchste Phase, die
Performanceanalyse auf, die den Admin in die
Lage versetzt, die gewonnenen Daten aus einer
historischen Perspektive zu betrachten, um in
ihnen Muster und Trends zu erkennen.
Auf das Performance-Modeling baut die Leistungsvorhersage auf, die Phase des PerformanceManagements, die einen in die Lage versetzt,
aus dem Fenster und in die Zukunft zu blicken.
Genau wie beim Wetterbericht (um ein weiteres Gleichnis zu bemhen) bentigt man dafr
zustzliche Tools, mit deren Hilfe man die Daten so aufbereitet, dass sie in Leistungsmodelle
eingehen knnen. Dazu ist etwas Mathematik
ntig. Aber es ist ja auch so gut wie unmglich,
das Wetter ohne Instrumente vorherzusagen,
nur indem man auf das Rascheln der Bltter im
Wind hrt.
Performance monitoring
Performance modeling
Performance analysis
Past
Present
Future
Abbildung 1: Die drei Phasen des Performance-Managements Monitoring, Analyse und Modeling sind eng miteinander verknpft.
www.linuxtechnicalreview.de
Grundlagen
stalten, wie man aus den bisherigen Ausfhrungen vielleicht vermuten wrde. In Wirklichkeit
ist es oft erstaunlich einfach.
Marschroute
Warteschlange
Neuankmmlinge
Wartende
Kunden
Warum Warteschlangen?
Buffer und Stacks sind in Computersystemen
allgegenwrtig. Beim Buffer handelt es sich um
eine Warteschlange, bei der die Reihenfolge des
Eintreffens von Anforderungen die Reihenfolge
ihrer Abarbeitung diktiert. Man spricht hier
auch von FIFO (first-in, first-out) oder FCFS
(first come, first served). Im Gegenzug dazu bedient ein Stack Anforderungen in LIFO-Reihenfolge (last-in, first-out); es handelt sich um eine
LCFS-Warteschlange (last-come, first served).
Kassierer
Abgefertigte
Kunden
Kunden
werden bedient
Symbol Metrik
PDQ
S
N
Z
R
R
X
Q
N
Input
Input
Input
Input
Output
Output
Output
Output
Output
Output
www.linuxtechnicalreview.de
Ankunftrate
Bedienzeit
User-Last
Denkzeit
Verweilzeit
Antwortzeit
Durchsatz
Auslastung
Warteschlangenlnge
Optimale Last
Grundlagen
R=
S
1 S
Man kann Gleichung (1) als sehr einfaches Performancemodell betrachten. Die Eingaben fr
das Modell stehen auf der rechten Seite, die Ausgaben auf der linken. Nach genau demselben
Schema funktionieren auch die Berechnungen
mit PDQ. Durch dieses einfache Modell sieht
man sofort, dass bei geringem Publikumsverkehr, die zum Passieren der Kasse bentigte Zeit
(die Verweilzeit) ausschlielich aus der eigenen
Servicezeit besteht. Wenn keine weiteren Personen eintreffen (= 0), dann fllt nur die Zeit an,
die man selbst bentigt, um die Waren eingeben
zu lassen und zu bezahlen.
Wenn das Geschft jedoch stark frequentiert ist,
sodass fr das Produkt S 1 gilt, dann steigt
auch die Verweilzeit sehr stark an. Das rhrt daher, dass sich die Lnge der Warteschlange aus
der Gleichung
Q = R
= S
Mit anderen Worten: Ersetzt man auf der rechten Seite der Gleichung die Verweilzeit R durch
die Servicezeit S, dann entspricht auf der linken
Seite die Ausgabemenge der Auslastung in Tabelle 1.
E
www.linuxtechnicalreview.de
Instantaneous throughput
Grundlagen
Ramp up
Steady-state
Ramp down
Elapsed time
Annahmen in PDQ-Modellen
Eine der grundlegenden Annahmen in PDQ ist,
dass sowohl die durchschnittliche Zwischenankunftszeit wie die durchschnittliche Bediendauer beide statistisch zufllig sind. Mathematisch gesehen bedeutet das, dass jede Ankunft
und jedes Bedienereignis zu einem PoissonProzess gehrt. Dann entspricht die Dauer dem
durchschnittlichen oder Mittelwert einer exponentialen Wahrscheinlichkeitsstreuung. Erlang
hat festgestellt, dass sich der Verkehr im Telefonnetz tatschlich dieser Anforderung entsprechend verhlt. Es gibt Methoden [5], mit deren
Hilfe sich feststellen lsst, wie gut gegebene Monitoring-Daten diese Anforderung erfllen.
Wenn diese Monitoring-Daten wesentlich von
den Bedingungen des Exponentials abweichen,
ist es vielleicht sinnvoller, auf einen ereignisbasierten Simulator auszuweichen, wie beispielsweise SimPy [3], mit dessen Hilfe sich eine grere Bandbreite an Wahrscheinlichkeitsstreuungen bercksichtigen lsst. Das Problem dabei
ist, dass die Programmierung und das Debuggen mehr Zeit in Anspruch nehmen (bei jeder
Simulation geht es gleichzeitig um die Programmierung); auerdem bentigen Sie lnger, um
sicherzustellen, dass Ihre Ergebnisse statistisch
gltig sind.
Ein weiterer Aspekt, der bei jeder wie auch immer gearteten Vorhersage strt, sind die Fehler,
die grundlegende Annahmen des Modells verursachen. Annahmen in Modellen verursachen
www.linuxtechnicalreview.de
Grundlagen
tatschlich systematische Fehler im Vorhersageprozess, und daher sollte man sich alle PDQ-Ergebnisse in Wirklichkeit als Streuung plausibler
Werte vorstellen. Was auerdem oft unbercksichtigt bleibt, ist die Tatsache, dass jede Quantifizierung fehlerbehaftet ist. Davon sind auch
die Monitoring-Daten betroffen entgegen der
landlufigen Meinung sind sie nicht gottgegeben. Aber wer kennt schon den exakten Fehlerbereich seiner Monitoring-Daten?
Weil es sich bei allen PDQ-Performance-Einund -Ausgaben um Durchschnittswerte handelt,
ist unbedingt sicherzustellen, dass es sich dabei
um zuverlssige Mittelwerte handelt. Die lassen
sich beispielsweise in der stabilen Phase (steady
state) eines Lasttests messen (Abbildung 5).
Der durchschnittliche Durchsatz im stabilen
Zustand (X) fr eine bekannte Benutzerlast (N)
ergibt sich, indem man Messungen ber einen
lngeren Zeitraum T nimmt und alle Anfahroder Herunterfahrzeiten aus den Daten eliminiert. Eine nominelle Zeit T kann beispielsweise
fnf bis zehn Minuten betragen, je nach Anwendung. Auch bei Industriestandard-Benchmarks
wie SPEC und TPC gilt die Anforderung, dass
alle gemeldeten Durchsatzergebnisse aus einem
stabilen Zustand gemessen stammen.
Nach diesem Schema kann man leicht ein einfaches Modell der Kasse in einem Lebensmittelmarkt nachbilden, wie das folgende Listing fr
die Perl-Variante von PDQ zeigt (Listing 1).
Im PDQ-Code (unten) befinden sich die InputWerte fr die Ankunftsrate () und die Bedienzeit (S):
= 3/ 4
S = 1.0
3 *1
= 0.75
4
1.0
R=
= 4.0 sec onds
3
1 * 1.0
4
15
pdq::SetTUnit("Sec");
02
# groxq.pl
16
# PDQ Bedienknoten erstellen (KassiererIn)
03
use pdq;
17
$pdq::nodes = pdq::CreateNode($ServerName, $pdq::
04
#------------------------- INPUTS
--------------------05
$ArrivalRate = 3/4; # Kunden je Sekunde
06
$ServiceRate = 1.0; # Kunden je Sekunde
07
$SeviceTime = 1/$ServiceRate;
08
$ServerName = "Cashier";
CEN, $pdq::FCFS);
18
# Die PDQ-Aufgabe mit Ankunftsrate erstellen
19
$pdq::streams = pdq::CreateOpen($Workload,
$ArrivalRate);
20
# Bedienrate je Kunden an der Kasse definieren
21
pdq::SetDemand($ServerName, $Workload,
09
$Workload = "Customers";
10
#------------------------ PDQ Model
------------------11
# Interne PDQ-Variable initialisieren
$SeviceTime);
22
#------------------------ OUTPUTS
---------------------
12
pdq::Init("Grocery Store Checkout");
23
# Das PDQ-Modell lsen
13
# Die von PDQ::Report() genutzten Einheiten
24
pdq::Solve($pdq::CANON);
anpassen
25
pdq::Report(); # einen vollstndigen PDQ-Report
14
pdq::SetWUnit("Cust");
generieren
www.linuxtechnicalreview.de
Grundlagen
Warteschlangensysteme
Q=
3
= 3.0 customers
4 * 4.0
Aus Platzgrnden kann hier lediglich die Ausgabeseite des generischen PDQ-Reports fr dieses
Modell gezeigt werden (Kasten PDQ-Resultate).
Die berechneten PDQ-Werte stimmen genau
mit den theoretischen Vorhersagen fr den
Durchsatz (X = ), die Auslastung (), die Warteschlangenlnge (Q) und die Verweildauer (R)
berein.
Nachdem die fundamentalen Begriffe bekannt
sind und PDQ als Tool fr die Berechnungen
eingefhrt ist, lassen sich diese Werkzeuge auch
auf Computerprobleme anwenden, etwa auf die
Vorhersage der Leistung individueller Hardwareressourcen wie der Ausfhrungswarteschlange der CPU (siehe Kapitel 4 in [5]) oder
eines Festplattengertetreibers. Die meisten
Lehrwerke zur Warteschlangentheorie bieten
Beispiele auf diesem Niveau.
Wichtiger fr die Vorhersage der Leistung von
echten Computersystemen ist allerdings die
PDQ-Resultate
01
*************************************
02
***** Pretty Damn Quick REPORT ******
03
*************************************
04
*** of : Sun Feb 4 17:25:39 2007
***
05
*** for: Grocery Store Checkout
***
06
*** Ver: PDQ Analyzer v3.0 111904 ***
07
*************************************
Sws
Sas
Sdb
08
****** RESOURCE Performance
1
2
4
7
10
20
Avg
0.0088
0.0085
0.0087
0.0095
0.0097
0.0103
0.0093
0.0021
0.0033
0.0045
0.0034
0.0022
0.0010
0.0028
0.0019
0.0012
0.0007
0.0005
0.0006
0.0006
0.0009
*******
09
Metric Resource Work Value Unit
10
--------- ------ ---- ----- ---11
Throughput Cashier Customers 0.7500 Cust/Sec
12
Utilization Cashier Customers 75.0000 Percent
13
Queue Length Cashier Customers 3.0000 Cust
14
Residence Time Cashier Customers 4.0000 Sec
www.linuxtechnicalreview.de
Grundlagen
E-CommerceApplikation in PDQ
N clients
Z = 0 ms
Requests
Responses
Dws
Das
Web Server
App Server
Ddb
DBMS Server
www.linuxtechnicalreview.de
Disk Array
Database
Server
Grundlagen
1
max(Sws , Sas , Sdb )
1
=
0, 0093
= 107.53 GPS
X
(GPS)
R
(s)
Sws
(%)
Sas
(%)
Sdb
(%)
1
2
4
7
10
20
24
48
85
100
99
94
0.039
0.039
0.044
0.067
0.099
0.210
21
41
74
95
96
97
8
13
20
23
22
22
4
5
5
5
6
6
Xmax =
Die Bedienzeiten fr jede Last zeigt Tabelle 3 zusammen mit den Durchschnittswerten in der letzten Zeile der Tabelle.
Naives PDQ-Modell
Der erste Versuch, die Leistungscharakteristik von Abbildung 7 nachzubilden, stellt jeden
Anwendungsserver einfach als eigenstndigen
PDQ-Knoten unter Einsatz der durchschnittlichen Bedienzeiten aus Tabelle 3 dar. In Perl::
PDQ wird die Parametrisierung der Warteschlangenknoten so, wie in Listing 2 zu sehen,
codiert.
Ein Diagramm des Durchsatzes, den dieses erste,
sehr einfache Modell vorhersagt, zeigt die Abbildung 9. Man sieht auf den ersten Blick, dass das
naive PDQ-Modell einen Durchsatz prophezeit,
der im Vergleich mit den real gemessenen Daten
der Testumgebung zu schnell absttigt.
Allerdings teilt uns PDQ ebenfalls mit, dass der
bestmgliche Durchsatz fr dieses System auf
Basis der gemessenen Bedienzeiten aus Tabelle
3 etwa 100 GPS betrgt. Diese Leistung wird
durch einen Ressourcenengpass begrenzt (die
Warteschlange mit der lngsten durchschnittlichen Bedienzeit), das ist im Beispiel der Frontend-Webserver. Im muss man lasten, dass der
maximale Durchsatz nicht ber einen Wert
steigen kann, der sich aus der Beziehung (10)
ergibt.
Der
hchstmgliche
Durchsatz
wird, wie sich hier zeigt, in unmittelbarer
Nhe des errechneten optimalen Belastungspunkts
N* erreicht (siehe dazu Tabelle 1):
N* =
$pdq::FCFS);
09
$pdq::nodes = pdq::CreateNode($node3, $pdq::CEN,
$pdq::FCFS);
04
...
10
...
05
# eine Warteschlange fr jede der drei Stufen
11
# Zeitbasis sind Sekunden, die in Millisekunden
erstellen
06
$pdq::nodes = pdq::CreateNode($node1, $pdq::CEN,
$pdq::FCFS);
07
5
08
$pdq::nodes = pdq::CreateNode($node2, $pdq::CEN,
ausgedrckt werden
12
pdq::SetDemand($node1, $work, 9.3 * 1e-3);
13
pdq::SetDemand($node2, $work, 2.8 * 1e-3);
14
pdq::SetDemand($node3, $work, 0.9 * 1e-3);
www.linuxtechnicalreview.de
Grundlagen
130
$think);
120
110
Auf diese Art werden neue Anforderungen verlangsamt ins System injiziert. Man spielt hier mit
der Bedenkzeit, als wre sie ein freier Parameter. Der positive Wert von Z = 0.028 Sekunden
stimmt nicht mit den Einstellungen berein,
die beim Lasttest tatschlich verwendet wurden, aber er kann einen Hinweis darauf geben,
in welcher Richtung nach einem verbesserten
PDQ-Modell zu suchen ist.
Wie Abbildung 10 zeigt, verbessert die positive
Bedenkzeit das Durchsatzprofil entscheidend.
Versteckte Latenzen
bercksichtigen
Als nchsten Trick fgt man dem PDQ-Modell
aus Abbildung 11 Dummy-Knoten hinzu. Allerdings gibt es Bedingungen, die von den Bedienanforderungen der virtuellen Knoten zu erfllen sind. Die Bedienanforderung eines jeden
Dummy-Knotens ist so zu whlen, dass sie die
Bedienanforderung des Engpassknotens nicht
bersteigt.
Darber hinaus ist die Anzahl der DummyKnoten so zu whlen, dass die Summe der Serviceanforderungen einen Wert von Rmin = R(1)
nicht bersteigt, sofern keine Konkurrenz auftritt, das heit fr eine Einzelanforderung. Wie
sich herausstellt, lassen sich diese Bedingungen
erfllen, wenn man zwlf einheitliche DummyKnoten einfhrt, von denen jeder eine Serviceanforderung von 2,2 ms aufweist. Die nderungen des entsprechenden PDQ-Codes sehen
folgendermaen aus:
use constant MAXDUMMIES => 12;
Throughput (X)
90
80
70
60
50
40
Xpdq
30
Xdat
20
10
0
0
10
12
14
16
18
20
Clients (N)
N*=
130
120
110
100
Throughput (X)
100
90
80
70
60
50
40
30
20
Xdat
10
Xpdq
0
0
10
12
14
16
18
20
Clients (N)
www.linuxtechnicalreview.de
10
Grundlagen
N clients
Z = 0 ms
Requests
Responses
Dws
Das
Web Server
App Server
Ddb
DBMS Server
Dummy Servers
Lastabhngige Server
Bestimmte Aspekte des physikalischen Systems
wurden nicht gemessen, sodass die Validierung
Listing 5: E-Commerce-Modell
01
#! /usr/bin/perl
02
# ebiz_final.pl
03
use pdq;
04
use constant MAXDUMMIES => 12;
05
# Hash AV pairs: (in vusers laden, durchsatz in
gets/sec)
06
%tpdata = ( (1,24), (2,48), (4,85), (7,100),
(10,99), (20,94) );
07
@vusers = keys(%tpdata);
08
$model = "e-Commerce Final Model";
09
$work = "ebiz-tx";
10
$node1 = "WebServer";
11
$node2 = "AppServer";
12
$node3 = "DBMServer";
13
$think = 0.0 * 1e-3; # wie beim testsystem
14
$dtime = 2.2 * 1e-3; # dummy-bedienzeit
15
# Header fr benutzerspezifischen Report
16
printf("%2s\t%4s\t%4s\tD=%2d\n", "N", "Xdat",
"Xpdq", MAXDUMMIES);
17
foreach $users (sort {$a <=> $b} @vusers) {
18
pdq::Init($model);
19
$pdq::streams = pdq::CreateClosed($work, $pdq::
TERM, $users,
20
$think);
11
21
$pdq::nodes = pdq::CreateNode($node1, $pdq::CEN,
$pdq::FCFS);
22
$pdq::nodes = pdq::CreateNode($node2, $pdq::CEN,
$pdq::FCFS);
23
$pdq::nodes = pdq::CreateNode($node3, $pdq::CEN,
$pdq::FCFS);
24
# Zeitbasis in Sekunden in Millisekunden
ausgedrckt
25
pdq::SetDemand($node1, $work, 8.0 * 1e-3 *
($users ** 0.085));
26
pdq::SetDemand($node2, $work, 2.8 * 1e-3);
27
pdq::SetDemand($node3, $work, 0.9 * 1e-3);
28
# Dummy-Knoten mit entsprechenden Bedienzeiten
erstellen ...
29
for ($i = 0; $i < MAXDUMMIES; $i++) {
30
$dnode = "Dummy" . ($i < 10 ? "0$i" : "$i");
31
$pdq::nodes = pdq::CreateNode($dnode, $pdq::CEN,
$pdq::FCFS);
32
pdq::SetDemand($dnode, $work, $dtime);
33
}
34
pdq::Solve($pdq::EXACT);
35
printf("%2d\t%2d\t%4.2f\n", $users,
$tpdata{$users},
36
pdq::GetThruput($pdq::TERM, $work));
37
}
www.linuxtechnicalreview.de
Grundlagen
fhren, wie sie Abbildung 13 zeigt. Die sich daraus ergebende Potenzgesetzgleichung lautet:
120
Throughput (X)
Dws ( N ) = 8.0000 N
0.0850
140
100
80
60
40
Xdat
Xpdq
Die angepasste Ausgabe des fertigen PDQ-Modells zeigt Tabelle 3. Sie zeugt von einer guten
bereinstimmung mit den gemessenen Daten
fr D = 12 Dummy-PDQ-Knoten.
Die Auswirkung auf das Durchsatzmodell lsst
sich in Abbildung 14 erkennen. Die mit Xpdq2
gekennzeichnete Kurve zeigt den vorhergesagten bersteuerten Durchsatz auf Basis des
lastabhngigen Servers fr das Webfrontend,
und die Vorhersagen liegen locker innerhalb des
Fehlerbereichs der gemessenen Daten.
In diesem Fall bringt es wenig, PDQ fr die Vorhersage einer Last einzusetzen, die oberhalb der
gemessenen Last von N = 20 Clients liegt, weil
der Durchsatz nicht nur gesttigt ist, sondern
auch rckgngig. Nachdem nun ein PDQ-Modell existiert, das mit den Testdaten validiert
wurde, kann man jetzt alle erdenklichen Waswre-wenn-Szenarien durchspielen.
20
SXB
0
0
Xdat
Xpdq D=12
1
2
4
7
10
20
24
48
85
100
99
94
26.25
47.41
77.42
98.09
101.71
96.90
10
12
14
16
18
20
S
1 m
10
Service Demand
Tabelle 5: Modellresultate
Clients (N)
Multiple Server
Ein Szenario auerhalb der Computerwelt, das
man mithilfe der Warteschlange mit multiplen
UXB
9.5
y = 8.3437x 0.0645
R2 = 0.8745
9
Data_Dws
8.0 N^{0.085}
8.5
Power (Data_Dws)
8
0
10
15
20
Clients (N)
www.linuxtechnicalreview.de
12
Grundlagen
130
120
110
Throughput (X)
100
90
80
70
60
50
Xdat
40
Xpdq1
30
UXB
20
SXB
10
Xpdq2
0
0
10
12
14
16
18
20
Clients (N)
Es handelt sich um genau das Warteschlangenmodell, das Erlang vor 100 Jahren entwickelt
hat. Damals stellte jeder Server eine Hauptleitung im Telefonnetz dar.
Multiple Aufgaben
Was in Wirklichkeit sehr hufig vorkommt, ist,
dass eine einzelne Ressource, etwa ein Datenbankserver, mit verschiedenen Transaktionstypen umgehen muss. Zum Beispiel kann der
Kauf eines Flugtickets oder die Buchung eines
Hotelzimmers im Internet ein halbes Dutzend
unterschiedliche Transaktionen erfordern, bevor das Ticket ausgestellt oder das Zimmer endlich reserviert ist. Situationen dieser Art lassen
sich wie folgt mit PDQ abbilden.
Man betrachte den einfacheren Fall von drei unterschiedlichen Transaktionstypen, die durch
die Farben Rot, Grn und Blau gekennzeichnet werden. Jede dieser eingefrbten Aufgaben
kann auf eine gemeinsam genutzte Ressource
zugreifen, zum Beispiel einen Datenbankserver.
Im Warteschlangenparadigma (Abbildung 16)
wird jede der bunten Aufgaben durch die unter-
13
www.linuxtechnicalreview.de
Grundlagen
Listing 3: erlang.pl
01
#! /usr/bin/perl
02
# erlang.pl
03
## Input-Parameter
04
$servers = 8;
05
$erlangs = 4;
06
if($erlangs > $servers) {
07
print "Error: Erlangs exceeds servers\n";
08
exit;
09
}
10
$rho = $erlangs / $servers;
11
$erlangB = $erlangs / (1 + $erlangs);
12
for ($m = 2; $m <= $servers; $m++) {
13
$eb = $erlangB;
14
$erlangB = $eb * $erlangs / ($m + ($eb * $erlangs));
15
}
16
## Ausgabe der Ergebnisse
17
$erlangC = $erlangB / (1 - $rho + ($rho * $erlangB));
18
$normdwtE = $erlangC / ($servers * (1 - $rho));
19
$normdrtE = 1 + $normdwtE; # Exact
20
$normdrtA = 1 / (1 - $rho**$servers); # ca.
www.linuxtechnicalreview.de
14
Grundlagen
Gemischte Workloads
01
$pdq::nodes = pdq::CreateNode("DBserver", $pdq::CEN, $pdq::
FCFS);
02
$pdq::streams = pdq::CreateOpen("Red", $ArrivalsRed);
03
$pdq::streams = pdq::CreateOpen("Grn", $ArrivalsGrn);
04
$pdq::streams = pdq::CreateOpen("Blu", $ArrivalsBlu);
05
pdq::SetDemand("DBserver", "Red", $ServiceRed);
06
pdq::SetDemand("DBserver", "Grn", $ServiceGrn);
07
pdq::SetDemand("DBserver", "Blu", $ServiceBlu);
08
...
nOffene
Der Autor
Neil Gunther, M.Sc.,
Ph.D. ist ein international anerkannter
Consultant und
Grnder der Firma
Performance Dynamics Company
(http://www.perfdynamics.com).
Nach einer Ausbildung in theoretischer Physik nahm
er verschiedene
Forschungs- und
Management-Aufgaben wahr, unter
anderem an der
San Jose State University und bei der
NASA (Voyager- und
Galileo- Missionen.)
Dr. Gunther ist Mitglied von AMS, APS,
ACM, CMG, IEEE und
INFORMS.
15
Fazit
Performance-Modeling ist eine anspruchsvolle
Disziplin, die man am besten durch stndige
Wiederholung trainiert. Ein Groteil der Bemhungen kreisen dabei immer wieder um die
Erstellung und Validierung eines Modells der zu
untersuchenden Umgebung und ihrer Anwendungen. Sobald das PDQ-Modell erst einmal
validiert ist, muss es nicht immer wieder aufs
Neue gebaut werden. Im Allgemeinen reicht
dann etwas Tuning und schon lassen sich Performance-nderungen durch Hardwareupgrades oder durch neue Software bercksichtigen.
Die dreistufige E-Commerce-Applikation, die
dieser Beitrag beispielhaft nachgebildet hat, liefert einen recht guten Ausgangspunkt, auf dem
sich aufbauen lsst, um multiple Server und zustzliche Aufgaben zu bercksichtigen.
Eines der erstaunlichsten Ergebnisse des PDQModells ist die Tatsache, dass es den analysierenden Admin bestimmte Effekte etwa versteckte
Latenzen erkennen lsst, die in den berwachten Daten fr ihn sonst nicht ersichtlich waren.
Aber das vielleicht allerwichtigste Resultat des
PDQ-Einsatzes sind gar nicht die Leistungsmodelle an sich, sondern es ist die Tatsache, dass
der PDQ-Modellierungsprozess einen organisatorischen Rahmen fr die Beurteilung aller
Leistungsdaten liefert, in dem Erkenntnisse aus
dem Monitoring bis hin zur Trendvorhersage
zusammenflieen knnen. (jcb)
nnn
Infos
[1] Kenneth Hess, Monitoring Linux performance
with Orca: [http://www.linux-magazine.com/
issue/65/Linux_Performance_Monitoring_With_
Orca.pdf]
[2] R, Open Source statistical analysis package:
[http://www.r-project.org]
[3] SimPy, Open Source simulator written in Python:
[http://sourceforge.net/projects/simpy/]
[4] N. J. Gunther, Guerrilla Capacity Planning,
Springer-Verlag, 2007
[5] N. J. Gunther: Analyzing Computer System Performance with Perl::PDQ, Springer-Verlag, 2005
[6] PDQ Download: [http://www.perfdynamics.
com/Tools/PDQcode.html]
[7] Linux-Stresstesttools: [http://www.
opensourcetesting.org/performance.php]
www.linuxtechnicalreview.de
SNMP
Esperanto der Devices
Ein einfaches Protokoll ermglicht es, von den
verschiedensten Gerten an unterschiedlichen
Orten effizient Status- und Performancedaten
zu sammeln. Auch in eigene Software lsst sich
SNMP leicht einbinden. Robert Leibl, Dirk von Suchodoletz
www.linuxtechnicalreview.de
Grundlagen
www.linuxtechnicalreview.de
des Baumes wird so durch eine Folge aus Ziffern und Punkten reprsentiert, dem so genannten Object Identifier (OID)
etwa 1.3.6.1.1.2.3. Jedes Gert lsst sich ber einen solchen
Identifier ansprechen, wobei zur Vereinfachung des Zugriffes
auch Namen erlaubt sind. Diese dienen jedoch wie beim
DNS eher der Bequemlichkeit des menschlichen Benutzers.
Der SNMP-Datenraum ist grozgig und universell erweiterbar angelegt. Weite Teile sind fr zuknftige Ergnzungen
reserviert und fr die mgliche Vereinigung mit anderen
baumartigen Datenstrukturen freigehalten, wie sie beispielsweise LDAP definiert.
Die obersten Ebenen des Datenbaumes sind fr die Definition der Berechtigungen einzelner Gruppen reserviert. Der
spannendere Abschnitt des SMI-Trees startet mit OID 1.3.6.1,
die den Namen iso.org.dod.internet trgt. Hier finden sich
die System-, Interface-, TCP/IP-, hostspezifische und weitere
herstellereigene Zweige.
Ansehen kann man sich die MIBs notfalls mit einem Texteditor, wirklich komfortabel wird es jedoch erst mit grafischen
Tools.
Grundlagen
Alles im Angebot
Abbildung 1: Die Kommandos snmpnetstat und snmpdf liefern dieselben Werte wie ihre lokalen Namensvettern, jedoch von einem entfernten
Host via SNMP.
Linux-SNMP
Das Net-SNMP-Paket bildet derzeit den Standard im Linux-Umfeld. Es ist aus einem Projekt
der University of California in Davis hervorgegangen. Das Paket steht unter der GPL und ist
ber die Projekthomepage auf Sourceforge [1]
beziehbar. Dieser Mhe muss sich ein Benutzer
der Standarddistributionen nur selten unterziehen, da das Paket blicherweise schon mitgeliefert wird. Net-SNMP implementiert die
Funktionalitt von SNMPv3 und ist modular
mittels AgentX erweiterbar. Zur Darstellung der
von SNMP-Agenten gelieferten Werte existieren
eine ganze Reihe von Tools, etwa MRTG [2].
Die wohl bekannteste Monitoring-Suite Nagios
bringt auch eine SNMP-Komponente mit (mehr
dazu in weiteren Artikeln dieses Hefts).
Der Agent snmpd, der auf der zu beobachtenden Maschine luft, wird mittels /etc/
snmp/snmpd.conf konfiguriert und in der Regel durch ein Runlevel-Skript gestartet. Je nach
Distribution kann die installierte Konfigurationsdatei eher sparsam ausfallen, jedoch gibt es
blicherweise im Dokubereich ein ausfhrliches
Beispiel.
www.linuxtechnicalreview.de
Grundlagen
Mit der zunehmenden Verbreitung von Voiceover-IP und der Ablsung klassischer Telefonanlagen spielen Asterisk-Server in Unternehmen
und Organisationen eine immer grere Rolle.
www.linuxtechnicalreview.de
Grundlagen
/etc/asterisk/res_snmp.conf ;U
Konfigurationsdatei fr res_snmp
[general]
subagent = yes
enabled = yes
Listing 1: snmpexample.c
001
#include <net-snmp/net-snmp-config.h>
002
#include <net-snmp/net-snmp-includes.h>
003
#include <string.h>
session.community_len = strlen(session.
community);
004
037
005
/*
038
039
tutorial-5/toolkit/index.html
/*
* Anschlieend die Sitzung ffnen.
040
*/
007 */
041
SOCK_STARTUP;
008
042
ss = snmp_open(&session);
009
int main(int argc, char ** argv)
043
010
{
044
if (!ss) {
011
045
snmp_perror("ack");
012
046
snmp_log(LOG_ERR, "Verbindung
013
014
015
oid anOID[MAX_OID_LEN];
048
016
049
017
050
018
019
int status;
020
int count=1;
021
022
023
025
026
snmp_sess_init( &session );
027
029
/*
* Nach Initialisierung setzt man die
/*
* Fr die Datenabfrage ist zunchst ein
053
024
028
051
exit(2);
}
*/
Authentifizierung */
036
054
* geschrieben.
055
Systems:
056
057
*/
system.sysDescr.0
058
059
pdu = snmp_pdu_create(SNMP_MSG_GET);
060
read_objid(".1.3.6.1.2.1.1.1.0", anOID,
&anOID_len);
061
031
062
032
*/
063
064
033
session.peername = strdup("localhost");
034
session.version = SNMP_VERSION_1;
035
session.community = "public"; /*
/*
get_node("sysDescr.0", anOID,
&anOID_len);
065
read_objid("system.sysDescr.0",
www.linuxtechnicalreview.de
Grundlagen
die Ausgabe von snmpwalk um etliche Zeilen, die mit einem wenig sprechenden Prefix
SNMPv2-SMI::enterprises.22736 anfangen.
Damit sieht der Anfrager zwar schon die Ergebnisse des AgentX mit eingebundenem Asterisk,
denn enterprises.22736 ist einfach der OID
fr die Asterisk-Firma Digium. Diese wiederum
liefert netterweise ihre MIB schon mit. Sie liegt
in den Asterisk-Sourcen unterhalb von doc
und muss zu den anderen MIBs kopiert werden:
cp /tmp/asterisk-1.4.0/doc/asterisk-mib.U
txt/usr/share/snmp/mibs
cp /tmp/asterisk-1.4.0/doc/digium-mib.U
txt/usr/share/snmp/mibs
092
*/
067
068
093
snmp_add_null_var(pdu, anOID, anOID_
len);
/*
071
*/
&response);
078
else
097
099
*/
104
/*
for(vars = response->variables;
print_
/*
* eigene Ausgabe von String
Daten
088
109
110
112
/*
113
* Aufraeumen:
114
'response'
*/
115
for(vars = response->variables;
snmp_sess_
111
087
else
perror("snmpget", ss);
084
086
snmp_
errstring(response->errstat));
108
085
fprintf(stderr,
"Fehler!\nGrund: %s\n",
107
*/
082
083
if (status == STAT_SUCCESS)
105
106
Variablen
081
/*
* Fehler. Anzeigen des Fehlers
*/
if (status == STAT_SUCCESS &&
080
}
} else {
102
103
079
printf("Wert Nr.
101
* Verarbeiten der Antwort vom Server
response->errstat == SNMP_ERR_NOERROR) {
if (vars->type == ASN_
OCTET_STR) {
116
117
*)malloc(1 + vars->val_len);
memcpy(sp,
vars->val.string, vars->val_len);
www.linuxtechnicalreview.de
118
119
090
091
096
100
/*
077
098
076
free(sp);
095
074
075
printf("Wert Nr.
069
070
sp[vars->val_
len] = '\0';
snmp_free_pdu(response);
snmp_close(ss);
120
121
SOCK_CLEANUP;
122
return (0);
123
} /* main() */
Grundlagen
erfolgt in der Datei snmpd.conf. Die notwendige Zeile sieht so aus: exec <Pfad> <IDString>
<Befehl> <Parameter>, also zum Beispiel:
exec 1.3.6.1.2.3.4.5 FancyScript U
/path/to/fancyscript.sh /file/as/input
Kommando-Referenz
Programme wie snmpnetstat, snmpstatus
oder snmpdf vereinfachen wichtige Standardanfragen, beispielsweise nach offenen TCP-Ver-
Makefile fr snmpexample.c
01
CC = gcc
02
03
OBJS = snmpexample.o
04
LIBS = `net-snmp-config --libs`
05
TARGET = snmpexample
06
MIBs erweitern
Standard-MIBs beschreiben eine Vielzahl von
Informationen, doch reicht das oft nicht aus.
Deshalb lassen sich SNMP-Agenten um eigene
MIBs erweitern. Net-SNMP bietet zwei Varianten: QuicknDirty oder langsam aber sauber.
Im ersten Fall kann man Net-SNMP dazu bringen, einen bestimmten Befehl auszufhren, sobald ein bestimmter Pfad (OID) abgefragt wird.
Der Befehl darf eine Zeile Ausgabe erzeugen, die
dann zurckgeliefert wird. Die Konfiguration
07
CFLAGS = -I. `net-snmp-config
--cflags`
08
09
all: $(TARGET)
10
11
snmpexample: $(OBJS)
12
$(LIBS)
13
clean:
14
www.linuxtechnicalreview.de
rm -f $(OBJS) $(TARGET)
Grundlagen
C der Standardweg
Abbildung 4: JMibBrowser [8] ist ein in Java programmierter, einfach gehaltener MIB-Browser.
Abbildung 5: Der Java-basierte BlackOwl MIB-Browser [9] bringt einen groen Funktionsumfang und einen eigenen Installer mit.
www.linuxtechnicalreview.de
Grundlagen
Die Autoren
Dirk von Suchodoletz
arbeitet derzeit als
Assistent am Lehrstuhl
fr Kommunikationssysteme am Institut fr Informatik der Universitt
Freiburg.
Robert Leibl ist Student
am Institut fr Informatik
an der Universitt Freiburg. Er schreibt dort
derzeit an seiner Diplomarbeit zum Thema USB
over Ethernet.
my %ifTable = %$result;
foreach my $key U
(oid_lex_sort(keys %ifTable)) {
printf( "%s --> %s\n", $key, U
$ifTable{$key});
}
Infos
[1] Homepage des NetSNMP-Projekts:
[http://netsnmp.sourceforge.net]
[2] MRTG-Homepage: [http://www.mrtg.org]
[3] IETF-RFCs zu SNMP: unter anderem 1065,
1155, 1157, 1212, 1213, 1215 (Version 1),
1441-46, 1450, 1901 bis 1910 (Version 2)
und 2570 bis 2576 (Version 3), 3410, 3417,
4789
[4] Agent erweitern: [http://www.net-snmp.org/
dev/agent/]
[5] SNMP-Modul im CPAN: [http://search.
cpan.org/~dtown/Net-SNMP-5.2.0/lib/Net/
SNMP.pm]
[6] Repository von Perl-Modulen: [http://cpan.org]
[7] GTK basierter MIB-Browser:
[http://www.kill-9.org/mbrowse/]
[8] Einfacher MIB-Browser: [http://www.dwipal.
com/mibbrowser.htm]
[9] Komfortables Java-Tool: [http://blackowl.
asclep.com]
Listing 2: snmpget.pl
01
#!/usr/bin/perl -w
03
# siehe auch: http://search.cpan.org/~dtown/
Net-SNMP-5.2.0/lib/Net/SNMP.pm
26
# umstndlich aus, wird bei der Abfrage mehrere
Werte jedoch komfortabel, da
27
# eine Array-Referenz auf einen eigenen Array
04
05
use strict;
06
use warnings;
07
08
use Net::SNMP;
09
10
# Verbindung mit dem Server herstellen und die
Session ffnen.
11
# Die Parameterbergabe erfolgt im bekannten
'Dash'-Stil als Hash-Referenz.
12
my ($session, $error) = Net::SNMP->session(
13
14
15
);
30
);
31
32
if (!defined($result)) {
33
34
$session->close;
35
exit 1;
36
}
37
38
# Behandlung der empfangenen Werte. Die Werte
sind in einem Hash mit der OID
39
# als Schlssel abgelegt.
16
17
if (!defined($session)) {
25
# Anforderung der Werte. Die bergabe der
gewnschen OIDs sieht zunchst
02
18
19
exit 1;
40
printf( "System uptime fuer '%s' ist %s\n",
41 $session->hostname,
42 $result->{$node}
43
);
20
}
44
21
45
$session->close;
22
# Wir wollen den Wert von sysUptime
46
23
my $node = '1.3.6.1.2.1.1.3.0';
47
exit 0;
24
48
__END__
www.linuxtechnicalreview.de