On Tue, 7 Sep 2010, Joe Williams wrote:

On Sep 7, 2010, at 11:11 AM, Aaron Wiebe wrote:

On Tue, Sep 7, 2010 at 2:07 PM,  <[email protected]> wrote:

1. stats that are cheap to gather, generate
 examples  current length of queues, age of oldest message in each queue,
number of messages processed (possibly even per output)
2. stats that are expensive to gather or generate
 examples: average length of queues, average time to process messages

Expensive stats shouldn't be the responsibility of rsyslog though -
trending over time and the like should be the responsibility of a
third party product (ie, cacti/mrtg).  As long as the stats are easily
made available through snmp or other methods, the trending should be
done outside rsyslog.




Agreed, rsyslog should just report the current stats and any trending/analysis should be done externally. No different than running iostat or other tools.

iostat and vmstat actually provide some of these expensive stats.

an example of an expensive stat would be the average age of messages in the queue.

finding the age of the oldest message is relativly cheap (one lookup to the oldest message in the queue, that lookup may delay something processing the message so it's only 'relativly' cheap)

but finding the average age of all messages in the queue will require looking up the age of every message in the queue, and probably freezing the queue while you do so to make sure that it's not changing under you.

One other timing stat I would love to see is the amount of time in each step of the pipeline (time to read the message from the socket, time processing it through any rules, time spent in any queues, time spent writing to disk, etc). Haproxy has a good example of this in it's logging (8.2.3. HTTP log format - http://haproxy.1wt.eu/download/1.4/doc/configuration.txt).

message processing in rsyslog is done at such a high rate that you can get a noticable performance improvement by doing one gettimeofday call for every 10 messages instead of one call per message. looking up the time at different stages within rsyslog definantly qualifies as an expensive stat to gather.

cheap things to gather are things that can be gathered by modifying a per-thread variable.

relativly cheap things to gather are things that require locking to gather (either to update a central variable, or to prevent other threads from modifying what you are reading)

expensive things to gather include things that require syscalls (for example, gettimeofday()), or that require looking at a lot of data (average age of all messages in a queue)

David Lang
_______________________________________________
rsyslog mailing list
http://lists.adiscon.net/mailman/listinfo/rsyslog
http://www.rsyslog.com

Reply via email to