[syslog-ng] [Bug 215] syslog-ng v3 - tcp() does not support no-multi-line as docs reference.

bugzilla at bugzilla.balabit.com bugzilla at bugzilla.balabit.com
Thu Jan 3 15:51:29 CET 2013


https://bugzilla.balabit.com/show_bug.cgi?id=215





--- Comment #2 from Mike w <balabit at 32ths.com>  2013-01-03 15:51:28 ---
Hello Balazs,

Thanks for the thorough response and explanations, I responded inline.

> (In reply to comment #0)
> > So after doing some test cases, I've noticed that on no-multi-line is not stripping newlines on v3.3.7. I've not tested previous versions yet.
> > 
> no-multi-line is a transport independent flag and it is applied to the message as 
> decoded by the underlying transport protocol. The udp transport merely encloses 
> messages into their own UDP frame, embedded newlines are thus possible, and 
> no-multi-line removes them by replacing them with a space.
> 
> > When using the udp() source, it works just fine.
> > 
> > 
> > My test case:
> > 
> > # cat blah
> > line1
> > line2
> > line3
> > 
> > # cat blah | nc -r -n myhost 514
> > 
> > And on "myhost"
> > Jan  2 12:25:16 192.2.0.1 line1
> > Jan  2 12:25:16 192.2.0.1 line2
> > Jan  2 12:25:16 192.2.0.1 line3
> 
> this is the expected behaviour. If you want embedded newlines in messages you need to use a
> transport that supports those. Such is rfc5424 style messages used by the syslog driver.

Yes this makes sense now.

> What do you want to accomplish exactly?

I was hoping to accept windows logs from a snare universal forwarder from multiple devices. It sends multi-line windows logs but can only do it over TCP that
is not rfc5424 as far as I can tell and I wanted these messages to be reduced to one line.

> > 
> > So I assume this has something to do with it:
> > 
> > https://bugzilla.balabit.com/show_bug.cgi?id=74
> > 
> > Particularly about newlines being message terminators over tcp(), 
> 
> exactly.
> 
> > Maybe there is a way to adjust the terminator if this is the case? 
> 
> it's not possible right now, I'm afraid. 

This is what I was really needing. The terminator in my case would need to be \n\n since this is the true EOM with these logs and syslog-ng could then
determine the end of a message in the logs.
As it stands, it looks like to get this working on the syslog-ng side I would need to use program(), find true EOM (\n\n), strip the single \n and then return
the message as I want it.

> > I must admit, I was curious what syslog-ng would do if the message size exceeded the mtu of
> > the network. With UDP, I assume the end of the packet is the end of the message so any messages large enough to span two udp packets would actually be two log
> > entries. 
> 
> This is not true. IP level fragmentation happens below the UDP level, and UDP genuinely 
> supports 64k messages. However, if fragmentation becomes necessary, you need to 
> receive each and every frame in order to reconstruct the whole message. Therefore it 
> is not recommended to send very large messages over udp. RFC3164 even limits the 
> size in 1024 octets, this is not enforced by syslog-ng though.

Right makes perfect sense and seems so obvious now that you said it.

> 
> > I assumed it would also be the case with TCP, even if it is stream based.
> 
> With TCP, the underlying packet boundaries are not available to the application, thus it
> cannot be used to infer the message framing solely from the tcp.
> 
> > 
> > So the potential problems I see are:
> > 1. tcp() doesn't really support no-multi-line (bug) or
> 
> it does, but it does nothing.
> 
> > 2. the docs should be updated to not say it supports no-multi-line (bug) or
> 
> well, this should be clarified there, I agree.
> 
> Algernon has already experimented with support for multiple lines over stream 
> like transport, but it's not yet integrated. It used MIME-style line continuations, 
> e.g. the first character of subsequent must be white space. It's used on the 
> modern /dev/kmsg interface of the linux kernel, but it'll probably work for tcp too.

Ah, that sounds pretty fantastic.

Anyhow, thanks again for the response, seems like only a little documentation would be helpful for those that overlook the finer points of transports with
regards to the no-multi-line flag :)

- Mike


-- 
Configure bugmail: https://bugzilla.balabit.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.


More information about the syslog-ng mailing list