logfile - reagieren wenn mehr als x Zeilen pro Minute generiert werden

Begonnen von m.zielinski, 10 Dezember 2023, 10:51:37

Vorheriges Thema - Nächstes Thema

m.zielinski

Ich suche bisher vergeblich nach einer Möglichkeit, z.b. einen Notify abzufeuern wen im Logfile mehr als ein Schwellenwert Zeilen pro Minute erzeugt werden.
Ich nutze das Logfile nur noch für Fehlernmeldungen - readings sind bei mir in der LogDB.
Heute morgen hat das Netatmo-Device bei mir verrückt gespielt und Fhem lahmgelegt durch 3 Logeinträge pro Sekunde (natürlich passierte im Hintergrund noch mehr um Fhem zu blockieren)

Deswegen würde ich gerne einen Alarm per Email bekommen wenn zu viele Zeilen innerhalb eines Zeitraumes geschrieben werden.


rudolfkoenig

Man kann ein notify mit dem readLog Attribut definieren.
Leider ist ab hier "Handarbeit" gefragt...

betateilchen

defmod logAt at +*00:01:00 {countLog(5)}

sub countLog {
  my $limit = shift;
  $limit //= 1;
  my ($err,@content) = FileRead( { ( "ForceType" => "FILE", "FileName" => InternalVal('Logfile','currentlogfile','') ) } );
  return $err if($err);
  my $count = scalar(@content);
  my $diff  = $count - ReadingsNum('Logfile','oldCount',0);
  if($diff >= $limit) {
    Debug "Alarm im Log: $diff neue Einträge innerhalb der letzten Minute";
  }
  fhem("setreading Logfile oldCount $count",1);
}

Der Code ist absichtlich sehr ausführlich gehalten, um die Idee zu verdeutlichen.
Anstatt der Debug Meldung kann man natürlich auch andere Aktionen ausführen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

m.zielinski

Vielen Dank.

Ich hatte erst das Notify verwendet aber einmal alle 10 Minuten die Zeilenzahl abfragen erscheint mir Ressourcenschonender.