Shell | durchsuchen von logfiles

Blackbenji

Lieutenant
Registriert
Nov. 2009
Beiträge
557
hallo,

ich möchte gerne folgende idee umsetzen.

wir haben mehrere server auf denen tomcat installiert ist. darunter laufen java anwendungen die nach x-tagen gerne mal in einen out of memory geraten.

der out of memory wird in einem logfile dokumentiert. dumm ist, dass danach die anwendung nicht mehr zu gebrauchen ist und der tomcat neu gestartet werden muss.

meine idee ist nun, mittels eines shell scripts das logfile zu durchsuchen, ob es ein out of memory gab.

kann mir kurz jemand dabei helfen wie ich dabei am besten vorgehe?

so eine art

if (tail -20 | grep outofmemory = true) then sh tomcat/bin/stop.sh else do nothing ...

grob jedenfalls ...
 
okay,

mal angenommen ich habe folgende datei:

1
outofmemory
2
3
4
5
6
outofmemory
7
8
9
10

und folgendes sh script:
#!/bin/sh

if grep -s outofmemory app.log
then echo "out of memory gefunden"
fi

funktioniert auch soweit. aber das erste out of memory ist etwas älter und soll somit nicht zum restart führen. nur das letzte out of memory.

kann man das eingrenzen?
 
Ich würde dir zwei Optionen vorschlagen:
1) Tomcat jede Nacht automatisch einfach neu starten lassen
oder
2) Per Cronjob einen Watchdog erstellen, der den Webdienst aufruft und schaut obs einen für Out Of Memory typischen Fehler als Antwort gibt. Falls ja -> restart.
 
1) wird vom kunden so nicht gewünscht, da der dienst 24 / 7 erreichbar sein soll (sla)
2) die rechner sind ziemlich eingeschränkt. daher ist watchdog nicht möglich. eine andere lösung als das logfile nach outofmemory zu durchsuchen, gibt es leider nicht.
 
Vermutlich solltest du dich nicht auf logs verlassen. Es kann sein, dass du

  • einen alten Eintrag siehst, der nicht relevant ist oder
  • einen neuen Eintrag nicht siehst, weil noch mehr geloggt wurde
Sinnvoller wäre es, wenn du Anfragen an deine Apps stellst oder am besten gleich die Fehler behebst.

€: Von wie eingeschränkt reden wir denn, dass ein paar Anfragen alle paar Minuten zu viel wären?
 
Kannst du die fraglichen Applikationen selbst modizieren? Evtl. selbst restarten lassen bei Out of Memory exception? Das mit den Logfiles ist kaum möglich, insbesondere wenn du keine Zeitstempel drin hast. Das einzige was du machen kannst ist die Zahl der vorhergehenden Logzeilen zu zählen und temporär zu speichern. Wenn weißt du was alt oder neu ist. Musst dann aber auch beachten, dass es Logrotate gibt ;)
 
Zurück
Oben