2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-20 19:36:02 +00:00

93_Log2Syslog: parseProfile = Automatic for automatic protocol detection (default) if a collector is defined

git-svn-id: https://svn.fhem.de/fhem/trunk@18981 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2019-03-20 21:39:53 +00:00
parent d9d3968647
commit d8d49e0958
2 changed files with 200 additions and 54 deletions

View File

@ -1,5 +1,7 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it. # Do not insert empty lines here, update check depends on it.
- feature: 93_Log2Syslog: parseProfile = Automatic for automatic protocol
detection (default) if a collector is defined
- feature: 93_DbRep: attribute "sqlCmdVars" to set SQL variables or PRAGMA - feature: 93_DbRep: attribute "sqlCmdVars" to set SQL variables or PRAGMA
before executing SQL statement with sqlCmd before executing SQL statement with sqlCmd
- feature: 74_Unifi: new attribute customClientReadings - feature: 74_Unifi: new attribute customClientReadings

View File

@ -40,6 +40,8 @@ eval "use Net::Domain qw(hostname hostfqdn hostdomain domainname);1" or my $Mis
# Versions History intern: # Versions History intern:
our %Log2Syslog_vNotesIntern = ( our %Log2Syslog_vNotesIntern = (
"5.5.0" => "18.03.2019 prepare for Meta.pm ",
"5.4.0" => "17.03.2019 new feature parseProfile = Automatic ",
"5.3.2" => "08.02.2019 fix version numbering ", "5.3.2" => "08.02.2019 fix version numbering ",
"5.3.1" => "21.10.2018 get of FQDN changed ", "5.3.1" => "21.10.2018 get of FQDN changed ",
"5.3.0" => "16.10.2018 attribute sslCertPrefix added (Forum:#92030), module hints & release info order switched ", "5.3.0" => "16.10.2018 attribute sslCertPrefix added (Forum:#92030), module hints & release info order switched ",
@ -93,6 +95,7 @@ our %Log2Syslog_vNotesIntern = (
# Versions History extern: # Versions History extern:
our %Log2Syslog_vNotesExtern = ( our %Log2Syslog_vNotesExtern = (
"5.4.0" => "17.03.2019 New feature parseProfile = Automatic. The module may detect the message format BSD or IETF automatically in server mode ",
"5.3.2" => "08.02.2019 fix version numbering ", "5.3.2" => "08.02.2019 fix version numbering ",
"5.3.0" => "16.10.2018 attribute sslCertPrefix added to support multiple SSL-keys (Forum:#92030)", "5.3.0" => "16.10.2018 attribute sslCertPrefix added to support multiple SSL-keys (Forum:#92030)",
"5.2.1" => "08.10.2018 Send format of BSD changed. The TAG-field was changed to \"IDENT[PID]: \" ", "5.2.1" => "08.10.2018 Send format of BSD changed. The TAG-field was changed to \"IDENT[PID]: \" ",
@ -250,7 +253,7 @@ sub Log2Syslog_Initialize($) {
"logFormat:BSD,IETF ". "logFormat:BSD,IETF ".
"makeEvent:no,intern,reading ". "makeEvent:no,intern,reading ".
"outputFields:sortable-strict,PRIVAL,FAC,SEV,TS,HOST,DATE,TIME,ID,PID,MID,SDFIELD,CONT ". "outputFields:sortable-strict,PRIVAL,FAC,SEV,TS,HOST,DATE,TIME,ID,PID,MID,SDFIELD,CONT ".
"parseProfile:BSD,IETF,TPLink-Switch,raw,ParseFn ". "parseProfile:Automatic,BSD,IETF,TPLink-Switch,raw,ParseFn ".
"parseFn:textField-long ". "parseFn:textField-long ".
"respectSeverity:multiple-strict,Emergency,Alert,Critical,Error,Warning,Notice,Informational,Debug ". "respectSeverity:multiple-strict,Emergency,Alert,Critical,Error,Warning,Notice,Informational,Debug ".
"octetCount:1,0 ". "octetCount:1,0 ".
@ -263,7 +266,10 @@ sub Log2Syslog_Initialize($) {
"rateCalcRerun ". "rateCalcRerun ".
$readingFnAttributes $readingFnAttributes
; ;
return undef;
# FHEM::Meta::InitMod( __FILE__, $hash ); # für Meta.pm (https://forum.fhem.de/index.php/topic,97589.0.html)
return;
} }
############################################################################### ###############################################################################
@ -288,10 +294,10 @@ sub Log2Syslog_Define($@) {
if(int(@a)-3 < 0){ if(int(@a)-3 < 0){
# Einrichtung Servermode (Collector) # Einrichtung Servermode (Collector)
Log2Syslog_Log3slog ($hash, 3, "Log2Syslog $name - entering Syslog servermode ...");
$hash->{MODEL} = "Collector"; $hash->{MODEL} = "Collector";
$hash->{PROFILE} = "IETF"; $hash->{PROFILE} = "Automatic";
readingsSingleUpdate ($hash, 'Parse_Err_No', 0, 1); # Fehlerzähler für Parse-Errors auf 0 readingsSingleUpdate ($hash, 'Parse_Err_No', 0, 1); # Fehlerzähler für Parse-Errors auf 0
Log2Syslog_Log3slog ($hash, 3, "Log2Syslog $name - entering Syslog servermode ...");
Log2Syslog_initServer("$name,global"); Log2Syslog_initServer("$name,global");
} else { } else {
# Sendermode # Sendermode
@ -315,7 +321,7 @@ sub Log2Syslog_Define($@) {
} }
$hash->{SEQNO} = 1; # PROCID in IETF, wird kontinuierlich hochgezählt $hash->{SEQNO} = 1; # PROCID in IETF, wird kontinuierlich hochgezählt
$hash->{VERSION} = (reverse sort(keys %Log2Syslog_vNotesIntern))[0];
$logInform{$hash->{NAME}} = "Log2Syslog_fhemlog"; # Funktion die in hash %loginform für $name eingetragen wird $logInform{$hash->{NAME}} = "Log2Syslog_fhemlog"; # Funktion die in hash %loginform für $name eingetragen wird
$hash->{HELPER}{SSLVER} = "n.a."; # Initialisierung $hash->{HELPER}{SSLVER} = "n.a."; # Initialisierung
$hash->{HELPER}{SSLALGO} = "n.a."; # Initialisierung $hash->{HELPER}{SSLALGO} = "n.a."; # Initialisierung
@ -323,6 +329,9 @@ sub Log2Syslog_Define($@) {
$hash->{HELPER}{OLDSEQNO} = $hash->{SEQNO}; # Init Sequenznummer f. Ratenbestimmung $hash->{HELPER}{OLDSEQNO} = $hash->{SEQNO}; # Init Sequenznummer f. Ratenbestimmung
$hash->{HELPER}{OLDSTATE} = "initialized"; $hash->{HELPER}{OLDSTATE} = "initialized";
# Versionsinformationen setzen
Log2Syslog_setVersionInfo($hash);
readingsBeginUpdate($hash); readingsBeginUpdate($hash);
readingsBulkUpdate($hash, "SSL_Version", "n.a."); readingsBulkUpdate($hash, "SSL_Version", "n.a.");
readingsBulkUpdate($hash, "SSL_Algorithm", "n.a."); readingsBulkUpdate($hash, "SSL_Algorithm", "n.a.");
@ -424,7 +433,7 @@ sub Log2Syslog_Read($@) {
my $name = $hash->{NAME}; my $name = $hash->{NAME};
return if(IsDisabled($name) || Log2Syslog_IsMemLock($hash)); return if(IsDisabled($name) || Log2Syslog_IsMemLock($hash));
my $pp = AttrVal($name, "parseProfile", "IETF"); my $pp = $hash->{PROFILE};
my $mevt = AttrVal($name, "makeEvent", "intern"); # wie soll Reading/Event erstellt werden my $mevt = AttrVal($name, "makeEvent", "intern"); # wie soll Reading/Event erstellt werden
my $sevevt = AttrVal($name, "respectSeverity", ""); # welcher Schweregrad soll berücksichtigt werden (default: alle) my $sevevt = AttrVal($name, "respectSeverity", ""); # welcher Schweregrad soll berücksichtigt werden (default: alle)
@ -624,7 +633,7 @@ return ($st,$data,$hash);
sub Log2Syslog_parsePayload($$) { sub Log2Syslog_parsePayload($$) {
my ($hash,$data) = @_; my ($hash,$data) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $pp = AttrVal($name, "parseProfile", "IETF"); my $pp = AttrVal($name, "parseProfile", $hash->{PROFILE});
my $severity = ""; my $severity = "";
my $facility = ""; my $facility = "";
my @evf = split(",",AttrVal($name, "outputFields", "FAC,SEV,ID,CONT")); # auszugebene Felder im Event/Reading my @evf = split(",",AttrVal($name, "outputFields", "FAC,SEV,ID,CONT")); # auszugebene Felder im Event/Reading
@ -658,8 +667,28 @@ sub Log2Syslog_parsePayload($$) {
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); # Istzeit Ableitung my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); # Istzeit Ableitung
$year = $year+1900; $year = $year+1900;
if ($pp =~ /raw/) { if($pp =~ /^Automatic/) {
Log2Syslog_Log3slog($name, 4, "$name - $data"); $pp = "unknown";
Log2Syslog_Log3slog($name, 4, "Log2Syslog $name - Analyze message format automatically ...");
$data =~ /^<(?<prival>\d{1,3})>(?<tail>\w{3}).*$/;
$tail = $+{tail};
# Test auf BSD-Format
if($tail && " Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec " =~ /\s$tail\s/) {
$pp = "BSD";
} else {
# Test auf IETF-Format
$data =~ /^<(?<prival>\d{1,3})>(?<ietf>\d{0,2})\s?(?<date>\d{4}-\d{2}-\d{2})T(?<time>\d{2}:\d{2}:\d{2}).*$/;
$prival = $+{prival}; # must
$date = $+{date}; # must
$time = $+{time}; # must
$pp = "IETF" if($prival && $date && $time);
}
$hash->{PROFILE} = "Automatic - detected format: $pp";
Log2Syslog_Log3slog($name, 4, "Log2Syslog $name - Message format \"$pp\" detected. Try Parsing ... ") if($pp ne "unknown");
}
if($pp =~ /raw/) {
Log2Syslog_Log3slog($name, 4, "Log2Syslog $name - $data");
$ts = TimeNow(); $ts = TimeNow();
$pl = $data; $pl = $data;
@ -713,7 +742,7 @@ sub Log2Syslog_parsePayload($$) {
} }
no warnings 'uninitialized'; no warnings 'uninitialized';
Log2Syslog_Log3slog($name, 4, "$name - parsed message -> FAC: $fac, SEV: $sev, MM: $Mmm, Day: $dd, TIME: $time, TS: $ts, HOST: $host, ID: $id, CONT: $cont"); Log2Syslog_Log3slog($name, 4, "Log2Syslog $name - parsed message -> FAC: $fac, SEV: $sev, MM: $Mmm, Day: $dd, TIME: $time, TS: $ts, HOST: $host, ID: $id, CONT: $cont");
$host = "" if($host eq "-"); $host = "" if($host eq "-");
use warnings; use warnings;
$phost = $host?$host:$phost; $phost = $host?$host:$phost;
@ -796,7 +825,7 @@ sub Log2Syslog_parsePayload($$) {
$host = substr($host,0, ($RFC5425len{HST}-1)); $host = substr($host,0, ($RFC5425len{HST}-1));
no warnings 'uninitialized'; no warnings 'uninitialized';
Log2Syslog_Log3slog($name, 4, "$name - parsed message -> FAC: $fac, SEV: $sev, TS: $ts, HOST: $host, ID: $id, PID: $pid, MID: $mid, SDFIELD: $sdfield, CONT: $cont"); Log2Syslog_Log3slog($name, 4, "Log2Syslog $name - parsed message -> FAC: $fac, SEV: $sev, TS: $ts, HOST: $host, ID: $id, PID: $pid, MID: $mid, SDFIELD: $sdfield, CONT: $cont");
$host = "" if($host eq "-"); $host = "" if($host eq "-");
use warnings; use warnings;
$phost = $host?$host:$phost; $phost = $host?$host:$phost;
@ -915,7 +944,7 @@ sub Log2Syslog_parsePayload($$) {
Log2Syslog_Log3slog ($hash, 2, "Log2Syslog $name - error parse msg -> $data"); Log2Syslog_Log3slog ($hash, 2, "Log2Syslog $name - error parse msg -> $data");
} }
Log2Syslog_Log3slog($name, 4, "$name - parsed message -> FAC: $fac, SEV: $sev, TS: $ts, HOST: $host, ID: $id, PID: $pid, MID: $mid, CONT: $cont"); Log2Syslog_Log3slog($name, 4, "Log2Syslog $name - parsed message -> FAC: $fac, SEV: $sev, TS: $ts, HOST: $host, ID: $id, PID: $pid, MID: $mid, CONT: $cont");
$phost = $host?$host:$phost; $phost = $host?$host:$phost;
# auszugebene Felder im Event/Reading # auszugebene Felder im Event/Reading
@ -937,6 +966,10 @@ sub Log2Syslog_parsePayload($$) {
$err = 1; $err = 1;
Log2Syslog_Log3slog ($hash, 1, "Log2Syslog $name - no parseFn defined."); Log2Syslog_Log3slog ($hash, 1, "Log2Syslog $name - no parseFn defined.");
} }
} elsif ($pp eq "unknown") {
$err = 1;
Log2Syslog_Log3slog ($hash, 1, "Log2Syslog $name - Message format could not be detected automatically. PLease check and set attribute \"parseProfile\" manually.");
} }
return ($err,$ignore,$sev,$phost,$ts,$pl); return ($err,$ignore,$sev,$phost,$ts,$pl);
@ -1331,7 +1364,7 @@ sub Log2Syslog_Attr ($$$$) {
if ($cmd eq "set") { if ($cmd eq "set") {
$hash->{PROFILE} = $aVal; $hash->{PROFILE} = $aVal;
} else { } else {
$hash->{PROFILE} = "IETF"; $hash->{PROFILE} = "Automatic";
} }
readingsSingleUpdate ($hash, 'Parse_Err_No', 0, 1); # Fehlerzähler für Parse-Errors auf 0 readingsSingleUpdate ($hash, 'Parse_Err_No', 0, 1); # Fehlerzähler für Parse-Errors auf 0
} }
@ -1793,7 +1826,7 @@ sub Log2Syslog_setpayload ($$$$$$) {
my $IETFver = 1; # Version von syslog Protokoll Spec RFC5424 my $IETFver = 1; # Version von syslog Protokoll Spec RFC5424
my $mid = "FHEM"; # message ID, identify protocol of message, e.g. for firewall filter my $mid = "FHEM"; # message ID, identify protocol of message, e.g. for firewall filter
my $tim = $date."T".$time; my $tim = $date."T".$time;
my $sdfield = "[version\@Log2Syslog version=\"$hash->{VERSION}\"]"; my $sdfield = "[version\@Log2Syslog version=\"$hash->{HELPER}{VERSION}\"]";
$otp = Encode::encode_utf8($otp); $otp = Encode::encode_utf8($otp);
# Längenbegrenzung nach RFC5424 # Längenbegrenzung nach RFC5424
@ -1977,6 +2010,41 @@ sub Log2Syslog_sortVersion (@){
return @sorted; return @sorted;
} }
################################################################
# Versionierungen des Moduls setzen
# Die Verwendung von Meta.pm und Packages wird berücksichtigt
################################################################
sub Log2Syslog_setVersionInfo($) {
my ($hash) = @_;
my $name = $hash->{NAME};
my $v = (sortTopicNum("desc",keys %Log2Syslog_vNotesIntern))[0];
my $type = $hash->{TYPE};
$hash->{HELPER}{PACKAGE} = __PACKAGE__;
$hash->{HELPER}{VERSION} = $v;
if($modules{$type}{META}{x_prereqs_src}) {
# META-Daten sind vorhanden
$modules{$type}{META}{version} = "v".$v; # Version aus META.json überschreiben, Anzeige mit {Dumper $modules{SMAPortal}{META}}
if($modules{$type}{META}{x_version}) { # {x_version} ( nur gesetzt wenn $Id$ im Kopf komplett! vorhanden )
$modules{$type}{META}{x_version} =~ s/1.1.1/$v/g;
} else {
$modules{$type}{META}{x_version} = $v;
}
return $@ unless (FHEM::Meta::SetInternals($hash)); # FVERSION wird gesetzt ( nur gesetzt wenn $Id$ im Kopf komplett! vorhanden )
if( __PACKAGE__ eq $type) {
# es wird mit Packages gearbeitet -> Perl übliche Modulversion setzen
# mit {<Modul>->VERSION()} im FHEMWEB kann Modulversion abgefragt werden
use version 0.77; our $VERSION = FHEM::Meta::Get( $hash, 'version' );
}
} else {
# herkömmliche Modulstruktur
$hash->{VERSION} = $v;
}
return;
}
############################################################################################# #############################################################################################
# Hint Hash EN # Hint Hash EN
############################################################################################# #############################################################################################
@ -1999,7 +2067,7 @@ our %Log2Syslog_vHintsExt_de = (
=pod =pod
=item helper =item helper
=item summary forward FHEM system logs/events to a syslog server/act as an syslog server =item summary forward FHEM system logs/events to a syslog server/act as a syslog server
=item summary_DE sendet FHEM Logs/Events an Syslog-Server / agiert als Syslog-Server =item summary_DE sendet FHEM Logs/Events an Syslog-Server / agiert als Syslog-Server
=begin html =begin html
@ -2007,8 +2075,8 @@ our %Log2Syslog_vHintsExt_de = (
<a name="Log2Syslog"></a> <a name="Log2Syslog"></a>
<h3>Log2Syslog</h3> <h3>Log2Syslog</h3>
<ul> <ul>
The module sends FHEM systemlog entries and/or FHEM events to an external syslog server or act itself as an Syslog-Server The module sends FHEM systemlog entries and/or FHEM events to an external syslog server or act as an Syslog-Server itself
to receive Syslog-messages of other Devices which are able to send Syslog. <br> to receive Syslog-messages of other devices which are able to send Syslog. <br>
The syslog protocol has been implemented according the specifications of <a href="https://tools.ietf.org/html/rfc5424"> RFC5424 (IETF)</a>, The syslog protocol has been implemented according the specifications of <a href="https://tools.ietf.org/html/rfc5424"> RFC5424 (IETF)</a>,
<a href="https://tools.ietf.org/html/rfc3164"> RFC3164 (BSD)</a> and the TLS transport protocol according to <a href="https://tools.ietf.org/html/rfc3164"> RFC3164 (BSD)</a> and the TLS transport protocol according to
<a href="https://tools.ietf.org/pdf/rfc5425.pdf"> RFC5425</a>. <br> <a href="https://tools.ietf.org/pdf/rfc5425.pdf"> RFC5425</a>. <br>
@ -2050,10 +2118,13 @@ our %Log2Syslog_vHintsExt_de = (
</ul> </ul>
The Definition don't need any further parameter. The Definition don't need any further parameter.
In basic setup the Syslog-Server is initialized with Port=1514/UDP and the Parsingprofil "IETF". In basic setup the Syslog-Server is initialized with Port=1514/UDP and the parsing profil "Automatic".
By the <a href="#Log2Syslogattr">attribute</a> "parseProfile" another formats (e.g. BSD) can be selected. With <a href="#Log2Syslogattr">attribute</a> "parseProfile" another formats (e.g. BSD or IETF) can be selected.
The Syslog-Server is immediately ready for use, is parsing the Syslog-data accordingly the rules of RFC5424 and The Syslog-Server is immediately ready for use, detect the received messages, try parsing the
generates FHEM-Events from received Syslog-messages (pls. see Eventmonitor for parsed data). <br><br> data according the rules of RFC5424 or RFC3164 and generates FHEM-Events from received
Syslog-messages (pls. see Eventmonitor for the parsed data). <br>
If the device cannot detect a valid message format, please use attribute "parseProfile" to select the valid
profile. <br><br>
<br> <br>
<b>Example of a Collector: </b><br> <b>Example of a Collector: </b><br>
@ -2143,8 +2214,8 @@ our %Log2Syslog_vHintsExt_de = (
<br><br> <br><br>
After definition the new device sends all new appearing fhem systemlog entries and events to the destination host, After definition the new device sends all new appearing fhem systemlog entries and events to the destination host,
port=514/UDP format:IETF, immediately without further settings if the regex for fhem or event is set. <br> port=514/UDP format:IETF, immediately without further settings if the regex for "fhem" or "event" is set. <br>
Without setting a regex, no fhem system log or event log will be forwarded. <br><br> Without setting a regex, no fhem system log entries or events are forwarded. <br><br>
The verbose level of FHEM system logs are converted into equivalent syslog severity level. <br> The verbose level of FHEM system logs are converted into equivalent syslog severity level. <br>
Thurthermore the message text will be scanned for signal terms "warning" and "error" (with case insensitivity). Thurthermore the message text will be scanned for signal terms "warning" and "error" (with case insensitivity).
@ -2460,7 +2531,7 @@ $CONT = (split(">",$CONT))[1] if($CONT =~ /^<.*>.*$/);
<ul> <ul>
<a name="parseProfile"></a> <a name="parseProfile"></a>
<li><b>parseProfile [ BSD | IETF | ... | ParseFn | raw ] </b><br> <li><b>parseProfile [ Automatic | BSD | IETF | ... | ParseFn | raw ] </b><br>
<br> <br>
Selection of a parse profile. The attribute is only usable for device type "Collector". Selection of a parse profile. The attribute is only usable for device type "Collector".
<br><br> <br><br>
@ -2468,6 +2539,7 @@ $CONT = (split(">",$CONT))[1] if($CONT =~ /^<.*>.*$/);
<ul> <ul>
<table> <table>
<colgroup> <col width=20%> <col width=80%> </colgroup> <colgroup> <col width=20%> <col width=80%> </colgroup>
<tr><td> <b>Automatic</b> </td><td> try to recognize the BSD or IETF message format and use it for parsing (default) </td></tr>
<tr><td> <b>BSD</b> </td><td> Parsing of messages in BSD-format according to RFC3164 </td></tr> <tr><td> <b>BSD</b> </td><td> Parsing of messages in BSD-format according to RFC3164 </td></tr>
<tr><td> <b>IETF</b> </td><td> Parsing of messages in IETF-format according to RFC5424 (default) </td></tr> <tr><td> <b>IETF</b> </td><td> Parsing of messages in IETF-format according to RFC5424 (default) </td></tr>
<tr><td> <b>...</b> </td><td> further specific parse profiles for selective device are provided </td></tr> <tr><td> <b>...</b> </td><td> further specific parse profiles for selective device are provided </td></tr>
@ -2521,6 +2593,13 @@ $CONT = (split(">",$CONT))[1] if($CONT =~ /^<.*>.*$/);
</ul> </ul>
<br> <br>
<b>Note for manual setting:</b> <br>
The typical record layout of the format "BSD" or "IETF" starts with: <br><br>
<table>
<colgroup> <col width=25%> <col width=75%> </colgroup>
<tr><td> <45>Mar 17 20:23:46 ... </td><td>-> record start of the BSD message format </td></tr>
<tr><td> <45>1 2019-03-17T19:13:48 ... </td><td>-> record start of the IETF message format </td></tr>
</table>
</li> </li>
</ul> </ul>
<br> <br>
@ -2730,10 +2809,13 @@ $CONT = (split(">",$CONT))[1] if($CONT =~ /^<.*>.*$/);
</ul> </ul>
Die Definition benötigt keine weiteren Parameter. Die Definition benötigt keine weiteren Parameter.
In der Grundeinstellung wird der Syslog-Server mit dem Port=1514/UDP und dem Parsingprofil "IETF" initialisiert. In der Grundeinstellung wird der Syslog-Server mit dem Port=1514/UDP und dem Parsingprofil "Automatic" initialisiert.
Mit dem <a href="#Log2Syslogattr">Attribut</a> "parseProfile" können alternativ andere Formate (z.B. BSD) ausgewählt werden. Mit dem <a href="#Log2Syslogattr">Attribut</a> "parseProfile" können alternativ andere Formate (z.B. BSD oder IETF) ausgewählt werden.
Der Syslog-Server ist sofort betriebsbereit, parst die Syslog-Daten entsprechend der Richtlinien nach RFC5424 und generiert Der Syslog-Server ist sofort betriebsbereit, versucht das Format der empfangenen Messages zu erkennen und parst die Syslog-Daten
aus den eingehenden Syslog-Meldungen FHEM-Events (Daten sind im Eventmonitor sichtbar). <br><br> entsprechend der Richtlinien nach RFC5424 oder RFC3164 und generiert aus den eingehenden Syslog-Meldungen FHEM-Events
(Daten sind im Eventmonitor sichtbar). <br>
Wird das Format nicht selbständig erkannt, kann es mit dem Attribut "parseProfile" manuell festgelegt werden.
<br><br>
<br> <br>
<b>Beispiel für einen Collector: </b><br> <b>Beispiel für einen Collector: </b><br>
@ -2790,7 +2872,7 @@ $CONT = (split(">",$CONT))[1] if($CONT =~ /^<.*>.*$/);
"parseProfile = ParseFn" eingestellt und im <a href="#Log2Syslogattr">Attribut</a> "parseFn" eine spezifische "parseProfile = ParseFn" eingestellt und im <a href="#Log2Syslogattr">Attribut</a> "parseFn" eine spezifische
Parse-Funktion hinterlegt. <br> Parse-Funktion hinterlegt. <br>
Die im Event verwendeten Felder und deren Reihenfolge können aus einem Wertevorrat mit dem Die im Event verwendeten Felder und deren Reihenfolge können aus einem Wertevorrat mit dem
<a href="#Log2Syslogattr">Attribut</a> "outputFields" bestimmt werden. Je nach verwendeten Parse-Funktion können alle oder <a href="#Log2Syslogattr">Attribut</a> "outputFields" bestimmt werden. Je nach verwendeter Parse-Funktion können alle oder
nur eine Untermenge der verfügbaren Felder verwendet werden. Näheres dazu in der Beschreibung des Attributes "parseProfile". <br> nur eine Untermenge der verfügbaren Felder verwendet werden. Näheres dazu in der Beschreibung des Attributes "parseProfile". <br>
<br> <br>
Das Verhalten der Eventgenerierung kann mit dem <a href="#Log2Syslogattr">Attribut</a> "makeEvent" angepasst werden. <br> Das Verhalten der Eventgenerierung kann mit dem <a href="#Log2Syslogattr">Attribut</a> "makeEvent" angepasst werden. <br>
@ -2822,8 +2904,8 @@ $CONT = (split(">",$CONT))[1] if($CONT =~ /^<.*>.*$/);
<br><br> <br><br>
Direkt nach der Definition sendet das neue Device alle neu auftretenden FHEM Systemlog Einträge und Events ohne weitere Direkt nach der Definition sendet das neue Device alle neu auftretenden FHEM Systemlog Einträge und Events ohne weitere
Einstellungen an den Zielhost, Port=514/UDP Format=IETF, wenn reguläre Ausdrücke für Events/FHEM angegeben wurden. <br> Einstellungen an den Zielhost, Port=514/UDP Format=IETF, wenn reguläre Ausdrücke für "event" und/oder "fhem" angegeben wurden. <br>
Wurde kein Regex gesetzt, erfolgt keine Weiterleitung von Events oder FHEM Systemlogs. <br><br> Wurde kein Regex gesetzt, erfolgt keine Weiterleitung von Events oder FHEM-Systemlogs. <br><br>
Die Verbose-Level der FHEM Systemlogs werden in entsprechende Schweregrade der Syslog-Messages umgewandelt. <br> Die Verbose-Level der FHEM Systemlogs werden in entsprechende Schweregrade der Syslog-Messages umgewandelt. <br>
Weiterhin wird der Meldungstext der FHEM Systemlogs und Events nach den Signalwörtern "warning" und "error" durchsucht Weiterhin wird der Meldungstext der FHEM Systemlogs und Events nach den Signalwörtern "warning" und "error" durchsucht
@ -3138,28 +3220,30 @@ $CONT = (split(">",$CONT))[1] if($CONT =~ /^<.*>.*$/);
<ul> <ul>
<a name="parseProfile"></a> <a name="parseProfile"></a>
<li><b>parseProfile [ BSD | IETF | ... | ParseFn | raw ] </b><br> <li><b>parseProfile [ Automatic | BSD | IETF | ... | ParseFn | raw ] </b><br>
<br> <br>
Auswahl eines Parsing-Profiles. Das Attribut ist nur für Device-Model "Collector" verwendbar. Auswahl eines Parsing-Profiles. Das Attribut ist nur für Device-Model "Collector" verwendbar.
<br><br> <br><br>
<ul> <ul>
<table> <table>
<colgroup> <col width=20%> <col width=80%> </colgroup> <colgroup> <col width=10%> <col width=90%> </colgroup>
<tr><td> <b>Automatic</b> </td><td> Es wird versucht das Datenformat zu erkennen und das BSD-Format RFC3164 oder IETF-Format RFC5424 anzuwenden (default) </td></tr>
<tr><td> <b>BSD</b> </td><td> Parsing der Meldungen im BSD-Format nach RFC3164 </td></tr> <tr><td> <b>BSD</b> </td><td> Parsing der Meldungen im BSD-Format nach RFC3164 </td></tr>
<tr><td> <b>IETF</b> </td><td> Parsing der Meldungen im IETF-Format nach RFC5424 (default) </td></tr> <tr><td> <b>IETF</b> </td><td> Parsing der Meldungen im IETF-Format nach RFC5424 (default) </td></tr>
<tr><td> <b>...</b> </td><td> Es werden weitere angepasste Parsingprofile für ausgewählte Geräte angeboten </td></tr> <tr><td> <b>...</b> </td><td> Es werden weitere angepasste Parsingprofile für ausgewählte Geräte angeboten </td></tr>
<tr><td> <b>ParseFn</b> </td><td> Verwendung einer eigenen spezifischen Parsingfunktion im Attribut "parseFn". </td></tr> <tr><td> <b>ParseFn</b> </td><td> Verwendung einer eigenen spezifischen Parsingfunktion im Attribut "parseFn". </td></tr>
<tr><td> <b>raw</b> </td><td> kein Parsing, die Meldungen werden wie empfangen in ein Event umgesetzt </td></tr> <tr><td> <b>raw</b> </td><td> kein Parsing, die Meldungen werden wie empfangen in einen Event umgesetzt </td></tr>
</table> </table>
</ul> </ul>
<br> <br>
Die geparsten Informationen werden in Feldern zur Verfügung gestellt. Die im Event erscheinenden Felder und deren Die geparsten Informationen werden in Feldern zur Verfügung gestellt. Die im Event erscheinenden Felder und deren
Reihenfolge können mit dem Attribut <b>"outputFields"</b> bestimmt werden. <br> Reihenfolge können mit dem Attribut <b>"outputFields"</b> bestimmt werden. <br>
Abhängig vom verwendeten "parseProfile" werden die folgenden Felder mit Werten gefüllt und es ist dementsprechend auch Abhängig vom verwendeten "parseProfile" oder erkannten Message-Format (Internal PROFILE) werden die folgenden
nur sinnvoll die benannten Felder in Attribut "outputFields" zu verwenden. Im raw-Profil werden die empfangenen Daten Felder mit Werten gefüllt und es ist dementsprechend auch nur sinnvoll die benannten Felder
ohne Parsing in ein Event umgewandelt. im Attribut "outputFields" zu verwenden. Im raw-Profil werden die empfangenen Daten ohne Parsing in einen
Event umgewandelt.
<br><br> <br><br>
Die sinnvoll im Attribut "outputFields" verwendbaren Felder des jeweilgen Profils sind: Die sinnvoll im Attribut "outputFields" verwendbaren Felder des jeweilgen Profils sind:
@ -3199,6 +3283,13 @@ $CONT = (split(">",$CONT))[1] if($CONT =~ /^<.*>.*$/);
</ul> </ul>
<br> <br>
<b>Hinweis für die manuelle Entscheidung:</b> <br>
Der typische Satzaufbau der Formate "BSD" bzw. "IETF" beginnt mit: <br><br>
<table>
<colgroup> <col width=25%> <col width=75%> </colgroup>
<tr><td> <45>Mar 17 20:23:46 ... </td><td>-> Satzstart des BSD-Formats </td></tr>
<tr><td> <45>1 2019-03-17T19:13:48 ... </td><td>-> Satzstart des IETF-Formats </td></tr>
</table>
</li> </li>
</ul> </ul>
<br> <br>
@ -3356,4 +3447,57 @@ $CONT = (split(">",$CONT))[1] if($CONT =~ /^<.*>.*$/);
</ul> </ul>
=end html_DE =end html_DE
=for :application/json;q=META.json 93_Log2Syslog.pm
{
"abstract": "forward FHEM system logs/events to a syslog server or act as a syslog server itself",
"x_lang": {
"de": {
"abstract": "sendet FHEM Logs/Events an einen Syslog-Server (Sender) oder agiert selbst als Syslog-Server (Collector)"
}
},
"keywords": [
"syslog",
"syslog-server",
"syslog-client",
"logging"
],
"version": "v1.1.1",
"release_status": "stable",
"author": [
"Heiko Maaz <heiko.maaz@t-online.de>"
],
"x_fhem_maintainer": [
"DS_Starter"
],
"x_fhem_maintainer_github": [
"nasseeder1"
],
"prereqs": {
"runtime": {
"requires": {
"FHEM": 5.00918799,
"perl": 5.014,
"TcpServerUtils": 0,
"Scalar::Util": 0,
"Encode": 0,
"IO::Socket::INET": 0,
"Net::Domain": 0
},
"recommends": {
"IO::Socket::SSL": 0
},
"suggests": {
}
}
},
"resources": {
"bugtracker": {
"web": "https://forum.fhem.de/index.php/board,20.0.html",
"x_web_title": "FHEM Forum: Automatisierung"
}
}
}
=end :application/json;q=META.json
=cut =cut