Frage zu Bash Script mit Grep Ausgabe

Diskutiere Frage zu Bash Script mit Grep Ausgabe im Shell-Skripte Forum im Bereich Programmieren unter Linux/Unix; Hallo Zusammen, ich schreibe gerade in Bash ein Script, mit dem ich eine Ausgabe per Grep filtere, nun ist es so - dass ich allerdings zwei...

  1. #1 Facerolleye, 28.12.2018
    Facerolleye

    Facerolleye Grünschnabel

    Dabei seit:
    28.12.2018
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo Zusammen,

    ich schreibe gerade in Bash ein Script, mit dem ich eine Ausgabe per Grep filtere, nun ist es so - dass ich allerdings zwei Sachen überprüfen muss und wenn diese gegeben sind, soll bspw. ein echo mit irgendwas kommen.

    das Grep gibt mir folgendes aus.

    Zeit MS
    20:01:22,221 1544
    20:01:24,449 1200
    20:03:12,556 2500

    So, ich soll nun überprüfen ob in den letzten 5 Minuten mehr als 3 dieser Zeilen hintereinander aufgetreten sind sowohl als auch nur diese Fehler zählen, dessen MS Wert über 2000 ist.

    Leider bin ich etwas überfordert gerade, da ich nicht weiß wie ich das Thema angehen soll.
    Irgendjemand eine Lösung? :)
     
  2. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.227
    Zustimmungen:
    17
    Liest Du das aus einer fertigen Datei ein oder kommt das via Pipe aus einem endlos-Stream?

    Abgesehen davon würde ich mir eine Sprache auswählen, die wesentlich - nicht besser, aber - einfacher, umkomplizierter mit Timestamps und Arrays umgehen kann.
    "Früher" war das perl, heute schlagen irgendwie alle immer python oder sowas vor...
     
  3. #3 Facerolleye, 28.12.2018
    Facerolleye

    Facerolleye Grünschnabel

    Dabei seit:
    28.12.2018
    Beiträge:
    3
    Zustimmungen:
    0
    Das ganze kommt aus einem endlos-Stream, gilt aber auch für eine fertige Datei (an der ich das gerade austeste)

    Ich brauche es leider in Bash, weil das die einzige Sprache ist, die das Programm für welches ich das Skript schreibe liest. :)
     
  4. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.227
    Zustimmungen:
    17
    Häh? Erklär das bitte mal... Ein System auf dem nur die Bash läuft und sonst nichts?
    (oder ist das nur eine besch. Anforderung aus dem Aufgabentext der Hausaufgabe? :-) )

    Ansonsten - für mein Empfinden trotz allem die ungeeignetste Sprache, mit der man das lösen können wollte...

    Zudem fehlen noch ein paar Randinfos - z.B. wann "genau" "irgendwas" ausgegeben werden soll, sprich die exakte Bed. (min 3x > 2000 hintereinander, 3x > 2000 in den letzten 5m, egal wie viele Werte, ...)
     
  5. #5 Facerolleye, 28.12.2018
    Facerolleye

    Facerolleye Grünschnabel

    Dabei seit:
    28.12.2018
    Beiträge:
    3
    Zustimmungen:
    0
    naja, ich entwerfe für das Programm "CheckMK" ein Bash Script, welches Fehler analysieren soll, bzw. auswerten soll - diese werden uns dann angezeigt insofern welche gefunden werden.
    Leider läuft das ganze dann über ein Plugin welches das Skript liest und das muss (leider) in Bash geschrieben werden.

    Angenommen ich greppe nach "Hallo".
    nun findet er 10 Einträge mit Hallo welches alle samt Fehler sind. allerdings wird erscheint der Fehler (auf unserem Monitoring Screen) erst wenn 4 Fehler innerhalb von 5 min aufgetreten sind... und dann werden auch nur Fehlereinträge mit > 2000 MS gescannt.

    ich habs mir so vorgestellt bzw. versuche es immer noch umzusetzen.
    er überprüft Zeile 1,2,3,4 auf MSWert > 2000 und schaut ob das Zeitintervall unter 5 Min beträgt.
    Falls nicht, überprüft er Zeile 2,3,4,5 auf MSWert >2000 und schaut dort ob Zeitintervall unter 5 min beträgt.
    usw.
    Wenn Ja, dann kommt sagen wir mal ein Echo "Fehler gefunden" für Testzwecke
     
  6. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.227
    Zustimmungen:
    17
    Hm, die von mir gefundene Doku zu CheckMK sagt eigentlich, Bash wäre nicht die ideale Sprache, um Plugins zu schreiben - "vorsichtig ausgdrückt" (eigentlich interpretiere ich das eher in Richtung "nimm python, sonst nichts") - ggf. wäre also sinnvoll, hier ein wenig mehr zu der vorhandenen Umgebung und den genutzten Plugins, Konfigs, ... zu schreiben.

    Dann wäre es schön zu wissen, was Du denn überwachen willst und warum...

    Dann zu der Auswertung:
    (a) 1,2,3,4 > 2000 -> Warnung - damit gehe ich konform
    (b) 2,3,4,5 > 2000 -> Warnung - aus meiner Sicht nicht sinnvoll. Zum einen ist der Fall grundsätzlich schon durch (a) abgedeckt (sprich die Warnung wurde geschon gemeldet, als 1,2,3,4 > 2000 waren) , zum andern, wenn 1 < 2000 ist, ist es egal, was in der Vergangenheit geschehen ist, da der Warnschwellenwert ja nicht mehr überschritten ist. Ist aber nur meine Interpretation (und wie es üblicherweise gehandhabt wird - ob das sinnvoll ist wäre ggf. zu prüfen.

    Da ich CheckMK nicht sooo tief kenne - basiert aber AFAIK auf Nagios / Icinga - würde ich da eh anders machen:
    * regelmäßig den Wert abfragen mit einer CheckRate von 1/Min.
    * Wert in der Prüfung 4x > 2000 -> Warnung

    Nagios / Icinga kann das mit Bordmitteln, ohne irgendein krudes Plugin, welches intern irgendwelche Aufsummierungen macht, bei CheckMK würde auch davon ausgehen (https://mathias-kettner.de/cms_monitoring_basics.html#checkintervall bestätigt das auch)

    Das Problem wäre damit eher auf die Lösung reduziert, wie man von dem zu überwachenden Gerät einfach den aktuellen Wert ausliest, der Rest läuft dann innerhalb der Standard-Workflows von CheckMK
     
  7. #7 hellfire, 02.01.2019
    hellfire

    hellfire Doppel-As

    Dabei seit:
    25.05.2016
    Beiträge:
    121
    Zustimmungen:
    14
    Die Historie wird grundsätzlich aufgezeichnet, aber grundsätzlich ist der übermittelte Wert sofort aktiv und wird afaik nur für die Graphen verwendet. D. h. ein Wert wird sofort kritisch und dementsprechend angezeigt.

    Würde aber vermuten, dass das auch geht. Habe ich aber noch nicht gemacht. Ggf. mal im monitoring-portal in der check_mk Rubrik nachfragen(http://monitoring-portal.org/, Englisch). Da sind Leute, die sich sehr gut mit Check_MK auskennen.

    Ansonsten: Eine Benachrichtigung kann man verzögern, aber der Status(im System/Webinterface) ist erst mal kritisch. Da Check_MK ja Nagios bzw. Icinga nutzt, stelle ich mir die Frage, ob das in Nagios so möglich ist: Status "warn" bzw. "crit" erst nach x checks?

    Bei Check_MK gibt es mehrere Arten von eigenen Checks. 2 davon sind:
    • Simple lokale Checks auf den überwachten Zielsystemen(Beliebige Sprache). Die liefern 0,1,2(OK,WARN,CRIT) zurück. Das ist die einfachste Variante von Checks. (Siehe: https://mathias-kettner.com/checkmk_localchecks.html)
    • Agentenbasierte Checks sind ein bisschen komplizierter. Sie haben eine Client-Komponente(Beliebige Sprache) und eine Komponente auf dem Monitoring-Server(Python). Die Checks können automatisiert erkannt werden, wenn Werte auf dem Zielsystem vorhanden sind. (Siehe: https://mathias-kettner.com/checkmk_devel_agentbased.html)
    Prinzipiell stimme ich dem, was marce schreibt bzgl. Performance schreibt da natürlich zu: Bash ist in Sachen Geschwindigkeit die schlechteste Wahl. Das normale Intervall für Checks ist 1 Minute. D. h. die von Marce vorgeschlagene Option die vorigen Werte zu prüfen, wäre optimal. Falls das mit der Abfrage der vorigen Werte funktioniert, dann nur mit den agentenbasierten Checks, bei denen eine Komponente auf dem Monitoring-Server ausgeführt wird.

    Wenn das nicht geht, dann wäre ein lokaler Check in einer schnellen Scriptsprache meine nächste Empfehlung. Hier wäre meine Wahl dann awk. Die Wahrscheinlichkeit, dass das auf all Deinen Zielplattformen vorhanden ist, ist sehr groß. Ich bin immer wieder erstaunt wie kompakt und performant awk-code ist. Eine hilfreiche Community zu awk findest Du auf www.unix.com (Englisch, Rubrik Shellprogramming and Scripting).

    Als Algorithmuss würde ich dann ungefähr so etwas nehmen:
    • Die Datei mit den Werten in umgekehrter Reihenfolge(Ende -> Anfang) untersuchen
    • Prüfen wie viele Werte in Folge über dem Schwellwert(2000) sind
    • Prüfung beim Zeitstempel älter als 5 Minuten abbrechen
     
  8. #8 hellfire, 03.01.2019
    hellfire

    hellfire Doppel-As

    Dabei seit:
    25.05.2016
    Beiträge:
    121
    Zustimmungen:
    14
    Wenn Du es Dir einfach machen willst, dann schreibst Du so einen simplen local check: Damit bekommst Du dann sogar einen schönen Graphen geliefert:

    Code:
    #!/bin/bash
    
    logfile="/path/to/log/file"
    # kein logfile -> kein check
    [ -f "$logfile" ] || exit 0
    
    read mytime mydata < <(tail -n1 $logfile)
    
    OK=0;WARN=1;CRIT=2
    status="%s ms=$mydata MY-MS_Check - Current value: $mydata\n"
    if [ mydata -gt 2000 ] ;then
       printf "$status" "$WARN"
    else
       printf "$status" "$OK"
    fi
    
    Das Script kommt dann nach /usr/lib/check_mk_agent/local. Den/Die betreffenden Hosts nochmal neu inventarisieren, so dass der Check gefunden wird, speichern und core neu starten. (cmk -II host; cmk -R)

    Die Benachrichtigung konfigurierst Du dann seperat, so dass dann erst z. B. nach 5 Warnungswerten eine Benachrichtigung geschickt wird.
     
Thema:

Frage zu Bash Script mit Grep Ausgabe

Die Seite wird geladen...

Frage zu Bash Script mit Grep Ausgabe - Ähnliche Themen

  1. Telefoninterview (Wie sich auf Bash-Shell-Fragen vorbereiten?)

    Telefoninterview (Wie sich auf Bash-Shell-Fragen vorbereiten?): Hallo Leute :) Ich habe heute eine E-Mail bekommen und zwar für ein Telefoninterview am übermorgen und ich bin da recht nervös, vor allem am...
  2. Mit bash mysql in Schleife abfragen

    Mit bash mysql in Schleife abfragen: Servus @all, ich habe jetzt die ganze Nacht gekämpft, aber es will nicht wie ich mir das vorstelle. Meine Tabelle: id int(11) NOT NULL...
  3. if abfrage in shell skript (bash)

    if abfrage in shell skript (bash): ich schreibe gerade ein skript für eine vmware (backup) ich weiß es gibt ein schon ein paar skripts da zu aber ich möchte es gerne selber machen...
  4. [bash] if-Abfrage mit RegEx

    [bash] if-Abfrage mit RegEx: Hallo, ich möchte in einem Bash-Skript prüfen, ob die an das Skript übergebene Variable "src_ip" eine IPv4-Adresse ist. Eine detaillierte...
  5. [bash] sed frage

    [bash] sed frage: Hallo! Ich versuche mittels script in einer configdatei vor dem compilieren etwas zu ersetzen z.B.: # CONFIG_BUNZIP2 is not set soll...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden