Hi David,

yes, that makes much more sense to me. Let's call that filter expression tree
for the time being (the parse tree used for normalization has some similar
ideas, but a totally different scope and semantics).

While I now see where you are heading, I fail to see how this could
sufficiently easy be implemented for a real (and complex) configuration.

Let's look at this example conf:

mail.* /Var/log/mail.log
if programname startswith abc log to /abc
if programname startswith 'acc' and MSG contains 'error' log to /acc
# we don't want debug messages from here on
*.debug ~
if programname startswith 'acc' or (programname contains 'bde' and (facility
> 1 and 
facility < 5)) log to @1.1.1.1
if programname startswith bcd or MSG startswith '123' or MSG contains
'error2' log to /bcd
*.* /var/log/catchall

I simply cannot envision how you would store this as a tree that does not
look like what we have today. 

Rainer
> -----Original Message-----
> From: [email protected] [mailto:rsyslog-
> [email protected]] On Behalf Of [email protected]
> Sent: Sunday, February 28, 2010 2:02 PM
> To: rsyslog-users
> Subject: Re: [rsyslog] Feedback requested: inconsistency in config
> statements
> 
> On Sun, 28 Feb 2010, Rainer Gerhards wrote:
> 
> > Quickly from the mobile: pri based filters require *excatly* one
> single word (!) lookup currently. You can't beat that.
> >
> > I am not totally sure how you think about parse trees. In my view,
> parsin and filteing are two different things./stages. Maybe we have
> different concepts on our minds?
> 
> I am probably using the wrong terminology here.
> 
> say you have a set of rules that say
> 
> if programname startswith abc log to /abc
> if programname startswith acc log to /acc
> if programname startswith acc log to @1.1.1.1
> if programname startswith bcd log to /bcd
> 
> and assuming that these were the only possible programnames for
> simplicity
> in the explination.
> 
> the filtering logic would go somthing like this
> 
> the rules would compile into a tree
> 
> -a-b -> /abc
>    -c -> /acc,@1.1.1.1
> -b   -> /bcd
> 
> receive programname abc
> I have no facility/Pri filter rules
> I have no time filter rules
> I have no system filter rules
> I have programname filter rules
>    look at the first character of the programname
>     it's "a", I have more than one rule that fits that.
>      look at the second character of the programname
>       it's a "b", There are no other decisions to make,
>         invoke the action /abc
> 
> receive progranmane bcd
> I have no facility/PRI filter rules
> I have no time filter rules
> I have no system filter rules
> I have programname filter rules
>    look at the first character of the programname
>     it's a "b", There are no other decisions to make,
>       invoke the action /bcd
> 
> receive programname acc
> I have no facility/Pri filter rules
> I have no time filter rules
> I have no system filter rules
> I have programname filter rules
>    look at the first character of the programname
>     it's "a", I have more than one rule that fits that.
>      look at the second character of the programname
>       it's a "c", There are no other decisions to make,
>         invoke the action /acc and the action @1.1.1.1
> 
> similarly the facility/pri filtering rules would be either compiled
> into a
> tree, or (since it's 256 entries total) into a lookup table with
> pointers
> to the list of actions to take for that entry
> 
> the idea is to spend the time at startup to create the tree that
> represents the ruleset in order to speed up the processing of each
> individual message.
> 
> the real tree would be a bit more complicated than I describe here as
> it
> needs to have 'anything else' entries between the known entries (which
> means that it would not be able to shortcut quite as much as I
> describe),
> and have provision for 'do a more complicated thing (like regex) here
> and
> if it matches continue'. but except for regex matches, this would make
> processing the rules pretty much independant of how many rules there
> were
> or how complex the ruleset is.
> 
> there doe snot need to be one single programname filter tree, if you
> had a
> rule that said
> if pri = info and programname startswith def then def
> 
> the pri tree/table would have an entry for info that would point to a
> filter tree for programname that just had the check for def in it
> 
> am I makeing any more sense now?
> 
> David Lang
> 
> > rainer
> >
> > ----- Urspr?ngliche Nachricht -----
> > Von: "[email protected]" <[email protected]>
> > An: "rsyslog-users" <[email protected]>
> > Gesendet: 28.02.10 11:28
> > Betreff: Re: [rsyslog] Feedback requested: inconsistency in config
> statements
> >
> > On Sun, 28 Feb 2010, Rainer Gerhards wrote:
> >
> >>>
> >>> if the type is depriciated then the destination would be another
> >>> config_option (which you would then look up)
> >>>
> >>> if the type is 'ignore' then it would just be skipped over
> (possibly
> >>> with
> >>> a warning being logged that the config line is being ignored)
> >>>
> >>> this would also clean up some of the current cases where a boolean
> >>> option
> >>> doesn't honor on/off and true/false.
> >>
> >> True/false is NOT a valid boolean option. See
> >>
> >>
> http://git.adiscon.com/?p=rsyslog.git;a=blob;f=runtime/cfsysline.c;h=18
> 4c0d87
> >> 47c5dcbbd8230782ca096e477738efa9;hb=HEAD#l308
> >
> > I was not remembering correctly then, maby it was yes/no vs on/off. I
> know
> > I ran into something where what was documented didn't work and I
> changed
> > it to another version of a boolean answer and it fixed the problem.
> >
> >>> For the second half of the config language (telling rsyslog what to
> do
> >>> with the logs it has received) also has several variations in place
> and
> >>> is
> >>> showing issues.
> >>>
> >>> However I think that the right answer here is to end up
> implementing
> >>> something like the parsing trees and then compile the other config
> >>> language options into that tree to be consistant (and fast) under
> the
> >>> covers, no matter which way the instructions are written (except
> when
> >>> you
> >>> have to use regex matches)
> >>
> >> I don't fully agree here with you. For example, the traditional PRI
> based
> >> filter is lightning fast. I don't see any way it could be nearly as
> fast with
> >> any unified approach. Right now, we have a "unified" filter
> structure, but it
> >> contains three filter cases, each one adding potential power at the
> price of
> >> decreased speed. I think we need to keep different types of filters
> in order
> >> to have some lightning-fast ones. But more of this could be done
> under the
> >> hood.
> >
> > My guess/expectation is that the tree-based parsing would be about
> the
> > same speed as the traditional PRI based filter for choices made based
> on
> > PRI, slowing down for other types of conditions only in that more of
> the
> > message may need to be scanned (and if there is no selection at a
> level,
> > skipping that level should be lightning fast). As a result, a set of
> > filteres based soley on programname would be as fast as the current
> PRI
> > filters.
> >
> > David Lang
> > _______________________________________________
> > rsyslog mailing list
> > http://lists.adiscon.net/mailman/listinfo/rsyslog
> > http://www.rsyslog.com
> > _______________________________________________
> > rsyslog mailing list
> > http://lists.adiscon.net/mailman/listinfo/rsyslog
> > http://www.rsyslog.com
> _______________________________________________
> rsyslog mailing list
> http://lists.adiscon.net/mailman/listinfo/rsyslog
> http://www.rsyslog.com
_______________________________________________
rsyslog mailing list
http://lists.adiscon.net/mailman/listinfo/rsyslog
http://www.rsyslog.com

Reply via email to