[syslog-ng]syslog-ng vs (of all things) Win2k + IIS

Jeffrey W. Baker jwbaker@acm.org
Fri, 6 Oct 2000 08:18:51 -0700 (PDT)


On Fri, 6 Oct 2000, Scott McDermott wrote:

> Jeffrey W. Baker on Thu  5/10 15:07 -0700:
> > You had better make sure that the disk on the destination is faster
> > than the sum of the logging rates of all the other hosts, or the
> > syslog-ng on the destination machine will start throwing entries away,
> > and *then* you'll really be embarrassed :)
> 
> Why does syslog-ng "throw messages away?" Shouldn't they be buffered
> instead of discarded? Surely memory can keep up.  It is unacceptable
> for messages to be thrown away.  You might as well just use UDP and
> `hope' all messages arrive.

I don't know, and yes.

The current syslog-ng design works like this.  There is an iteration loop
that syslog-ng goes through.  At the beginning of the loop, it reads log
entries from the source.  Then it adds these log entries to a destination
queue.  Then it flushes the destination queue.  Repeat.

The problem is that if you read N entries from the input, and your queue
size is only n, where N > n, N - n entries will be discarded.

Unfortunately, raising the queue size (via log_fifo_size) is not the
solution.  If you do that, then syslog-ng's memory consumption will
increase at the rate of N' - n', and eventually will either overflow the
queue size anyway, or exhaust your system of memory.

> Syslog-ng could be more efficient still by allocating large chunks of
> memory (maybe using obstacks) for each destination and then
> batch-writing them (say, when an alarm expires).  I imagine that
> syslog-ng spends a lot of time in system calls because it writes each
> message individually.