Sorry, I am swamped with fixing an important segfault issue we see in one
environment, so I do not have time for an more in-depth answer (other list
members may have). But I suggest to look into multiple ruleset support, which
is in its infancy, but may help.

Rainer 

> -----Original Message-----
> From: [email protected] 
> [mailto:[email protected]] On Behalf Of Aaron Nichols
> Sent: Tuesday, September 22, 2009 3:51 AM
> To: rsyslog-users
> Subject: [rsyslog] Improving filter performance & general performance
> 
> Hi Everyone,
> 
> I have rsyslog 4.4.1 chugging along reasonably well but am 
> looking for ways
> to improve performance and optimize the filter ruleset. 
> Unfortunately I have
> to create fairly extensive rulesets to filter on hostname, 
> programname,
> facility, priority, etc. Some log sources generate a high 
> volume of logs (a
> few Mbytes/sec) across multiple machines and others generate a fairly
> routine amount of log data - maybe 5 meg per day. Many filters have
> duplicate conditions for some values but there is always 
> variance. I have
> tried to order the rules so that the highest volume logs 
> match first and
> then are discarded. I've included a sample of the rules used 
> for my highest
> volume logs (names changed to protect the innocent).
> 
> If there are ways to chain or nest rules so that I can take 
> advantage of
> matches already made against a log entry to filter it 
> minimally that would
> be great. For example, most of the below rules filter on the 
> same facility &
> list of hostnames but look for different values in the 
> 'rawmsg'. If I could
> filter on the facility & hostname once and then rawmsg to 
> sort to different
> destinations I'm guessing it would be lower overhead but I 
> don't really know
> how the processing logic works.
> 
> Also - if a condition is not met, are other parts of the 
> filter evaluated?
> For example, if a message was received on local0, would any conditions
> beyond "if $syslogfacility-text == 'local1'" be evaluated? Is it more
> efficient to filter on the undecoded value syslogfacility vs.
> syslogfacility-text?
> 
> I'm looking for suggestions or general techniques for optimizing rule
> performance under these circumstances.
> 
> $template XMLFormat, "%syslogtag%%msg%\n"
> 
> if $syslogfacility-text == 'local1' and ( \
>         $fromhost startswith 'hosta' or \
>         $fromhost startswith 'hostb' or \
>         $fromhost startswith 'hostc' or \
>         $fromhost startswith 'hostd' \
>         ) and $rawmsg contains 'protocolLogRecord' then
> -/log/syslog/collated/server/protocol.log;XMLFormat
> & ~ # discard after match
> if $syslogfacility-text == 'local1' and ( \
>         $fromhost startswith 'hosta' or \
>         $fromhost startswith 'hostb' or \
>         $fromhost startswith 'hostc' or \
>         $fromhost startswith 'hostd' \
>         ) and $rawmsg contains 'messageLogRecord' then
> -/log/syslog/collated/server/message.log;XMLFormat
> & ~ # discard after match
> if $syslogfacility-text == 'local1' and ( \
>         $fromhost startswith 'hosta' or \
>         $fromhost startswith 'hostb' or \
>         $fromhost startswith 'hostc' or \
>         $fromhost startswith 'hostd' \
>         ) and $rawmsg contains 'clientLogRecord' then
> -/log/syslog/collated/server/client.log;XMLFormat
> & ~ # discard after match
> if $syslogfacility-text == 'local2' and ( \
>         $fromhost startswith 'hosta' or \
>         $fromhost startswith 'hostb' or \
>         $fromhost startswith 'hostc' or \
>         $fromhost startswith 'hostd' \
>         ) then -/log/syslog/collated/server/usage.log;XMLFormat
> & ~ # discard after match
> if $syslogfacility-text == 'local1' and ( \
>         $fromhost startswith 'hosta' or \
>         $fromhost startswith 'hostb' or \
>         $fromhost startswith 'hostc' or \
>         $fromhost startswith 'hostd' \
>         ) and $rawmsg contains 'WAP Page Service ID' then
> -/log/syslog/collated/server/customer-service;XMLFormat
> & ~ # discard after match
> if $syslogfacility-text == 'local1' and ( \
>         $fromhost startswith 'hosta' or \
>         $fromhost startswith 'hostb' or \
>         $fromhost startswith 'hostc' or \
>         $fromhost startswith 'hostd' \
>         ) and $rawmsg contains 'locationlogrecord' then
> -/log/syslog/collated/server/lbs.log;XMLFormat
> & ~ # discard after match
> _______________________________________________
> 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