[syslog-ng] [RFC]: value-pairs()
Evan Rempel
erempel at uvic.ca
Mon Jan 24 21:47:18 CET 2011
Gergely Nagy wrote:
> Hi!
>
> The idea of a generic framework to set up value pairs came up first
> during the afmongodb discussion (see Bazsi's ideas at
> http://article.gmane.org/gmane.comp.syslog-ng/10432), and while
> working on the tfjson driver, it came up again.
>
> I've learnt a lot since the dynamic-variables implementation in
> afmongodb, and following Bazsi's comments on the list earlier, we
> managed to talk a little about the value-pairs() feature too. That,
> and another quick chat with Balint, followed by working on tfjson
> helped form the proposal below.
>
> I'll divide this into two sections: the first part, mostly aimed at
> people using syslog-ng in production would be a request for comments
> regarding the syntax of the feature.
>
> The Syntax
> ==========
>
> value-pairs (
> glob-select ("usracct.*")
> glob-exclude ("*.*id")
> builtins (no)
> $HOST $MESSAGE
> "program_n_pid" = "$PROGRAM[$PID]"
> )
>
I would like to have the select/exclude take a style and an expression so that
the use of gnu regex could be used (if supported by syslog-ng) or perl regex
or glob. Perhaps only glob and perl regex are supported now but there may be
a faster regular expression tool that becomes available in the future that
could be added without breaking backwards compatibility.
Something of the format
value-pairs (
select ( style="pcre" pattern="^usracct\." )
select ( style="glob" pattern="useracct.*")
The use of $HOST or any other macro should always refer to the content of the macro,
so for the purpose of identifying macros by name, a syntax
macro (HOST MESSAGE)
could be used. I think this is more intuitive than using the $HOST names.
Finally, each of these value-pairs definitions is of the form
keyword ( arguments )
so for consistency I would suggest that defining custom keys should be done with something
of the format
define ( "program_n_pid", "$PROGRAM[$PID]")
for complete orthogonal consistency this should be
define ( macro="program_n_pid", value="$PROGRAM[$PID]")
but that may be a little bit of overkill.
Evan.
More information about the syslog-ng
mailing list