To replace a part of the log message, you have to:
define a string or regular expression to find the text to replace
define a string to replace the original text (macros can be used as well)
select the field of the message that the rewrite rule should process
Substitution rules can operate on any soft macros, for example, MESSAGE, PROGRAM, or any user-defined macros created using parsers. You can also rewrite the structured-data fields of messages complying to the RFC5424 (IETF-syslog) message format.
NOTE: Hard macros cannot be modified. For details on the hard and soft macros, see Hard versus soft macros).
Substitution rules use the following syntax:
rewrite <name_of_the_rule> { subst( "<string or regular expression to find>", "<replacement string>", value(<field name>), flags() ); };
The type() and flags() options are optional. The type() specifies the type of regular expression to use, while the flags() are the flags of the regular expressions. For details on regular expressions, see Regular expressions.
A single substitution rule can include multiple substitutions that are applied sequentially to the message. Note that rewriting rules must be included in the log statement to have any effect.
TIP: For case-insensitive searches, add the flags(ignore-case) option. To replace every occurrence of the string, add flags(global) option. Note that the store-matches flag is automatically enabled in rewrite rules.
The following example replaces the IP in the text of the message with the string IP-Address.
rewrite r_rewrite_subst{ subst("IP", "IP-Address", value("MESSAGE")); };
To replace every occurrence, use:
rewrite r_rewrite_subst{ subst("IP", "IP-Address", value("MESSAGE"), flags("global")); };
Multiple substitution rules are applied sequentially. The following rules replace the first occurrence of the string IP with the string IP-Addresses.
rewrite r_rewrite_subst{ subst("IP", "IP-Address", value("MESSAGE")); subst("Address", "Addresses", value("MESSAGE")); };
The following example replaces every IPv4 address in the MESSAGE part with its SHA-1 hash:
rewrite pseudonymize_ip_addresses_in_message {subst ("((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])[.]){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))", "$(sha1 $0)", value("MESSAGE"));};
To set a field of the message to a specific value, you have to:
define the string to include in the message, and
select the field where it should be included.
You can set the value of available macros, for example, HOST, MESSAGE, PROGRAM, or any user-defined macros created using parsers (for details, see parser: Parse and segment structured messages and db-parser: Process message content with a pattern database (patterndb)). Note that the rewrite operation completely replaces any previous value of that field.
NOTE: Hard macros cannot be modified. For details on the hard and soft macros, see Hard versus soft macros).
Use the following syntax:
rewrite <name_of_the_rule> { set("<string to include>", value(<field name>)); };
The following example sets the HOST field of the message to myhost.
rewrite r_rewrite_set{ set("myhost", value("HOST")); };
The following example appends the "suffix" string to the MESSAGE field:
rewrite r_rewrite_set{ set("$MESSAGE suffix", value("MESSAGE")); };
For details on rewriting SDATA fields, see Creating custom SDATA fields.
You can also use the following options in rewrite rules that use the set() operator.
rewrite <name_of_the_rule> { set("<string to include>", value(<field name>), on-error("fallback-to-string"); };
NOTE: The severity and facility fields can only be set by the set-severity() rewrite functions.
For more information, see Setting severity with the set-severity() rewrite function.
It is possible to configure the severity field with the set-severity() rewrite function. When configured, the set-severity() rewrite function will only rewrite the $SEVERITY field in the message to the first parameter value specified in the function.
NOTE: If the parameter value is not a valid parameter value, the function ignores it and sends a debug message, but the syslog-ng Open Source Edition (syslog-ng OSE) application still sends the message.
rewrite <name_of_the_rule> { set-severity("severity string or number"); };
The set-severity() rewrite function has a single, mandatory parameter that can be defined as follows:
set-severity( "parameter1" );
The set-severity() rewrite function accepts the following values:
The following examples can be used in production for the set-severity() rewrite function.
Example using string:
rewrite { set-severity("info"); };
Example using numeric string:
rewrite { set-severity("6"); };
Example using template:
rewrite { set-severity("${.json.severity}"); };
It is possible to set the facility field with the set-facility() rewrite function. When set, the set-facility() rewrite function will only rewrite the $PRIORITY field in the message to the first parameter value specified in the function.
NOTE: If the parameter value is not a valid parameter value, the function ignores it and sends a debug message, but the application still sends the message.
log {
source { system(); };
if (program("postfix")) {
rewrite { set-facility("mail"); };
};
destination { file("/var/log/mail.log"); };
flags(flow-control);
};
The set-facility() rewrite function has a single, mandatory parameter that can be defined as follows:
set-facility( "parameter1" );
The set-facility() rewrite function accepts the following values:
The following example can be used in production for the set-facility() rewrite function.
rewrite { set-facility("info"); set-facility("6"); set-facility("${.json.severity}");};
© 2024 One Identity LLC. ALL RIGHTS RESERVED. Nutzungsbedingungen Datenschutz Cookie Preference Center