Mittwoch, 25. Oktober 2006, 19:44 Uhr

rrdtool und unerwartete counter-resets


Misconfigured rrdtool Dealing
With Counter Resets

Originally uploaded by emeidi.

cacti ist einer meiner treuesten Freunde, wenn es um die Überwachung meines heimischen Servers und meines Netzwerkes geht. In jeder Minute werden Daten über den Zustand unzähliger Komponenten gesammelt, in einem Round Robin Archive (RRA) gespeichert und nach Bedarf über cacti, das auf Tobis rrdtool zurückgreift, graphisch ausgegeben.

Rechtsstehende Grafik verärgerte mich in den letzten Wochen immer wieder. Sie zeigt die Auslastung meines Apache2-Web-Servers. Und zwar werden Total Accesses (Zugriffe) sowie ReqPerSec (Anfragen pro Sekunde) geloggt. Mit einem kleinen Shell-Script …

#!/bin/sh

REQ=`wget -O - -q "http://mad4you.homeip.net/server-status?auto" | grep ReqPerSec | cut -d " " -f 2`
ACC=`wget -O - -q "http://mad4you.homeip.net/server-status?auto" | grep Accesses | cut -d " " -f 3`

echo "REQ:"$REQ "ACC:$ACC" >> /var/log/apache2/requests.log

exit 0

… und dem Apache-Modul mod_status

Total Accesses: 11888
Total kBytes: 270745
CPULoad: 3.71745
Uptime: 102709
ReqPerSec: .115744
BytesPerSec: 2699.3
BytesPerReq: 23321.2
BusyWorkers: 1
IdleWorkers: 9
Scoreboard: ______..__.W_...................................................................................................................................................................................................................................................

lese ich die Daten aus. Aber von wo kommen diese unglaublichen hohen Spikes? Da kann doch etwas nicht stimmen … Heiliger Jason, was’n löus?!

Der Ursache auf der Spur

Heute kurz nach dem Training habe ich mir zum Ziel gesetzt, das Problem zu isolieren und zu eliminieren. Ein voller Erfolg, ich weiss nun, wer oder was das Problem verursacht und wie es zu beheben ist.

Und zwar betrachte man das Log-File an der aussagekräftigsten Stelle:

...
REQ:.092143 ACC:19043
REQ:.0921356 ACC:19047
REQ:.0921282 ACC:19051
REQ:.092116 ACC:19054
REQ:.0921126 ACC:19059
REQ:.0921109 ACC:19064
REQ:.0921229 ACC:19072
REQ:.0922169 ACC:19097
REQ:.0922235 ACC:19104
REQ:.0922398 ACC:19113
REQ:0 ACC:1
REQ:.0315789 ACC:4
REQ:.0387097 ACC:7
REQ:.0420561 ACC:10
REQ:.0434783 ACC:13
...

Die Zeile REQ:0 ACC:1 ist der „Übeltäter“. Und zwar lege ich die Zugriffe (ACC) mit rrdtool als Counter ab. Counter bedeutet Zähler, also nimmt rrdtool an, dass der Wert dieses Zählers bei jeder Messung zunimmt. Vergleichbar mit einem Drehkreuz im Schwimmbad. Doch wird Apache neugestartet (willentlich oder unwillentlich) wird der Counter zurückgesetzt. rrdtool ist nun aber so programmiert, dass im COUNTER-Modus nur Overflows bei exakt 32 und 64bit bemerkt und diese entsprechend behandelt werden.

Die Lösung

Die Google-Suche war wieder einmal sehr ergiebig, und zwar gleich mit dem ersten Treffer:

DERIVE will store the derivative of the line going from the last to the current value of the data source. This can be useful for gauges, for example, to measure the rate of people entering or leaving a room. Internally, derive works exactly like COUNTER but without overflow checks. So if your counter does not reset at 32 or 64 bit you might want to use DERIVE and combine it with a MIN value of 0.

Quelle: [rrd-users] Re: how to deal with COUNTER-reset at unusual values?

Ich habe in cacti den Datentyp also von COUNTER auf DERIVE geändert und beobachte nun gespannt, ob der Graph am nächsten Wochenende für einmal kein Spike mehr aufweist.

Tags:
Labels: Uncategorized

Kommentar erfassen