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

Reply via email to