Zum Inhalt springen

stream (wie logdatei mit tail anzeigen) auswerten


Empfohlene Beiträge

Geschrieben

Hi,

ich habe ein kleines Problem.

Ich würde gerne einen "Stream" auswerten.

Es geht dabei um eine logdatei, die dauerhaft überwacht werden soll. Weiterhin soll eine Aktion ausgeführt werden, wenn bestimmte Werte in der config einen Schwellenwert überschreiten.

Der Inhalt des logs sieht ungefähr so aus:

xxx xxx xxxx xxxxx xxxx stopped: 0.0001770 seconds

im Endeffekt interessiert mich nur der Wert hinter "stopped:". Wenn dieser Wert z.B. über 1 sekunde geht, soll beispielsweise eine Mail geschickt werden.

Das log muss aber dauerhaft ausgewertet werde, damit die Meldung zietnah kommt und nicht erst z.B. 5 Minuten nachdem es passiert ist.

Ich hatte es bisher so versucht:

tail -f xxx.log | grep stopped | awk '{ print $9 }'

print $9 ist in meinem Fall genau die Stelle, an der die Sekunden stehen. nach stopped muss ich grepen, weil mehrer Sachen in dem Log stehen und mich nur die Zeilen interessieren in denen stopped vorkommt.

Nun scheint es mir so, dass tail und awk nicht zusammen funktionieren. So wie oben geht es nämlich leider nicht. wenn ich das log statt mit tail z.B. mit cat öffne geht der awk befehl. Cat liest die datei aber leider nur 1 x ein, ich muss sie aber dauerhaft auswerten.

HAt einer von euch eine idee, wie ich das besser und vielleicht auch ressourcenschonender machen kann (in meinem Beispiel benutze ich zum auswerten 3 Programme...sicher nicht optimal).

Hoffe mir kann jemand helfen.

Gruß ava

Geschrieben

ok, ich bin jetzt soweit, dass ich rausgefunden habe, dass man sowas am besten mit regular expressions macht..

bsp.

#!/bin/bash

tail -f xxx.log |

while read zeile;

do if [[ "$zeile" =~ "stopped: 0" ]];then

echo $zeile;

fi

done

das zeigt mir alle zeilen an, in denen stoppend: 0 drin vorkommt.

aaaa bbbb ccc dddd eeeee fffff ggggg stopped: 0.2609620 hhhhh

mit regular expressions kenn ich mich aber kein Stück aus.

Weiss einer von euch, wie [[ "$zeile" =~ "stopped: 0" ]] aussehen müsste, damit ich

1. nur die angezeigt bekomme, wo stopped nicht 0 ist (also alles größer 0)

und

2. ich nur den Wert hinter stopped angezeigt bekomme (also hier in dem Beispiel: 0.2609620) ?

Danke!

Geschrieben

ok, auch das problem habe ich gelöst.

jetzt noch ein letztes:

ich überprüfe eine Variable:

if [ "$GC" -gt 2.0000000 ]; then

leider bekomme ich damit folgenden error:

0.0697490: integer expression expected

-gt scheint also nicht mit kommazahlen klarzukommen (0.0697490).

ich will quasi:

wenn $GC größer als 2.0000000 ist, mache...

nur das bekomme ich im mom nicht hin..

thx

Geschrieben (bearbeitet)

Hi,

bash kann nicht mit floats rechnen, aber mir ist ne andere Lösung eingefallen, eher ein Workaround wie ne Lösung, aber sollte tun:


if [ "${GC:0:1}" -ge 2 ]; then

 echo "Zahl Größer gleich 2"

fi

Das bewirkt nix anderes, wie dass nur das erste Zeichen (der rest wird quasi abgeschnitten) deiner Variable verglichen wird.

Grüßle

Bearbeitet von t3quill4b0y

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...