Wie ersetzen Sie in Rsyslog Regex-Übereinstimmungen durch benutzerdefinierten Text?

Wie ersetzen Sie in Rsyslog Regex-Übereinstimmungen durch benutzerdefinierten Text?

Ich versuche, Text mithilfe regulärer Ausdrücke zu erfassen und den Text durch eine benutzerdefinierte Zeichenfolge zu ersetzen.

Mein aktueller Code erfasst erfolgreich IP-Adressen, aber ich weiß nicht, wie ich die IP-Adresse zusammen mit dem Rest der Nachricht durch benutzerdefinierten Text ersetzen kann:

$Template privateIP,"%TIMESTAMP% %HOSTNAME% %syslogtag% %msg:R,ERE,0,DFLT:([0-9]{1,3}\.){3}[0-9]{1,3}--end%\n"

Mein erster Gedanke ist, den regulären Ausdruck irgendwie aus der Vorlage zu verschieben (z. B. mit einem RainerScript) und ein neues Feld/eine neue Variable zu erstellen, modded_msgdie auf eine geänderte msgEigenschaft eingestellt ist. Und diese dann %modded_msg%in der $Vorlage zu verwenden.

Ich habe es mehrmals versucht (danke, ChatGPT), aber es funktioniert nicht.

Antwort1

Das folgende Beispiel kann die msg-Eigenschaft auf eine IP-Adresse prüfen und dann alle Vorkommen dieser Adresse in der Nachricht durch eine beliebige Zeichenfolge ersetzen.

set $.myip = re_extract($msg, "(([0-9]{1,3}\\.){3}[0-9]{1,3})", 0, 1, 0);
if ($.myip == 0) then  set $.mymsg = $msg;
else{
 if ($.myip=="192.1.2.3") then
  set $.mymsg = replace($msg, $.myip, "SPECIALIP");
 else
  set $.mymsg = replace($msg, $.myip, "boringip");
}
template(name="mytemplate" type="string" string="%TIMESTAMP% %$.mymsg%\n")
action(type="omfile" file="output" template="mytemplate")

re_extract()sucht in der Eigenschaft nach dem regulären Ausdruck. Beachten Sie das Extra, ()damit wir die Erfassungsgruppe 1, die gesamte Übereinstimmung, extrahieren können. Außerdem \wird es verdoppelt. Der letzte Parameter ist 0 und wird bei einem Fehler zurückgegeben. Die zurückgegebene Zeichenfolge wird in einer lokalen Variable gespeichert $.myip.

replace()ersetzt alle Vorkommen der Zeichenfolge in der Eigenschaft und gibt das Ergebnis in einer anderen lokalen Variable zurück. Die Vorlage verwendet diese lokale Variable.

verwandte Informationen