Mail wenn im LOG ein Fehler vorkommt
Sehr geschätzte IT Kollegen!
folgende Logzeilen werden in ein File unter dem Ordner \LOG\Kunde abgelegt. Das File ist permanent im Zugriff durch einen Dienst.
Das Log File wird am Ende des Tages, ca. 19:00 unter \LOG\Kunde\2020-03\ mit einem YYYY-mm-DD Zeitstempel verschoben.
Idealwert --> Interessiert uns nicht wirklich, schön dass es geklappt hat.
2020-03-04 17:03:52,842 [INFO ] [Client : send] - sending of receipt 11002100210015237 was successful
Schlechte Werte, diese interessieren uns. Diese können sich auch immer wieder mit der gleichen ID wiederholen da es einen permanenten Retry (ca. alle 3 Minuten) gibt.
2020-03-04 17:00:35,411 [WARN ] [Client : send] - sending of ID 11001100110007172 failed, response status was 400
2020-03-04 17:00:35,412 [ERROR] [Client : log] - exception while processing receipt -> 400: {"error":"invalid_grant","error_description":"authentication failure"}
Die Anforderung:
Es muss eine Mail gesendet werden, wenn WARN und/oder ERROR auftaucht. Idealerweise die ganze Zeile in den Body.
Die Mail soll sich nicht bei gleichem Fehler (gleiche Zeile, nur anderer Zeitstempel) wiederholen.
Als Backup wäre hier auch toll wenn aus dem Ordner \LOG\Kunde\2020-03\ die Datei von gestern mit durchsucht werden könnte und bei Fehler gesendet wird. Da evtl. eine gesonderte Mail.
Hat hier jemand Erfahrung wie man so etwas einrichten kann?
Vielen Dank
Mfg
Robert
folgende Logzeilen werden in ein File unter dem Ordner \LOG\Kunde abgelegt. Das File ist permanent im Zugriff durch einen Dienst.
Das Log File wird am Ende des Tages, ca. 19:00 unter \LOG\Kunde\2020-03\ mit einem YYYY-mm-DD Zeitstempel verschoben.
Idealwert --> Interessiert uns nicht wirklich, schön dass es geklappt hat.
2020-03-04 17:03:52,842 [INFO ] [Client : send] - sending of receipt 11002100210015237 was successful
Schlechte Werte, diese interessieren uns. Diese können sich auch immer wieder mit der gleichen ID wiederholen da es einen permanenten Retry (ca. alle 3 Minuten) gibt.
2020-03-04 17:00:35,411 [WARN ] [Client : send] - sending of ID 11001100110007172 failed, response status was 400
2020-03-04 17:00:35,412 [ERROR] [Client : log] - exception while processing receipt -> 400: {"error":"invalid_grant","error_description":"authentication failure"}
Die Anforderung:
Es muss eine Mail gesendet werden, wenn WARN und/oder ERROR auftaucht. Idealerweise die ganze Zeile in den Body.
Die Mail soll sich nicht bei gleichem Fehler (gleiche Zeile, nur anderer Zeitstempel) wiederholen.
Als Backup wäre hier auch toll wenn aus dem Ordner \LOG\Kunde\2020-03\ die Datei von gestern mit durchsucht werden könnte und bei Fehler gesendet wird. Da evtl. eine gesonderte Mail.
Hat hier jemand Erfahrung wie man so etwas einrichten kann?
Vielen Dank
Mfg
Robert
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 554138
Url: https://administrator.de/contentid/554138
Ausgedruckt am: 26.11.2024 um 10:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo,
meine Erfahrung ist, dass eine E-Mail nichts bringt.
Entweder Ihr ertrinkt mittelfristig in einer Flut an Statusmeldungen oder es fühlt sich keiner zuständig. Gerade wenn die E-Mail nachts kommt oder an einen Verteiler geht...
Ansonsten können das alle Monitoring Tools wie Icinga2 usw.
Gruß,
Jörg
meine Erfahrung ist, dass eine E-Mail nichts bringt.
Entweder Ihr ertrinkt mittelfristig in einer Flut an Statusmeldungen oder es fühlt sich keiner zuständig. Gerade wenn die E-Mail nachts kommt oder an einen Verteiler geht...
Ansonsten können das alle Monitoring Tools wie Icinga2 usw.
Gruß,
Jörg
Kannst Du mit einem Batch-File machen >> https://ss64.com/nt/find.html .... Dann das entsprechende log scannen und wenn Du einen Treffer hast, den Text in ein File kopieren, dann mit ssmtp (wenn Du unter Linux arbeitest) den Inhalt des Files als Email schicken. Ganz einfach.
Viel Glueck.
Sato
Viel Glueck.
Sato
Hallo,
für die Systemlast, die so ein Konstrukt erzeugt, kannst Du dir einen zweiten Server hinstellen.
Abgesehen davon möchte er eine Benachrichtigung,
keine Suche...
Gruß,
Jörg
für die Systemlast, die so ein Konstrukt erzeugt, kannst Du dir einen zweiten Server hinstellen.
Abgesehen davon möchte er eine Benachrichtigung,
keine Suche...
Gruß,
Jörg
1. Thread Openener schreibt nicht fuer wieviel Kunden und wie oft die Logs geschrieben werden.
2. Er schreibt nicht ob er die Benachrichtigung 'realtime' braucht oder erst am Abend wenn die Log-Datei um 19.00 Uhr verschoben wird.
3. Du kannst den Scan der Logs auf alle 3min ausdehnen, da ja erst dann der Retry gemacht wird.
4. Vielleicht sogar nur alle 10min um nur die letzten 3 Zeilen zu scannen und wenn dann 3mal WARN/ERROR auftaucht erst dann die Mail zu senden. Wir wissen ja nicht wodurch die WARN/ERROR herausgegeben werden.. Technischer Fehler oder Benutzer?
5. Die Jobs koennen alle parallel laufen.
6. SMMTP zum versenden von Mails ist so 'lightweight' ... MAIL == Benachrichtigung!!!
7. Vom logischen Ablauf her, kommt die SUCHE immer vor der BENACHRICHTIGUNG, wie soll er sonst wissen was zu BERICHTEN ist?
8. Um sowas noch leichgewichtiger zu machen, kann man sich vielleicht die Frage stellen, ob man alles was keine Warnung ist geloggt werden muss. Das sind dann aber Policy-Entscheidungen die nur der 'Thread Opener' beantworten kann.
9. Selbst wenn man einen 2. Server braeuchte bei richtiger 'real-time' Last. So eine Icinga Instanz will auch laufen und gepflegt werden. Und wenn Du Support moechtest wirst Du da auch zur Kasse gebeten und musst noch warten. So ein Batch-File oder von mir aus etwas in Python, Go etc. kann man selbst pflegen.
Lass ihn doch mal einige Einzelheiten nachliefern, dann werden wir schon etwas finden. Dann eruebrigt sich vielleicht Deine 'subjektive' Wahrnehmung und Meinung ueber die 'Flut von Statusmeldungen'.
Sato
2. Er schreibt nicht ob er die Benachrichtigung 'realtime' braucht oder erst am Abend wenn die Log-Datei um 19.00 Uhr verschoben wird.
3. Du kannst den Scan der Logs auf alle 3min ausdehnen, da ja erst dann der Retry gemacht wird.
4. Vielleicht sogar nur alle 10min um nur die letzten 3 Zeilen zu scannen und wenn dann 3mal WARN/ERROR auftaucht erst dann die Mail zu senden. Wir wissen ja nicht wodurch die WARN/ERROR herausgegeben werden.. Technischer Fehler oder Benutzer?
5. Die Jobs koennen alle parallel laufen.
6. SMMTP zum versenden von Mails ist so 'lightweight' ... MAIL == Benachrichtigung!!!
7. Vom logischen Ablauf her, kommt die SUCHE immer vor der BENACHRICHTIGUNG, wie soll er sonst wissen was zu BERICHTEN ist?
8. Um sowas noch leichgewichtiger zu machen, kann man sich vielleicht die Frage stellen, ob man alles was keine Warnung ist geloggt werden muss. Das sind dann aber Policy-Entscheidungen die nur der 'Thread Opener' beantworten kann.
9. Selbst wenn man einen 2. Server braeuchte bei richtiger 'real-time' Last. So eine Icinga Instanz will auch laufen und gepflegt werden. Und wenn Du Support moechtest wirst Du da auch zur Kasse gebeten und musst noch warten. So ein Batch-File oder von mir aus etwas in Python, Go etc. kann man selbst pflegen.
Lass ihn doch mal einige Einzelheiten nachliefern, dann werden wir schon etwas finden. Dann eruebrigt sich vielleicht Deine 'subjektive' Wahrnehmung und Meinung ueber die 'Flut von Statusmeldungen'.
Sato
Na wenn es nur ein Kunde ist, dann Batch-Script wie angedacht. Wenn sich das Log aendert, immer letzte Zeile auf WARN/ERROR scannen, die jeweilige Zeile:
1. lesen, kopieren und in eine Mail-File (z.Bsp. log-alerts.txt) schreiben. SSMTP (sendmail) kann daraus dann Betreff machen und die Email entsprechend senden.
Datei sieht dann aus wie:
To:alerts@kunde-xyz.com
From:alerts@diesntleister.com
Subject: Kopierter Text aus dem log
Mit 'sendmail -t < log-alerts.txt' dann automatisch die Email senden. Musst dann halt nur Sendmail einrichten. Ist aber super einfach.
Natuerlich kannst Du auch ein python-Script schreiben, das dann alles in einem macht.
Ich wuerde einfach einen Cron-Job auf 10min setzen, der das Log dann scannen kann. Dann den Inhalt des Logs in ein anderes Log kopieren und den Inhalt des aktuellen Logs loeschen. Dann dauert der aktuelle Scan auch nicht so lange und Du bekommst keine sich wiederholenden WARN/ERROR messages. Um 19.00 Uhr das gefuellte Log in den Ordner kopieren und fertig.
Aber, und das ist ganz wichtig aus den neuen Informationen, man braucht keinen 2. Server wenn es nur fuer einen Kunden ist ;)
Vg Sato
EDIT: Ich meinte SSMTP und nicht SMMTP. Sorry
1. lesen, kopieren und in eine Mail-File (z.Bsp. log-alerts.txt) schreiben. SSMTP (sendmail) kann daraus dann Betreff machen und die Email entsprechend senden.
Datei sieht dann aus wie:
To:alerts@kunde-xyz.com
From:alerts@diesntleister.com
Subject: Kopierter Text aus dem log
Mit 'sendmail -t < log-alerts.txt' dann automatisch die Email senden. Musst dann halt nur Sendmail einrichten. Ist aber super einfach.
Natuerlich kannst Du auch ein python-Script schreiben, das dann alles in einem macht.
Ich wuerde einfach einen Cron-Job auf 10min setzen, der das Log dann scannen kann. Dann den Inhalt des Logs in ein anderes Log kopieren und den Inhalt des aktuellen Logs loeschen. Dann dauert der aktuelle Scan auch nicht so lange und Du bekommst keine sich wiederholenden WARN/ERROR messages. Um 19.00 Uhr das gefuellte Log in den Ordner kopieren und fertig.
Aber, und das ist ganz wichtig aus den neuen Informationen, man braucht keinen 2. Server wenn es nur fuer einen Kunden ist ;)
Vg Sato
EDIT: Ich meinte SSMTP und nicht SMMTP. Sorry
Moin,
Such hier mal nach FileSystemWatcher da findet sich einiges dazu, z.B. zu deinem Thema habe ich hier gerade das hier im Forum gefunden:
Write-Progress
Wenn man das noch um Send-MailMessage mit der Logzeile und den gewünschten Keywords ergänzt hast du schon das gewünschte.
Such hier mal nach FileSystemWatcher da findet sich einiges dazu, z.B. zu deinem Thema habe ich hier gerade das hier im Forum gefunden:
Write-Progress
Wenn man das noch um Send-MailMessage mit der Logzeile und den gewünschten Keywords ergänzt hast du schon das gewünschte.
Du hast das Skript offensichtlich überhaupt nicht verstanden, erstens hast du essentielle Stellen auskommentiert, zweitens handelt es sich hierbei um ein Event das immer automatisch ausgeführt wird wenn sich etwas an einer Datei ändert, deswegen ja der Filesystemwatcher! Register-ObjectEvent ist Asynchron und führt den Event-Body immer bei Eintreten von Ereignissen aus!
Deine doppelt gemoppelte Schleife im Event-Body ist da kontraproduktiv, deswegen auch der Fehler!
Das Skript muss nur einmal aufgerufen werden und läuft dann im Hintergrund.
Läuft hier auch testweise problemlos, deine eigenen Modifikationen weil das Skript nicht verstanden wurde sind der Fehler!
Also lies dich doch einfach nochmal in dir Funktionsweise der Befehle ein dann verstehst du es vielleicht auch.
Deine doppelt gemoppelte Schleife im Event-Body ist da kontraproduktiv, deswegen auch der Fehler!
Das Skript muss nur einmal aufgerufen werden und läuft dann im Hintergrund.
Läuft hier auch testweise problemlos, deine eigenen Modifikationen weil das Skript nicht verstanden wurde sind der Fehler!
Also lies dich doch einfach nochmal in dir Funktionsweise der Befehle ein dann verstehst du es vielleicht auch.