Modul 93_Log2Syslog - FHEM Logs an Syslog-Server leiten und Syslogs empfangen

Begonnen von DS_Starter, 14 August 2017, 23:40:10

Vorheriges Thema - Nächstes Thema

DS_Starter

Mit dem Attribut "sendSeverity" kann nun im Sender-Device gefiltert werden, dass nur Syslog-Nachrichten versendet werden deren Schweregrad in diesem Attribut enthalten ist. Per default sind es natürlich alle.
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

eldrik

Hi,

bei mir beendet sich FHEM direkt nach dem Definitionsaufruf der aktuellen Version aus dem Contrib als Collector.

Folgende Infos stehen im FHEM Log.

Zitat2018.08.10 07:58:07.689 3: Log2Syslog RemoteSyslog - entering Syslog servermode ...
2018.08.10 07:58:07.690 3: Log2Syslog RemoteSyslog - Opening socket ...
2018.08.10 07:58:07.690 3: Log2Syslog RemoteSyslog - port 1514/udp opened for Syslog Collector on interface "global"
Undefined subroutine &main::ReadingsSingleUpdateValue called at ./FHEM/93_Log2Syslog.pm line 315.

Ich hatte das Modul (auch die erweiterte Version aus dem Conrib) vorher noch nicht im Einsatz.

Greetz
Eldrik

DS_Starter

Moin Eldrik,

danke für den Hinweis.
Das kommt davon wenn man ein paar Aufrufe einfach aus DbRep kopiert und nicht daran denkt dass jemand kein DbRep einsetzen könnte.  :)
Hab's korrigiert ....

Grüße
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

eldrik

Hi,

klasse jetzt klappts!

Jedoch haben sich bei mir beim Testen ungereimtheiten aufgetan :)

Folgende Dinge habe ich vorhin ausprobiert.

Modul lediglich definiert

Meinen TPLink Switch angewiesen an den Host zu senden, hier kann ich keinen Standard definieren

Ergebnis: Folgende Meldung taucht im FHEM Log auf:

Zitat2018.08.10 09:03:58.469 1: Log2Syslog RemoteSyslog - error parse msg -> <131>2018-08-10 09:03:58 10.0.x.y 31890 Login the web by admin on web (10.0.x.y).

Meine Synology Diskstation angewiesen an den Host zu senden

Ergebnis: Folgende Meldung taucht im FHEM Log auf:

2018.08.10 09:26:29.655 1: Log2Syslog RemoteSyslog - error parse msg -> <14>Aug 10 09:26:29 eldrik-htpc System Test message from Synology Syslog Client from (xyz)

Im Modul parseProfile explizit auf BSD gesetzt und Test vom TPLink ausgeführt:

Ergebnis: Folgende Meldung taucht im FHEM Log auf
Zitat2018.08.10 09:29:48.849 1: PERL WARNING: Use of uninitialized value $Mmm in concatenation (.) or string at ./FHEM/93_Log2Syslog.pm line 520.
2018.08.10 09:29:48.849 1: PERL WARNING: Use of uninitialized value $dd in concatenation (.) or string at ./FHEM/93_Log2Syslog.pm line 520.
2018.08.10 09:29:48.850 1: PERL WARNING: Use of uninitialized value $time in concatenation (.) or string at ./FHEM/93_Log2Syslog.pm line 520.
2018.08.10 09:29:48.850 1: PERL WARNING: Use of uninitialized value $ts in concatenation (.) or string at ./FHEM/93_Log2Syslog.pm line 520.
2018.08.10 09:29:48.850 1: PERL WARNING: Use of uninitialized value $host in concatenation (.) or string at ./FHEM/93_Log2Syslog.pm line 520.
2018.08.10 09:29:48.850 1: PERL WARNING: Use of uninitialized value $id in concatenation (.) or string at ./FHEM/93_Log2Syslog.pm line 520.
2018.08.10 09:29:48.850 1: PERL WARNING: Use of uninitialized value $host in string eq at ./FHEM/93_Log2Syslog.pm line 521.

Erneut via Synology Testprotokolle gesendet.

Ergebnis:
Das Reading Transfered_logs_per_minute wird hochgezählt im FHEM Log tauchen jedoch keine Zeilen auf, wo finde ich die Einträge nun?

Dann habe ich das Modul auf parseProfile raw gestellt, daraufhin wurde weiter nichts (sowohl senden von Diskstation als auch TP Link Switch)  im FHEM Log angezeigt.

- Dann habe ich das Modul wieder auf BSD zurückgestellt, weiterhin taucht nichts im FHEM Log (sowohl senden von Diskstation als auch TP Link Switch) auf.

- Modul auf verbose5 gestellt nun erscheint beim einem Testlogin von meinem TPLink folgende Meldung im FHEM Log, mich wundert, dass hier von raw message gesprochen wird obwohl BSD gesetzt ist.

Zitat2018.08.10 09:54:14.042 5: Log2Syslog RemoteSyslog - ###  new Syslog message Parsing ###
2018.08.10 09:54:14.042 5: Log2Syslog RemoteSyslog - message peerhost: localhost,127.0.0.1
2018.08.10 09:54:14.042 5: Log2Syslog RemoteSyslog - raw message -> <131>2018-08-10 09:54:14 10.0.x.y 31891 Logout the web by admin on web (10.0.x.y).
2018.08.10 09:54:14.043 4: RemoteSyslog - parsed message -> FAC: local0, SEV: Error, MM: , Day: , TIME: , TS: , HOST: , ID: , CONT: 2018-08-10 09:54:14 10.0.x.y 31891 Logout the web by admin on web (10.0.y.x).
2018.08.10 09:54:17.120 5: Log2Syslog RemoteSyslog - ###  new Syslog message Parsing ###
2018.08.10 09:54:17.120 5: Log2Syslog RemoteSyslog - message peerhost: localhost,127.0.0.1
2018.08.10 09:54:17.120 5: Log2Syslog RemoteSyslog - raw message -> <131>2018-08-10 09:54:17 10.0.y.x 31890 Login the web by admin on web (10.0.x.y).
2018.08.10 09:54:17.121 4: RemoteSyslog - parsed message -> FAC: local0, SEV: Error, MM: , Day: , TIME: , TS: , HOST: , ID: , CONT: 2018-08-10 09:54:17 10.0.x.y 31890 Login the web by admin on web (10.0.y.y).


Greetz
Eldrik



DS_Starter

Hi Eldrik,

lass uns mal die Sachen nach und nach durchgehen, sonst ist es zuviel auf einmal  ;)
Grundsätzlich siehst du ohne irgendwelchen Einstellungen die geparsten Messages direkt im Eventmonitor. Du kannst das Attr "makeMsgEvent" verwenden um Readings mit/ohne Eventgeneration zu erstellen (-> help Log2Syslog).

Wenn im Log die Meldung "error parse msg ->" kommt, kann der eingestellte Parser die Message nicht auflösen. Hier hilft ein anderer Parser zu probieren oder einen eigenen schreiben oder "raw" zu verwenden, was quasi immer geht. Ich versuche den Standard IETF/BSD so gut es mir gelingt abzubilden und vollständig zu parsen.

Dein TPLink sendet keine Standard BSD oder IETF Message. Deswegen auch nicht im Router auswählbar (mein Vermutung). TPLink wird sicherlich häufig verwendet.
Dafür würde ich mal einen Parser bauen und mit integrieren. Hoffentlich wendet TPLink bei seinen Switches immer den gleichen Message-Aufbau an.  :)

Deine Synology Testnachricht :

<14>Aug 10 09:26:29 eldrik-htpc System Test message from Synology Syslog Client from (xyz)


ist Standard-BSD. Ist auch im Syno Prokoll-Center auswählbar. Dann musst du im Modul auch im parseProfile BSD setzen. Wenn keine Fehler passieren sieht man im Modul
nicht viel, es sei denn du hast das Attr "makeMsgEvent" verwendet. Ansonsten erscheinen die Meldungen direkt im Eventmonitor (zur Weiterverarbeitung/Logging, was auch immer)

Mit verbose 4/5 siehst du Logeinträge zur Fehlersuche.

Deine Frage:

Zitat
mich wundert, dass hier von raw message gesprochen wird obwohl BSD gesetzt ist.

Mit verbose 5 wird immer zunächst die empfangene message komplett ( raw message ->) ausgedruckt. Dann erscheint noch das was der eingestellte Parser (Attr parseProfile) daraus gemacht hat (parsed message -> ).

Die Warnungen habe ich eleminiert und den IETF-Parser nachgebessert.
Lass uns erstmal ein paar Tests mit der Synology machen, die benutze ich während der Entwicklung auch und kann es gut nachvollziehen.

BTW: wenn du einen Sender mit Log2Syslog erstellst und disable=maintenance einstellst, kannst du beliebige Testnachrichten an den Empfänger senden um zu schauen was er daraus macht. Diese Funktion ist speziell bei den ersten Schritten ganz hilfreich.

EDIT: Schreib mir bitte noch deine Routerbezeichnung. Ich glaube nach ein paar Google-Suchen dass TPLink doch nicht ganz homogen arbeitet.

Grüße
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

eldrik

Hi,

ahja der Eventviewer  :D ok da tauchen entsprechende Nachrichten auf.

help Log2Syslog habe ich ein paar Mal, unter anderem als mein Fhem bei den ersten Versuchen abgeraucht ist, ausgeführt.
Die Hilfe Seite die mir daraufhin angezeigt wird enthält aber nichts zum neuen Collector Modus sowie dem Attribut makeMsgEvent, in der .pm Datei kann ich die Infos nachlsen aber in FHEM wird mir nichts angezeigt :o

Mein TP Link Switch ist vom Modell TL-SG2424

Danke dir für den restlichen Input, damit komme ich weiter  :)

Greetz
Eldrik

DS_Starter

Du musst wirklich "help Log2Syslog" aufrufen und nicht links den "Commandref"-Link verwenden.
Oder im definierten Device "Device specific help" tut es auch.
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Hi eldrik,

habe eine erweiterte Version nach contrib geladen. Es gibt ein parseProfile für TPLink-Switch.
Probiers mal aus.

Grüße
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

eldrik

Hallo Heiko,

klasse und danke für die Mühe, schaut soweit ich das beurteilen kann ganz gut aus!

Readings
MSG_10.0.x.y

FAC: local0 || SEV: Error || ID: 31890 || CONT: Login the web by admin on web (10.0.x.y).


Greetz
Eldrik

DS_Starter

Ja, sieht gut aus.
Das IETF-Parsing habe ich weiter verfeinert und die Version nach contrib geladen.
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Mit der V4.8.2 in contrib kann der Collector angewiesen werden nur auf Mitteilungen bestimmter Schweregrade zu reagieren.
Dazu wurde das Attr "sendSeverity" umbenannt zu "respectSeverity" und gilt nun sowohl für Sender als auch für Collector für die entsprechenden Funktionen.
Das Attr "makeMsgEvent" wurde umbenannt zu "makeEvent", was die Funktion eindeutiger beschreibt.
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

JoeALLb

Hallo Heiko,

experimentiere gerade mit der neuen Version:
Das Default "BSD" schneidet mir bei der ID die MAC-Adresse ab.
Hier ein Beispiel:
FAC: system || SEV: Notice || ID: received request from B8 || CONT: XX:XX:XX:XX:XX with
B8 ist also noch Teil der Macadresse!

macht ja nichts, darum habe ich mir eine parseFn geschrieben.
Dazu eine Frage: Wie rufe ich
$Log2Syslog_BSDMonth{$Mmm}
aus der parseFn auf?
Bekomme da diese Fehlermeldung
Global symbol "%Log2Syslog_BSDMonth" requires explicit package name


Mit
{
$DATA =~ /^<(?<prival>[^>]*)>(?<month>[^\s]*)\s(?<day>[^\s]*)\s(?<time>[^\s]*)\s(?<host>[^\s]*)\s(?<tail>.*)$/;
      $PRIVAL = $+{prival};   
      my $Mmm       = $+{month};       
      my $dd        = $+{day};         
      $TIME      = $+{time}; 
      $HOST = $+{host};
      $CONT      = $+{tail};
my $month = "08" ##should be $Log2Syslog_BSDMonth{$Mmm} ;
  $TS      = "$year-$month-$dd $TIME";

}

bekomme ich schon mal recht brauchbare Ergebnisse!


Wunsch: Könnte ich hier eventuell noch eine "exit"-Möglichkeit bekommen ähnlich wie in valueFn?
Ich muss manche Dinge hier filtern, da mein Router mich nur wenig filtern lässt....
(BZW. ich manche Informationen nur in den Debug-Logs vom Router erhalte)....

DANKE!! Tolles Modul!

sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

DS_Starter

Hi Joe,

ZitatDas Default "BSD" schneidet mir bei der ID die MAC-Adresse ab.
Da muss ich versuchen den BSD Standard zu verfeinern. Sollte eigentlich machbar sein diesen Fall (XX:XX:XX...) mit zu berücksichtigen.

Aber mit der parseFN zu arbeiten führt auch zum Ziel.

ZitatDazu eine Frage: Wie rufe ich
Code: [Auswählen]

$Log2Syslog_BSDMonth{$Mmm}

aus der parseFn auf?

Definiere die parsFn mal so:


{
our %Log2Syslog_BSDMonth;
$DATA =~ /^<(?<prival>[^>]*)>(?<month>[^\s]*)\s(?<day>[^\s]*)\s(?<time>[^\s]*)\s(?<host>[^\s]*)\s(?<tail>.*)$/;
      $PRIVAL   = $+{prival};   
      my $Mmm   = $+{month};       
      my $dd    = $+{day};         
      $TIME     = $+{time};
      $HOST     = $+{host};
      $CONT     = $+{tail};
      my $month = $Log2Syslog_BSDMonth{$Mmm};
      $TS       = "$year-$month-$dd $TIME";
}


ZitatWunsch: Könnte ich hier eventuell noch eine "exit"-Möglichkeit bekommen ähnlich wie in valueFn?
Du meinst damit sicherlich die Variable $IGNORE, die wenn gesetzt, den Datensatz ins Nirvana entlässt, oder ?

LG,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

JoeALLb

Hallo Heiko,


Zitat von: DS_Starter am 20 August 2018, 18:16:58
Da muss ich versuchen den BSD Standard zu verfeinern. Sollte eigentlich machbar sein diesen Fall (XX:XX:XX...) mit zu berücksichtigen.
Da steck ich leider noch nicht tief genug drinnen um mitreden zu können....

Zitat von: DS_Starter am 20 August 2018, 18:16:58
Du meinst damit sicherlich die Variable $IGNORE, die wenn gesetzt, den Datensatz ins Nirvana entlässt, oder ?

Genau!! Mich interessiert praktisch nur ob eine dhcp adresse vergeben wurde und wann sie wieder deassigned wurde.
Dazu muss ich aus relativ vielen Meldungen die richtige herausfiltern.
Ist es so gedacht, dass im Reading immer alle diese Daten angezeigt werden müssen?
Mir würde für meinen Fall ein einfacher kurzer Text völlig ausreichen, den ich  $CONT setzen könnte,
also zB  $CONT = "online" oder eben  $CONT = "offline".
Aber ich fürchte fast,ass mein spezieller Usecase damit weit von deiner ursprünglichen Intention entfernt ist?!??

Danke jedenfalls, macht spaß mit dem Modul zu experimentieren!!!

sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

DS_Starter

Habe soeben eine Version nach contrib gebracht die deinen Fall mit dem Standard BSD-Parsing mit abdeckt.
Kannst du mal probieren, aber mit der parseFn zu arbeiten übt auch und macht Spaß  :)

Das IGNORE baue ich nachher mit ein.

ZitatIst es so gedacht, dass im Reading immer alle diese Daten angezeigt werden müssen?
Nein. Du kannst das Attr "outputFields" benutzen um die anzuzeigenden Felder sowie deren Reihenfolge zu bestimmen.
In deinem Fall wäre es eben nur CONT.
Hast du das Attr "makeEvent" auch schon gesehen ?
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter