After writing this, it just hit me that we could stay within the current
config notation by introducing

$begin <type>
$name <obj>
$end <type>

Constructs and don't change anything at the config language at all.

The sample below could then be:

==============================================================
$ModLoad ommysql  # load the output driver (use ompgsql for PostgreSQL)
$ModLoad imudp    # network reception
$UDPServerRun 514 # start a udp server at port 514
$ModLoad imuxsock # local message reception
 
$WorkDirectory /rsyslog/work # default location for work (spool) files
 
$Begin action
$ActionQueueType LinkedList # use asynchronous processing
$ActionQueueFileName dbq    # set file name, also enables disk mode
$ActionResumeRetryCount -1  # infinite retries on insert failure
# for PostgreSQL replace :ommysql: by :ompgsql: below:
*.*       :ommysql:hostname,dbname,userid,password;
$End action
==============================================================

This would probably be possible to implement within the constraints of the
current config parser. We could also add a directive

$StrictScoping on

to instruct rsyslog to disallow and $Action<whatever> directives outside of
scoped blocks (this could be good to guard against accidential global
directives).

That still requires reworking of the internals, but would not need a new
(real) grammar, so it would be considerable less work. I still need to see
how it would work with more complex configs, but assuming we have things like

$Begin Ruleset
$Begin Rule
$Begin Input

I think the same paradigm could probably be used for everything (and that
than would eliminate the need for a new grammar).

Rainer

> -----Original Message-----
> From: [email protected] [mailto:rsyslog-
> [email protected]] On Behalf Of Rainer Gerhards
> Sent: Thursday, July 15, 2010 9:42 AM
> To: rsyslog-users
> Subject: Re: [rsyslog] NEW rsyslog.conf format
> 
> Hi David,
> 
> thanks for the well-crafted mail. My concerns for this proposal were
> (and
> are) mainly based on the "under the cover" changes. Other than that, I
> think
> you are right, except that it boils down to personal taste.
> 
> Let me ignore the internal changes for now.
> 
> Throwing in "{}" creates a very compact, ultra-brief config language.
> But it
> would definitely work. I just have to admit it does not fit my
> *personal*
> taste because it carries a lot of implicit scoping as well (like what
> exactly
> is meant to be scoped by the {} -- an action, or an input, or a
> ruleset...).
> But I think the semantics of this format are close to any other config
> format
> that fits rsyslog. So I think it is probably worth giving it a try, so
> that
> we make at least some progress. The only thing I really would like to
> change
> is to use "()" instead of "{}" because I would like to reserve "{}" for
> future use, where it may fit the user's expectation better than simple
> parenthesis. But I guess that's not really a problem.
> 
> One thing though, that is on my feature list is that I would like to
> use a
> more standard parser, that means one that can becreated with lex and
> Bison.
> While the hand-crafted parser is fine, it always is more work to extend
> and
> enhance it. As the parser is no critical component, I'd prefer to use
> the
> simpler approach. However, I need to check if I can find a suitable
> grammar
> for this proposal. This also works on the assumption.
> 
> I'd also just concentrate on actions for now. So to double-check a
> fairly
> simple config in that format would look as follows:
> 
> ==============================================================
> $ModLoad ommysql  # load the output driver (use ompgsql for PostgreSQL)
> $ModLoad imudp    # network reception
> $UDPServerRun 514 # start a udp server at port 514
> $ModLoad imuxsock # local message reception
> 
> $WorkDirectory /rsyslog/work # default location for work (spool) files
> 
> (
> $ActionQueueType LinkedList # use asynchronous processing
> $ActionQueueFileName dbq    # set file name, also enables disk mode
> $ActionResumeRetryCount -1  # infinite retries on insert failure
> # for PostgreSQL replace :ommysql: by :ompgsql: below:
> *.*       :ommysql:hostname,dbname,userid,password;
> )
> ==============================================================
> 
> This is based on the second example in
> http://www.rsyslog.com/doc-rsyslog_high_database_rate.html
> 
> I will probably also begin to look at the internal changes. As it
> looks, we
> need to make them in any case. So it doesn't hurt to start with them,
> even
> though there initially will be no external (user) visibility that they
> are
> made.
> 
> But at first, I'll start looking at how this may be processed by a
> standard
> flex/bison parser. From the work I already did, I know this is not
> easy, but
> could probably work.
> 
> Feedback appreciated.
> 
> Rainer
> 
> > -----Original Message-----
> > From: [email protected] [mailto:rsyslog-
> > [email protected]] On Behalf Of [email protected]
> > Sent: Tuesday, July 13, 2010 7:30 PM
> > To: rsyslog-users
> > Subject: Re: [rsyslog] NEW rsyslog.conf format
> >
> > On Tue, 13 Jul 2010, Rainer Gerhards wrote:
> >
> > > To add some of the less obvious things: support for multiple
> > listeners going
> > > to different outputs, in an easy to use way. Support for
> explicitely
> > > specified concurrency (or serialization) for high-speed
> environments,
> > support
> > > for different queues, and tying of different queues to different
> > object
> > > classes (inputs, message processors, actions). Flexibility to
> support
> > > configuration for even unexpected plugins that we may not even know
> > about
> > > (because some third party writes them and never publishes them).
> > >
> > > But I begin to agree that we, the community, as a whole have very
> > different
> > > needs. I have gotten the impression that it is probably a good idea
> > to stop
> > > the current effort and re-start it with a requirements definition.
> I
> > have
> > > tried to digest the discussions  on config format we had over the
> > year, but
> > > sometimes it looks like the only consensus we have is that the
> > current format
> > > is ugly and hard to use. The solutions are very wide-ranging. I
> have
> > even
> > > briefly looked at syslog-ng, and seen a lot of the pain again that
> > makes me
> > > dislike that format (but I'll probably still have a closer look and
> > will try
> > > to write up my detailed position why I do not find buying into this
> > format is
> > > a good idea).
> > >
> > > All in all, I think the best way to re-start our thinking about the
> > config
> > > format is to set up a web site where we gather user feedback on
> > >
> > > a) what problems they have with the config format
> > >   (not what they just dislike, but real problems, an example
> > >    From myself: it is nearly impossible to get the sequence right
> > >    To bind inputs to the right rulesets AND use ruleset inclusion)
> > > b) which alternatives they see
> > >
> > > With all this being on a web site, it may be possible to craft a
> > better
> > > decision in 6 to 9 month, assuming we were able to gain sufficient
> > feedback
> > > during that time.
> > >
> > > An alternative would be to create a config parser interface, so
> that
> > > everybody could code up his favorite config language. However, this
> > seems to
> > > be impractical, as many of the ideas floating around (Lua, syslog-
> ng
> > style)
> > > require not just different config parsers, but a different rsyslog
> > processing
> > > core as well. Obviously a complete rewrite in the case of Lua, less
> > for
> > > syslog-ng, but still considerate. For the syslog-ng style we would
> > need to
> > > create named filters, something that I really find questionable.
> > Also, we
> > > would need to add an interim layer between inputs and rulesets,
> > something
> > > that eats performance. In any case, this are not config-parser only
> > changes.
> > >
> > > Of course, I could just pick one of the alternatives. However, it
> > doesn't
> > > make sense to invest a couple of month to do the config system
> > "right", if we
> > > know that a lot of folks will still be unhappy after we have done
> > this.
> >
> > one thing that's really good about the current rsyslog config is that
> > it
> > makes doing simple things simple, especially for people used to
> classic
> > syslog.
> >
> > as you say, we need to say what the problems there are with the
> > existing
> > config format and look at how to solve those. We don't necessarily
> need
> > to
> > change everything.
> >
> > weaknesses that I know of
> >
> > inability to easily/clearly define if-then-else
> >
> > inability to easily/clearly define/use rulesets
> >
> > inability to easily have multiple conditions that go to the same
> > destination (this can be implemented via rulesets, see above)
> >
> > unclear scope rules for config options
> >
> > inability to easily/clearly define per-input rules/filters (this is
> > part
> > of the scope problem above)
> >
> >
> > I don't think that this requires an entirely new config language. I
> > think
> > that almost everything can be solved with a couple simple changes to
> > the
> > config language (although as we found when I proposed this on June 25
> > there are more drastic changes under the covers to
> > check/correct/document
> > what gets changed when a config option is processed)
> >
> >
> > Ignoring for the moment the problem of changing how the config
> options
> > are
> > processed (and the fact that you would need to know what data
> > structures
> > are managed/created/modified) what does the following proposal _not_
> > do?
> >
> > (pasted in from the mail on June 25 since that's now quite a ways
> back
> > in
> > the archives ;-)
> >
> >
> >
> > I would propose the following (more or less in order of difficulty)
> >
> > introduce scoping
> >
> >    whenever you see a "{" in the config file, save the current config
> > options to a stack. when you see a "}" pop the config options from
> the
> > stack (undoing any changes in between) introduce statement blocks
> >    change the parser so that wherever it currently allows one action
> > make
> > it accept a {} block of actions (treat them as if they were multiple
> > actions with & as the selector)
> >
> > introduce named actions
> >
> >    something like sub NAME <action> to define and use NAME to use
> >
> > introduce if-then-else
> >
> >    internally you could convert it to
> >
> > ruleset {
> >    if condition {
> >    block
> >    discard}
> >    { block } }
> >
> > introduct the ability to implcitly define a ruleset
> >
> >    if an action is a condition (i.e. nested configutations) then
> > implicitly
> > create a new ruleset to resolve the nesting.
> >
> >
> > with these capabilities available I think that this will allow for
> > straightforward config files representing very complex configurations
> > with
> > very little change internally to rsyslog.
> >
> > I suspect that the result is going to have some bottlenecks in
> complex
> > configurations due to all the different rulesets and the passing of
> > messages between them, but once the capability is in place in the
> > config
> > file the implementation under the covers could change later to be
> > better
> > optimized.
> >
> > as far as the rsyslog config being hard to understand, I think there
> > are
> > two conditions here.
> >
> > 1. very simple configs where the fact that rsyslog can use a
> > traditional
> > syslog config file (with a header on it that seldom needs to change)
> is
> > a
> > huge advantage
> >
> > 2. complex configs where the inability to define scope and nest
> things
> > is
> > a major problem and makes the resulting config hard to write.
> >
> > 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

Reply via email to