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
 
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.
 
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...
 
Wie wäre es mit
Code:
 top  -b  | grep -A 15 -e ^Mem
 
Zuletzt bearbeitet:
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!
 
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?
 
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.)
 
... 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.
 
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.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.