Ich habe eine Rsyslog Konfiguration, die wie folgt aussieht:Dynamische Rsyslog Vorlage
template(name="extract" type="string" string="%msg:R:/(?:"(level)":")((\\"|
[^"])*)"/g–end%")
if $InputFileTag == 'esblog' then {
set $!level = exec_template("extract");
} else {
set $!level = $syslogseverity-text;
}
template(name="json_lines" type="list") {
constant(value="{")
constant(value="\"@timestamp\":\"") property(name="timereported" dateFormat="rfc3339")
constant(value="\",\"host\":\"") property(name="hostname")
constant(value="\",\"json.level\":\"") property(name="$!level" format="json")
constant(value="\",\"facility\":\"") property(name="syslogfacility-text")
constant(value="\",\"tag\":\"") property(name="syslogtag" format="json")
constant(value="\",\"message\":\"") property(name="msg" format="json")
constant(value="\"}")
}
Grundsätzlich, wenn der Quell-Tag esblog ist, mag ich diesen regulären Ausdruck verwenden, aus „Extrakt“, um die Schwere zu ziehen aus die Protokollnachricht Ansonsten möchte ich den Standardschweregrad verwenden. Dann benutze diese Variable innerhalb der json.level-Bezeichnung, so dass ich nur eine Vorlage für die ausgehende Nachricht benötige. Aber kein Glück, dass es noch funktioniert.
Beispielnachricht mit RegEx: https://regex101.com/r/lN4tD4/1
ERROR LOG
0341.407068000:main thread : error: can not find regex end in: '(?:"level":")(\"|[^"]*)"–end%'
0341.407084000:main thread : PROP_INVALID for name ''
0341.407097000:main thread : Called LogMsg, msg: error during parsing file /etc/rsyslog.conf, on or before line 32: invalid property ''
0341.407195000:main thread : Called LogMsg, msg: error during parsing file /etc/rsyslog.conf, on or before line 32: error processing template object
0341.407350000:main thread : Called LogMsg, msg: error during parsing file /etc/rsyslog.conf, on or before line 33: exec_template(): template 'extract'