Lastauswertungen von Linux Systemen

Lastauswertungen von Linux Systemen - das hört sich recht trocken und langweilig an - ist immens wichtig, um zu ermitteln, ob das aktuell benutzte System schon an Lastgrenzen stößt, oder bald stoßen wird. Um solche Flaschenhälse (hoffentlich) rechtzeitig zu erkennen, gibt es eine ganze Latte an Tools: top, htop, ntop, munin, usw.

Das Problem bei diesen Tools: Entweder benötigen Sie eine doch recht umfangreiche Config, öffnen Netzwerk-Ports um die Daten an zentrale Systeme zu schicken, oder können nicht auf Daten in der Vergangenheit zurück greifen, um nur einige Nachteile zu nennen.

Anders ist atop.

atop - an advanced interactive monitor for Linux-systems

atop ist sowohl Tool, als auch Dienst. Soll heißen: Ich kann atop aufrufen, um die aktuelle Last meines Systems zu ermitteln/sehen, aber auch atop als Dienst laufen lassen, der in einem fest definierten Intervall alle relevanten Last-Daten auf die Festplatte in eine binäre-Datei schreibt.

atop als Tool

Um atop als Tool zu verwenden, genügt der einfach Aufruf von…

atop

Optional kann ich hinter atop (mit einem Leerzeichen getrennt) den ktualisierungs-Intervall in Sekunden angeben.

Ich denke, was atop anzeigt, ist schon recht einleuchtend und muss nicht weiter erklärt werden. Viel mehr möchte ich aber noch einige Shortcuts nennen, mit denen atop wirklich wichtige Informationen anzeigt (<d> stellt z.B. das Drücken der Taste d dar):

<d> - Disk-Aktivitäten anzeigen
<g> - aktuell laufende Prozesse
<f> - statische CPU-Liste aktivieren/deaktivieren
<m> - Speicher-Nutzung
<P> - RegEx-Prozess-Suche
<a> - Anzeige aller Prozesse
<n> - Netzwerk-Aktivitäten

Dies sind nur einige der Shortcuts, die atop versteht. Weitere finden sich in der Man-Page.

atop als Dienst

atop lässt sich auch als “Dienst” betreiben. Dazu gibt es unter Debian das init-Script /etc/init.d/atop, welches div. Konfigurationsmöglichkeiten gibt. Die Wichtigste Option ist:

DARGS="-a -w /var/log/atop.log 600"
# -a => Show or log all processes
# -w /var/log/atop.log => Schreibe Log-File nach ...
# 600 => Intervall, in dem in das Log-File geschrieben werden soll

Somit werden also aller 600 Sekunden die Lastdaten in das Log-File /var/log/atop.log geschrieben.

Sofern man pro Tag ein Log-File haben möchte, muss das init-Script modifiziert werden:

[...]
DAEMON=/usr/bin/atop
CURRENT_DATE=$(date +%Y%m%d)
DARGS="-a -w /var/log/atop/"${CURRENT_DATE}_"atop.log 600"
NAME=atop
[...]

Anschließend wird noch unter /var/log/ das Verzeichnis atop angelegt, Besitzer und Gruppe bleiben root:

mkdir /var/log/atop/

Nun nur noch unter /etc/cron.d/ die Datei atop mit folgendem Inhalt anlegen:

0 0 * * * root /etc/init.d/atop restart > /dev/null 2>&1

Damit wird jeden Tag 0:00 Uhr atop neu gestartet, woduch unter /var/log/atop ein neues Log-File pro Tag angelegt wird:

ls -1 /var/log/atop
  20111101_atop.log
  20111102_atop.log
  20111103_atop.log
  [...]

Um nun auf diese Log-Files zuzugreifen, braucht man wieder atop, da die Files in einem binären Format vorliegen:

atop -r /var/log/atop/20111101_atop.log

Auch beim Auslesen der Logs aus der Vergangenheit stehen die Shortcuts von oben zur Verfügung. Zusätzlich kann man mit <t> und <SHIFT> + <t> in der Uhrzeit vor und zurück blättern.

Schon beim Aufruf von atop kann ein Zeitpunkt, oder eine Zeitspanne, definiert werden, die man sich anschauen möchte. Z.B. alle Einträge von 12:00 bis 13:00 Uhr:

atop -r /var/log/atop/20111101_atop.log -b 12:00 -e 13:00

Die beiden Parameter lassen sich auch einzeln nutzen…

atop zur Generierung von Statistiken nutzen

Um atop für die Generierung von Statistiken zu nutzen, gibt es einen Schalter, der die Ausgabe mit dr libreadline deaktiviert: -P

Diese Option verlangt noch ein Label, sprich die Information, die mann auswerten möchte. Zur Auswahl stehen:

PRC  Process level totals
CPU  CPU utilization
CPL  CPU load information
MEM  Memory occupation
SWP  Swap occupation and overcommit info
PAG  Paging frequency
DSK  Disk utilization
NET  Network utilization (TCP/IP)

Eine genauere Beschreibung derer findet sich wieder in der Man-Page.

Auf Aufruf für die CPU Last könnte also so aussehen:

atop -r /var/log/atop/20111101_atop.log -PCPL

Die Ausgabe wäre dann…

[...]
CPL server01 1320147312 2011/11/01 06:35:12 600 1 0.07 0.06 0.07 140155 11868
SEP
CPL server01 1320147612 2011/11/01 06:45:12 600 1 0.03 0.03 0.03 98021 12110
SEP
[...]

SEP ist der Seperator, der einen neuen Eintrag kennzeichnet, bzw. den alten abschließt. Die genaue Feld-Bezeichnung ist der Man-Page zu entnehmen. In meinem Fall handelt es sich bei den Feldern 8, 9 und 10 um die Load Average der letzten Minute, der letzten 5 und der letzten 15 Minuten.

Mit diesen Informationen und etwas Bash kann man schonmal eine CSV bauen:

atop -r /var/log/atop.log -PCPL | egrep -v "^SEP" | awk '{ print "\""$4"_"$5"\";\""$8"\";\""$9"\";\""$10"\"" }' > /home/user/Desktop/atop_load.csv

Es wird der Zeitpunkt in die CSV gelogt, im Format “Datum_Uhrzeit”, und anschließend die lavg1, lavg5 und lavg15.

Dies kann man nun z.B. mit gnuplot auswerten. Ein einfaches Script, welches die Graphen in einer PNG-Datei darstellt, könnte so aussehen:

gnuplot_csv.gplt
#!/usr/bin/gnuplot
 
set timefmt "%Y/%m/%d_%H:%M:%S"
set datafile missing "N/A"
set datafile separator ';'
 
set key top left
set style data lines
set grid
 
set xdata time
# Hier müssen Start und Endpunkt eingetragen werden, wieder im Format "Datum_Uhrzeit"!
set xrange ['${start_date}':'${end_date}']
# aller 6 Stunden ein Datums-Eintrag auf der x-Achse
set xtic 21600
# Ausrichtung der Bezeichnung auf der x-Achse
set xtics scale 0,0 rotate by 90
set xtics out offset 0,-9.0
set mxtics 12
set format x '%Y/%m/%d_%H:%M:%S'
 
# Bezeichung für die y-Achse
set ylabel 'load average'
set format y '%.2f'
 
# Bildparameter definieren
set term png small size '1280,1024' xffffff x000000 xa0a0a0 x00bf00 xbf0000 x0000bf
 
# Ausgabe in Pfad...
set outp '/home/user/Desktop/atop_load.png'
set style line 1 lt rgb "#0000ff" lw '1'
set style line 2 lt rgb "#006400" lw '1'
set style line 3 lt rgb "#a52a2a" lw '1'
 
plot \
    '/home/user/Desktop/atop_load.csv' \
    usi 1:($2) title 'lavg1' ls 1, \
    '' usi 1:($3) title 'lavg5' ls 2, \
    '' usi 1:($4) title 'lavg15' ls 3

Anschließend ausführbar machen (chmod +x gnuplot_script) und ausführen. Wir erhalten einen schönen Graphen…

howtos/lastauswertungen.von.linux.systemen.txt · Last modified: 2011/11/10 20:17 by daniel
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki