askando
Goto Top

Logfile auslesen nach Keywords und Ausgabe mit nächster Zeile ausgeben

Hallo Zusammen,

ich möchte Logfiles monitoren.
Normal nutze ich dafür PRTG mit dem Sensor -- Datei-Inhalt --.
Dort kann ich nach bestimmten Wörtern suchen und dem Sensor entsprechende Eigenschaften geben was er dann tun soll.

Oft wird es je nach Aufbau des Logfiles etwas tricky und dann macht ein Powershell script mehr Sinn.
Aktuell habe ich den Fall das ich ein Logfile nach einem bestimmten Fehler auslesen möchte und wenn er auftritt er mir den Fehler und zusätzlich die nächste Zeile dazu ausgeben soll. Beispielsweise in einer csv die dann per sendmail an eine status adresse gesendet wird.

Am Ende bekomme ich halt so mit das bei einem Kunden oder Lieferanten die Adresse in den Stammdaten falsch hinterlegt ist ohne dafür extra manuell in das Logfile zu schauen.

Beispiel:
Zeile 1: Fehlercode aus der Software: Fehler beim SMTP Versand
Zeile 2: weitere Beschreibung: *sendmailstmp error: could not be send to mailadress@server.xy

Bin über jede Hilfe dankbar!


Ungefähr so:
Get-ChildItem -Path C:\logfiles -Include "access.log" -Recurse | Select-String -Pattern "Fehler beim SMTP Versand" (Fehlt halt noch die nächste Zeile und das umlenken in eine csv)

Content-ID: 1969229851

Url: https://administrator.de/contentid/1969229851

Ausgedruckt am: 22.11.2024 um 01:11 Uhr

1915348599
1915348599 21.02.2022 aktualisiert um 14:00:02 Uhr
Goto Top
Get-ChildItem -Path C:\logfiles -Include "access.log" -Recurse -File | select-string -Pattern 'Fehler beim SMTP Versand' -SimpleMatch -Context 1 | select Path,@{n='ErrorLine';e={$_.Line}},@{n='NextLine';e={$_.Context.PostContext}} | export-csv .\ergebnis.csv -delimiter ";" -NoTypeInformation -Encoding UTF8  
askando
askando 21.02.2022 um 14:21:23 Uhr
Goto Top
Hey Pretty,

vielen Dank dafür! face-smile
Das sieht schon super aus! Es gibt nur noch eine Kleinigkeit. Er nimmt nur die erste Mailadresse die er im Log findet und zeigt dann alle fehlgeschlagenen Versuche an.

Genau das müsste er halt noch für alle weiteren Mailadressen machen die unten im Logfile stehen.
wie oben beschrieben die Fehlermeldung ist immer die selbe, Unterschiede sind dann immer nur in der zweiten Zeile.
Das er alle Versuche auflistet ist eigentlich perfekt, weil so genau nachvollzogen werden kann wann und wie oft er es probiert hat.
1915348599
1915348599 21.02.2022 aktualisiert um 14:53:01 Uhr
Goto Top
Zitat von @askando:

Er nimmt nur die erste Mailadresse die er im Log findet und zeigt dann alle fehlgeschlagenen Versuche an.
Hier wird keine Mail-Adresse gesucht sondern die oben von dir gepostete Fehlermeldung und für jede Zeile in der diese Steht wird dessen benachbarte nächste Zeile mit ausgegeben.
Genau das müsste er halt noch für alle weiteren Mailadressen machen die unten im Logfile stehen.
??
wie oben beschrieben die Fehlermeldung ist immer die selbe, Unterschiede sind dann immer nur in der zweiten Zeile.
Klar und die wird ja mit ausgegeben ...verstehe nicht was du sonst willst, das Skript macht genau das was du oben in der Ursprungsfrage gefragt hast ... Wir kennen den Aufbau deiner Logfiles ja nicht.
askando
askando 21.02.2022 aktualisiert um 15:53:13 Uhr
Goto Top
Nee, toll so wie du es gemacht hast funktioniert es einwandfrei.
sorry ich hatte das Script auf eine falsche Kopie angewendet, daher etwas verwirrt gewesen. :D

Das Script sucht wie du schon beschrieben hast nur die Fehlermeldung heraus und die benachbarte Zeile.
Kann man die Abfrage noch so anpassen, dass die benachbarten Zeilen nur 1x angezeigt werden und das rekursive Suchen nach Logs unterhalb des Ordners ausstellen? Sonst durchsucht er das Archive mit face-smile

Oft ist es die selbe Adresse in der zweiten Zeile, weil der sendmail client es öfters versucht hat...somit wird die Ergebnisdatei zu unübersichtlich.
1915348599
1915348599 21.02.2022 um 16:01:24 Uhr
Goto Top
Get-ChildItem -Path C:\logfiles -Include "access.log" -Recurse -File | %{  
    select-string -Path $_.Fullname -Pattern 'Fehler beim SMTP Versand' -SimpleMatch -Context 1 | select Path,@{n='ErrorLine';e={$_.Line}},@{n='NextLine';e={$_.Context.PostContext}} | group Nextline | %{$_.Group}   
} | export-csv .\ergebnis.csv -delimiter ";" -NoTypeInformation -Encoding UTF8