Schwellwerte gegen Datenreihen vergleichen

2. März 2010

Das in dem Artikel Monitoring the Area Under the Curve skizzierte Verfahren zur besseren Erkennung von Alarmsituationen hatte zunächst einmal ein sehr einfaches Perl-Modul zur Folge, das einfach ein zeitlich definiertes Fenster an vorhergehenden Messwerten mit-berücksichtigt und daraus den Durchschnitt berechnet. Dieses Verfahren, das vor allem in der Finanzmathematik als Simple Moving Average (SMA) bezeichnet wird, hat aber so seine Tücken: Alle mir bisher untergekommenen Implementierungen gehen davon aus dass die Messwerte regelmäßig eintreffen. Das ist ok, wenn wir von Börsenkursen ausgehen, die gibt es immer und wenn es sie einmal nicht gibt, dann wurde nicht gehandelt und damit sind diese Perioden einfach nicht zu berücksichtigen. Das geht bei den Messwerten im IT-Umfeld nicht. Stellen wir uns folgende (natürlich vereinfachte) Messreihe  vor:

Uhrzeit   Messwert
------------------
12:00 --> 25MB/s
12:01 --> 24MB/s
Ausfall des Monitoring (Leitung, …)
13:00 --> 2 MB/s
13:01 --> 3 MB/s

Das ergibt um 13:01 einen “geglättenen” Durchschnitt von 13,5 MB/s – whow, da wäre der nicht geglättete aber um einiges näher an  der Realität.

Das Problem bei herrkömmlichen SMA-Implementierungen ist, dass einfach die letzten x-Werte genommen werden, egal von wann die sind. Da ist die Implementierung in dem von mir erstellten Modul schon besser, denn dort werden nur die die Werte der letzten x Stunden verwertet. Extremfälle, wie dass Messwerte die mehrere Monate alt sind noch mit einfliessen, können somit ausgeschlossen werden. Aber auch diese Form der SMA-Berechnung ist suboptimal, denn um bei dem obigen Beispiel zu bleiben: Ein 2-h Fenster darauf angewendet, würde immer noch den viel zu hohen Wert von 13,5 ergeben.

Abhilfe könnte ein anderes Verfahren bieten: Der Exponential Moving Average (EMA) gewichtet die aktuelleren Messwerte stärker. Das Problem bei den vorliegenden Implementierungen (egal ob Perl-Module oder R): Der Zeitfaktor fliesst nicht ein – d.h. bei unregelmäßig eingetroffenen Messwerten kommt es unter Umständen zu bösen Verzerrungen.

Ein besonders schöner Ansatz wäre Holt-Winters (Exponential Smooting), das in der Wirtschaft gerne für die Vorhersagen zu erwartender Nachfrage nach einem bestimmten Produkt oder ähnlichem verwendet wird. Der besondere Charm liegt in der Möglichkeit sowohl Trends als auch saisonale Faktoren einfliessen zu lassen. Während mir das Berücksichtigen von Trends bei der Alarmierung (nicht vergessen, wir befassen uns gerade mit Alarmen und nicht mit Trendanalyse!) im Bereich des Systemmonitoring eher nicht sinnvoll erscheinen ist es natürlich sehr spannend, die unterschiedliche Basisauslastung um Laufe eines Tages oder einer Woche bei den Schwellwerten zu berücksichtigen. Und noch etwas spricht für Holt-Winters: Die rrd-tools haben diese schon implementiert – ich denke, da sollte man sich noch genauer damit befassen.

Aberrant Behavior Detection with Holt-Winters Forecasting

Time series Forecasting using Holt-Winters Exponential Smoothing


Autodiscovery für Perf-Counter

24. Februar 2010

Mit dem Plugin check_netapp_ops.pl lassen sich verschiedene Systemcounter wie beisielsweise total_ops, nfs_ops, net_data_sent eines NetApp Filers überwachen und bei Überschreiten Alarme via Nagios versenden. Doch nicht alle Counter sind auf jedem System vorhanden und nicht alle vorhandenen Counter werden vom Plugin unterstützt. Das Herausfinden der Schnittmenge aus vorhandenen und unterstützten Countern war eine eher mühsame Aufgabe bei der Implementierung der Plugins.

In der Version 2 verfügt das diesem Check nachfolgende Check-Modul Ops.pm diese Aufgabe für den Admin: Durch Angabe von explore anstelle eines Counternamens, bekommt man eine Liste aller verfügbaren und vom Plugin auch überwachbaren Counter  - gleich zusammen mit der Maßeinheit.

Hier ein Beispiel:

$ ./check_netapp.pl Ops -f auth -H toaster01 -z explore
System Performance Counters available _and_ supported on this filer:
================================================================================
Counter-Name                Description (Unit, Privilege)
--------------------------------------------------------------------------------cifs_ops                    CIFS operations per second (per_sec, basic)
nfs_ops                     NFS operations per second (per_sec, basic)
net_data_sent               Network KB sent per second (kb_per_sec, basic)
total_ops                   Total operations per second (per_sec, diag)
net_data_recv               Network KB received per second (kb_per_sec, basic)
write_ops                   Write operations per second (per_sec, basic)
fcp_ops                     FCP operations per second (per_sec, basic)
iscsi_ops                   iSCSI operations per second (per_sec, basic)
read_ops                    Read operations per second (per_sec, basic)
disk_data_written           Disk KB written per second (kb_per_sec, basic)
http_ops                    HTTP operations per second (per_sec, basic)
streaming_pkts              Netcache streaming media packets serviced per
second (per_sec, diag)
disk_data_read              Disk KB read per second (kb_per_sec, basic)
cifs_ops                    CIFS operations per second (per_sec, basic) nfs_ops                     NFS operations per second (per_sec, basic) net_data_sent               Network KB sent per second (kb_per_sec, basic) total_ops                   Total operations per second (per_sec, diag) net_data_recv               Network KB received per second (kb_per_sec, basic) write_ops                   Write operations per second (per_sec, basic) fcp_ops                     FCP operations per second (per_sec, basic) iscsi_ops                   iSCSI operations per second (per_sec, basic) read_ops                    Read operations per second (per_sec, basic) disk_data_written           Disk KB written per second (kb_per_sec, basic) http_ops                    HTTP operations per second (per_sec, basic) streaming_pkts              Netcache streaming media packets serviced per                            second (per_sec, diag) disk_data_read              Disk KB read per second (kb_per_sec, basic)
http://www.netapp-monitoring.info/de/nagios-plugins.html

Monitoring “The Area Under the Curve”

17. Februar 2010

Ok, der Titel dieses Artikels klingt für erfahrene Systemüberwacher ein wenig fremd – doch wir betreten hier Neuland und daher bitte ich um ein wenig Geduld.

Um was geht es: Nach Installation eines Monitoring Systems geht es ans Kalibrieren, also darum die Schwellwerte so einzustellen, dass keine alarmierungswürdigen Ereignisse übersehen werden und andererseits die Admins nicht von Fehlalarmen überschwemmt werden. Das ist eine nicht ganz einfache Tätigkeit, die zunächst einmal eine genaue Kenntnis der überwachten Systeme verlangt. Hinzu kommt, dass die Monitoring Systeme über Funktionen verfügen, kurzfristige Engpässe von dauerhaften Problemfällen zu unterscheiden.

Nagios beispielsweise versendet erst dann eine Alarmmeldung, wenn ein Gerät trotz mehrfacher Versuche nicht erreicht werden konnte bzw. ein Schwellwert mehrfach hintereinander überschritten wurde. Ein feiner Mechanismus, wenne s um die Erreichbarkeit geht. Doch bei stark schwankenden Messwerten, wie zum Beispiel den operations per second wird es schwierig.

Folgend zwei (der Erklärung halber vereinfachte Graphen). zunächst einmal eine normale Auslastung – gelegentlich ist was los, dann aber wieder Ruhe.

Auslastung-Graph mit Spikes

normale Belastung - mit gelegentlichen Ausreissern

Wo würden wir hier die Schwellwerte setzen? Bereits bei 100 (gelbe Linie) und bis hinauf zu 150 haben wir gute Chancen auf mehrfache Fehlalarme in der dargestellten Periode. Erst ab 200 (rote Linie) wäre mit einiger Sicherheit Ruhe.

Doch nun passiert folgendes: Ein Prozess zuckt aus und sorgt für eine entsprechend hohe Dauerbelastung – in der Graphik wäre diese Anomalie auf den ersten Blick zu erkennen.

Auslastunggraphik mit großer Fläche unter der Kurve

Dass hier im mittleren Bereich mächtig viel los war, sehen wir auf den ersten Blick - Nagios übersieht das aber.

Ein Monitoringsystem wie z.B. Nagios würde das aber übersehen. Denn wie wir oben festgestellt haben, würden Schwellwerte von 100 (gelbe Linie) zu permanenten Fehlalarmen im Normalbetrieb führen.

Also versuchen wir einen Kompromiss: Setzen wir den Schwellwert auf 150. Wie so oft bei Kompromissen, haben wir nun vor allem die Nachteile beider Fälle: Im Normalbetrieb die Fehlalarme  (1-2 in unserem Beispiel) und die Abweichung in Sachen Grundbelastung im zweiten Graphen erkennt das System trotzdem nicht.

Der Grund ist eigentlich einfach: Die von Nagios angebotene Methode des “rechecking” um Fehlalarme zu vermeiden, ist gut bei verbindungsorientierten Checks. Wenn es um Messwerte geht – vor allem wenn diese sehr volatil sind – ist diese Methode eigentlich ungeeignet. Hier bräuchten wir ein Messverfahren, dass die Area under the curve (engl. Fläche unter der Kurve, abgk. AUC) über einen längeren Zeitraum ermittelt und auf dieser Grundlage alarmiert.

Für die derzeit in Entwicklung befindliche Version 2 der Nagios Plugins für NetApp planen wir daher eine Funktion, die es ermöglicht, Schwellwerte auch für langfristige Trends zu setzen. Damit kann uns das Nagios rufen, wenn ein Performance-Graph aussergewöhnliche Maße annimmt und wir der Sache vielleicht auf den Grund gehen sollten.

Das Monitoring auf AUC-Basis ist meiner Meinung nach das für manche Fälle besser geeignete Verfahren und dann dem Monitoring von Einzelwerten überlegen.

Sicherlich wird es auch damit eine Kunst bleiben, ein Nagios richtig zu tunen – doch mit speziellen Auswertungsverfahren für volatile Messwerte, wird es leichter sein, sich dem Idealzustand anzunähern.

Wikipedia zu AUC


Nagios-Plugins für NetApp stabil

17. Februar 2010

So, jetzt ist es so weit: Die erste, sorgfältig getestete und wahrlich stabile Version der Nagios-Plugins für NetApp ist offiziell erhältlich.
Und schon arbeiten wir daran, die zahlreichen Ideen und Vorschläge aus dem Kundenfeedback einzuarbeiten – die Version 2.x ist bereits im ALPHA-Stadium.

http://www.netapp-monitoring.info/de/nagios-plugins-roadmap.html


NetApp Performance-Counter

30. November 2009

Performance Counter – die Basis für das Performance-Monitoring

Wie auch immer man die Leistung eines NetApp-Filers überwacht, letztendlich greift man auf die Performance Counter zu. Diese sind nach einem klar strukturierten, hierarchischen Konzept [1] angelegt.

Objekte – Exemplare – Zähler (Objects – Instances – Counter)

Die oberste Ebene stellen Objekte dar, wie zum Beispiel Volumes. Von diesen Objekten kann es nun mehrere Exemplare (engl. instances) geben, z.B. ‘vol0′, ‘backup-vol’, o.a. Jedes Exemplar besitzt wiederum ein durch das Objekt vorgegebenes Set  an Zählern (engl. counter). So werden beispielsweise je Volume die read_ops, die read_latency usw. zur Verfügung gestellt.

Verwaltet werden alle diese Werte vom Counter Manager (CM), auf den über das NetApp eigene CLI aber auch via SNMP oder die NetApp-API zugegriffen werden kann.

Das Nagios-Plugin check_netapp_ops frägt zahlreiche dieser Werte ab und stellt sie für die weitere Verarbeitung in Nagios zur Verfügung.

  • total_ops, read_ops, write_ops
  • nfs_ops, cifs_ops, http_ops fcp_ops
  • iscsi_ops, dafs_ops
  • net_data_recv, net_data_sent
  • disk_data_read, disk_data_written
  • streaming_pkts

So kann  nun einfach beim Überschreiten von Schwellwerten alarmiert werden oder an Hand von Trends, die PNP4Nagios aufzeichnet anaysiert werden. Eine Erweiterung um Werte wie latency oder cache-age ist schon angedacht. Bei Interesse kontaktieren Sie mich bitte.

[1] partners.netapp.com - Abbildung Blockdiagramm


Monitoring Cache-Age

26. November 2009

Allenthalben hört und liesst man von der Möglichkeit, auf einem NetApp-Filer den Wert cache-age zu überwachen. Folgendes fällt mir dazu ein:

Was ist das Cache-Alter (cache-age)?

Das CLI-Werkzeug sysstat definiert den Wert cache-age so:

The age in minutes of the oldest read-only blocks in the buffer cache. Data in this column indicates how fast read operations are cycling through system memory; when the filer is reading very large files (larger than the machine’s memory size), buffer cache age will be very low.

Kurz zusammengefasst gibt der Wert also ein Alter in Minuten an  - je größer um so besser sollte es um die Antwortzeiten für Leseanfragen bestellt sein. Auf die Write-Performance hat das keinen Einfluss.

Was machen wir mit diesem Wert?

Der NetApp System Administration Guide empfiehlt bei einem Absacken der cache-age auf unter 3 Minuten, die Werte für read-ahead auf den betroffenden Volumens anzupassen.

If the file access patterns of your clients are random (nonsequential) and the cache age is less than three, setting minimal read-ahead to ‘on‘ might improve performance.
Weiters kann ein reduzierter cache-age ein Hinweis darauf sein, dass man durch Einbau von mehr Cache-Speicher (PAM-Card) die Performance verbessern kann.

Monitoring Snapshots

2. November 2009

Damit Snapshots auf einem NetApp-Filer nicht in den Himmel wachsen, muss man deren Größe regelmässig überprüfen. Um dies zu automatisieren und im Falle des Überschreitens definierter Grenzwerte alarmiert zu werden, haben wir ein Nagios-Plugin entwickelt, das diese Werte regelmäßig abfrägt, mit  Schwellwerten vergleicht und auch die Grundlagen für eine kontinuierliche Aufzeichnung (Trending) liefert. Im praktischen Betrieb hat sich dann gezeigt, dass die Situation nicht immer ganz so einfach ist und verschiedene Szenarien zu unterscheiden sind: Zum einen kann das Volume keine Snapreserve definiert haben. In diesem Fall wäre der durch die Snapshots verbrauchte Platz wohl am besten relativ zur Größe des Volumes zu berechnen. Anders, wenn es eine definierte Snapreserve gibt; dann sollte die Auslastung dieser Reserve als Basis für die prozentualen Schwellwerte genommen werden. Ein Beispiel zur Verdeutlichung:

Volume A, 100 GB, keine Snapreserve: Wenn durch die Snapshots insgesamt 18 GB belegt werden, ergibt dies eine relative Auslastung von 18% berechnet auf Basis der Volumegröße.

Volume B, 100 GB, davon sind 20GB als Snapreserve reserviert: Wenn die SnapShots hier 18 GB belegen, ergibt dies eine relative Auslastung von 90% (genau 100/20*18) auf Basis der Snapreserve.

Man sieht also, dass die Definition der einzelnen Szenarien durchaus kompliziert werden kann. Wir wollen aber letztendlich zu einer möglichst einfachen Lösung gelangen, die es uns erlaubt mit einigen wenigen Service-Checks alle vorhandenen und auch zukünftig noch angelegten Volumes zu prüfen. Was uns nicht interessiert, ist bei jedem Anlegen eines neuen Volumes am NetApp-Filer die Nagios-Konfiguration anpassen zu müssen.

Im Allgemeinen wird man dafür mit zwei Servicechecks auskommen, um alle Volumes am Filer prüfen zu können. Man muss nur die beiden Szenarien unterscheiden: Volumes mit definierter Snapreserve und solche ohne. Und genau dafür gibt es den Schalter –check_only, dem entweder der Wert with_reserve oder no_reserve zugwiesen werden kann.

Die in die Nagioskonfiguration zu übertragenden Checks würde dann so aussehen:

Check A erfasst alle Volumes ohne definierter Snapreserve. In diesem Fall wird man die Standardvorgaben für die Schwellwerten von 80% bzw. 95% wohl geringer ansetzen, denn wenn die Snapshots einmal 80% des Volumes verbrauchen, ist es für eine Warnung meist schon zu spät.

$ ./check_netapp_snapshots.pl -H sim -f auth --base=vol
 --check_only=no_reserve -w 20% -c 30%

Check B erfasst alle Volumes mit defninierter Snapreserve. Hier können die Standardvorgaben für die Schwellwerte durchaus passen, da sie ja jetzt relativ zur Snapreserve berechnet werden. Daher entfallen hier -w und -c.

$ ./check_netapp_snapshots.pl -H sim -f auth --base=reserve
 --check_only=with_reserve

Und falls man dann noch die Volumegröße in den Performancedaten haben will, um diese in den RRD-Graphen hübsch darzustellen, setze man den Schalter –perf_volume dazu. Dieser wird ergänzt durch –perf_abs, welcher in den Performancedaten auch die Snapshot-Größe in Blöcken statt Prozent ausgibt.

Eine gute Beschreibung des Themas: http://broadcast.oreilly.com/2009/02/understanding-snapshot-consump.html


Monitoring NetApp: SNMP vs. NetApp API

28. Oktober 2009

Überblick über NetApp-Service-Checks in NagiosZahlreiche Tools zur Überwachung von NetApp basieren auf dem Monitoring-Defacto-Standard SNMP. Dieses Protokoll ist praktisch, da allgemein bekannt, weit unterstützt und leider auch uralt. Das zeigt sich zum Beispiel darin, dass heutige komplexe Systeme wie die Speichergeräte von NetApp eigene APIs bereitstellen, die auch bei komplexen Operationen noch übersichtlich programmatisch angesprochen werden können. Die NetApp-API ist unter anderem mit C, Java oder Perl anzusprechen. Somit war es für mich logisch, die NetApp-Plugins für Nagios in Perl zu entwicklen und dabei aber auf diese API zurück zu greifen.

NetApp Manage ONTAP SDK (NetApp Community Blog Article)


check_netapp_usage für Aggregate und Volumes

21. September 2009
Überblick über alle Volumes, Aggrgate und Hardware mit nur wenigen Checks.

Mit diesem Check-Script für Nagios, wird die Auslastung von Volumes oder Aggregaten geprüft. Der besondere Charm liegt in der Möglichkeit, kein bestimmtes Volume oder Aggregat angeben zu müssen. Frei nach dem Leitsatz: “Weniger ist mehr” Folgend ein Auszug aus der Hilfe.

Beispiele

$ check_netapp_usage.pl -H netapp01 -u nagios%pass -o vol
Checks all volumes on netapp01 using the default thresholds.
$ check_netapp_usage.pl -H netapp01 -u nagios%pass -o aggr
Checks all aggregates on netapp01 using the default thresholds.
$ check_netapp_usage.pl -H netapp01 -u nagios%pass -o aggr -w 50% -c 98%
Checks all aggregates on netapp01. Returns a warning, if at least one volume is more than 50% used and critical-alarm if more that 98% used.

Vorteile

Die Vorteile dieser Overall-Checks liegen auf der Hand:

  • Weniger Arbeit beim Implemetieren, da nun nicht jedes Volume einzeln als Servicecheck ins Nagios eingetragen werden muss.
  • Das Nagios bleibt mit weniger Aufwand aktuell, da nicht mehr jedes wegfallende oder hinzukommende Volume in der Nagios-Konfiguration nachgetragen werden muss.

Vereinfachte Authentifizierung

Und für besonders Faule gibt es noch die Möglichkeit, sich die Angabe von Benutzername und Passwort zu sparen. Legen wir diese z.B. in einer Datei namens auth ab, kann der Befehl zur Überprüfung aller Volumes auch so lauten:

$ check_netapp_usage.pl -H netapp01 -f auth -o vol

Doch zu diesem Feature ein anderes mal noch mehr …


Wieviele Kommastellen bei prozentualen Werten?

5. Mai 2009

Kundenwünsche können auch ins Detail gehen und lösen dann mitunter interessante Diskussionen aus. So zum Beispiel die Frage eines Nagios-Admins, der unser Plugin zur Prüfung der Auslastung von Aggregaten und Volumes auf  NetApp-Filern  check_netapp_usage einsetzt: Seine Frage war, ob es wirklich sinnvoll sei einen Prozentwerten auf zwei oder gar drei Nachkommastellen genau zu runden. Letztendlich haben wir uns dazu entschlossen, für die Anzeige im Nagios auf eine Nachkommastelle zu runden mit der durchaus sinnvollen Begründung, dass bei kleinen Werten die Aussage “Auslastung beträgt 0,1%” deutlich signalisiert, dass das Plugin noch arbeitet während ein Meldung wie “Die Auslastung is 0%” doch eine gewisse Unsicherheit vermittelt. Monitoring NetApp mit Nagios: Scrrenshot Volume Usage