Prozessmonitoring und logging

greg54321

Neuer User
Mitglied seit
5 Jun 2009
Beiträge
30
Punkte für Reaktionen
0
Punkte
0
Moin zusammen!

meine FB stürzt leider ziemlich heufig ab. über die rrdstats kann ich sehen, das kurz zuvor meist die Prozessorlast hoch war. Ich würde gern - sagen wir mal - die 10 CPU-lastigsten Prozesse sowie systemweite CPU-Verwendung (wait, idle, user, etc) und Speicherauslastung monitoren und in eine Datei schreiben lassen.

Wie kann ich sowas wie
Code:
top -b| head -15 > /usbstick/prozess.log
erreichen? Das Problem ist, das beim vorherigen Konstrukt nur einmalig die ersten 15 Zeilen ausgegeben werden. Beim regelmäßigen Aufruf von top verbraucht dieses selbst zum Messzeitpunkt 38%, also für eine Auswertung jetzt nicht die beste Voraussetzung...
Mir ist noch das Programm sar bekannt, das selbst schon in seine Datenbank loggt. Das ist aber für freetz noch nicht gebaut und ich bin zu doof dafür...

Würde mich über weitere Vorschläge freuen!

Grüße, Gregor
 

sf3978

IPPF-Promi
Mitglied seit
2 Dez 2007
Beiträge
7,853
Punkte für Reaktionen
14
Punkte
38

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
1
Punkte
0
Ob ein Programm das Ergebnis nun auf den Bildschirm ausgibt oder in eine Datenbank schreibt, es ändert nichts daran, dass erst einmal die benötigten Informationen gelesen und sortiert werden müssen.
Selbst wenn top 38% Zeit braucht, müssen irgendwo auch die anderen Prozesse in der Auflistung enthalten sein.
 

greg54321

Neuer User
Mitglied seit
5 Jun 2009
Beiträge
30
Punkte für Reaktionen
0
Punkte
0
top berichtet nur für die erste Ausgabe 38% auf meiner FB für sich selbst. Während der weiteren Durchläufe verbraucht top weit weniger. Allerdings kann ich die weiteren Durchläufe nicht mehr über pipe ("|") auswerten, das der Output ja ein einzelner Stream ist. Bzw ich weiß nicht, wie ich mit dem Stream umzugehen habe...
 

MaxMuster

IPPF-Promi
Mitglied seit
1 Feb 2005
Beiträge
6,932
Punkte für Reaktionen
1
Punkte
36
Wie wäre es mit
Code:
 top  -b  | grep -A 15 -e ^Mem
 
Zuletzt bearbeitet:

greg54321

Neuer User
Mitglied seit
5 Jun 2009
Beiträge
30
Punkte für Reaktionen
0
Punkte
0
Wie wäre es mit
Code:
 top  -b  | grep -A 15 -e ^Mem
Topp! Diese Aufbereitung sprengt mir nicht das Filesystem und funktioniert soweit auch gut. Kommt nur noch etwas Aufwand dazu, das alles anschließend noch hübsch aufzubereiten.

Auf die Idee grep -A wäre ich wohl allein nicht gekommen. Danke!
 

greg54321

Neuer User
Mitglied seit
5 Jun 2009
Beiträge
30
Punkte für Reaktionen
0
Punkte
0
Daraus ist zunächst einmal folgendes entstanden:
Code:
#!/bin/ash

while (true)
do
   top  -b -n 239 -d 15 | grep -A 15 -e ^Mem > /data/top_alle_15sec_ab_`date +%Y%m%d_%H%M%S`.log
   mv /data/top_alle_15sec* /var/media/ftp/usb-stick/
done
Kleines Problem an der Geschichte schein jedoch zu sein, dass die log-Datei zwischendurch nicht geschlossen wird und deshalb die Ausgaben von top eher unregelmäßig zum FS geschrieben werden. Im schlimmsten Fall stürzt die Kiste also wieder ab, bevor das log weg geschrieben wurde.
Wie lässt sich das noch optimieren / sicher gestalten?
 

MaxMuster

IPPF-Promi
Mitglied seit
1 Feb 2005
Beiträge
6,932
Punkte für Reaktionen
1
Punkte
36
Du könntest alle X Sekunden ein "sync" absetzen oder versuchen, die Datei woanders hinzuschieben, z.B. per ftpput oder so:


Code:
while true ; do
	DATE=$(date +%Y%m%d_%H%M%S)
	ftpput -u <user> -p <pass> mein.ftp.host toplog_$DATE.log /data/top_alle_15sec.log
	sleep 15
done
(wenn die Ausgabe nach /data/top_alle_15sec.log geschrieben wird.)
 

greg54321

Neuer User
Mitglied seit
5 Jun 2009
Beiträge
30
Punkte für Reaktionen
0
Punkte
0
... oder versuchen, die Datei woanders hinzuschieben ...
Aber genau diese Datei enthält ja eben noch nicht die aktuellsten Sätze.
Ein tail -f logdatei lässt sich durch ein paralleles sync leider auf der FB auch nicht gesprächiger machen.
 

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
1
Punkte
0
Ein Sync ändert nichts daran, was tail oder andere Programme sehen. Es hat nur einen Einfluss darauf, was nach einem Systemabsturz gespeichert ist.
Wenn schon tail nichts anzeigt, sind die Daten noch im Speicher im Programm grep.
Du kannst versuchen, grep dazu zu bringen, die Daten sofort auszugeben, oder es häufiger beenden indem Du die Anzahl der Wiederholungen von top reduzierst. Oder ein eigenes Programm erstellen, das die CPU-Auslastung ermittelt und in gewünschter Form ausgibt.

Das Einfachste ist, die Ausgabe von grep nicht in eine Datei zu schreiben, sondern direkt auf ein Terminal-Fenster auszugeben.
 

sf3978

IPPF-Promi
Mitglied seit
2 Dez 2007
Beiträge
7,853
Punkte für Reaktionen
14
Punkte
38

Zurzeit aktive Besucher

3CX

Neueste Beiträge

Statistik des Forums

Themen
235,961
Beiträge
2,068,324
Mitglieder
357,026
Neuestes Mitglied
TomTom92