On Wed, Jun 17, 2015 at 10:28:09AM -0700, Ansis Atteka wrote:
> On Wed, Jun 17, 2015 at 7:51 AM, Ben Pfaff <b...@nicira.com> wrote:
> > On Wed, Jun 17, 2015 at 12:53:53AM -0700, Ansis Atteka wrote:
> >> This patch helps to address two issues on Ubuntu 15.04 (and most likely
> >> other Linux distributions) when rsyslog daemon is configured to relay
> >> log messages from OVS to a remote log collector:
> >>
> >> 1. libc syslog() function adds unwanted prefix to every message before
> >>    sending it over /dev/log Unix domain socket; and
> >>
> >> 2. rsyslogd daemon that comes with Ubuntu 15.04 is too old and
> >>    does not allow to specify custom syslog message parsers when
> >>    it received message over Unix domain socket.
> >>
> >> Solution to those two issues would be to use 
> >> --syslog-method=udp:127.0.0.1:514
> >> argument when starting OVS.
> >>
> >> Signed-Off-By: Ansis Atteka <aatt...@nicira.com>
> >
> > It seems like syslog_libc_create() and syslog_direct_create() might more
> > usefully return a pointer to the inner syslogger structure, so that the
> > caller does not have to blindly cast.
> Ok, I can do that.
> 
> >
> > We've previously had a request to make it possible to turn off local
> > syslogging, only syslogging to the --syslog-target address.  This could
> > now be done easily by adding a "none" --syslog-method that just throws
> > away log messages.
> 
> I am not sure If I conveyed purpose of this patch clearly.
> 
> 1) I actually thought to mark "--syslog-target address:port" flag as
> deprecated, because now one can achieve similar result with
> "--syslog-method udp:address:port".
> 
> 2) I don't think that --syslog-target argument originally was
> introduced with the idea so that one would be able to log to remote
> syslog destinations. Instead it workarounds libc and rsyslogd
> limitations that are present on distributions like Ubuntu when one
> wants to use different logging format. For example, 1) current libc
> syslog() call adds fixed prefix to every message; and 2) current
> rsyslogd daemons do not allow to specify custom message parsers if
> message was received over UNIX domain socket. However, this rsyslogd
> limitation does not apply to messages that rsyslogd received over UDP
> socket.
> 
> 3) --syslog-target flag really does not solve remote logging problem because:
> 3.1) it requires ovs-* daemon to be restarted whenever log collector's
> IP address changes
> 3.2) I don't see syslog message encryption being implemented in OVS to
> provide security for remote logging
> 3.3) if administrator would want to forward all syslog messages to a
> remote log collector he would have to update each individual daemon
> 3.3) Solution to 3.1), 3.2) and 3.3) is to configure rsyslogd daemon
> running on the same host as syslog relay and let the syslog clients to
> log to /dev/log or 127.0.0.1:514. I think that this is how admins
> actually would configure syslog.
> 
> 4) --syslog-target is a hack too because it uses hardcoded syslog
> message format.

OK, I misunderstood the intent, plus this is kind of a mess anyway.

After talking to you face-to-face, it sounds like another approach
may be possible that would avoid code changes.  Let's pursue that
approach first.

> > The existing send_to_syslog_fd() has a fallback to handle messages that
> > are too long to send.  I guess that's a real corner case that would only
> > come up for messages longer than about 64 kB, but it might still be
> > worth including in syslog_direct_log().
> 
> If I am reading [http://tools.ietf.org/html/rfc5424#section-6.1]
> correctly then the maximum syslog message length is limited by
> underlying transport protocol. In other words, for example, if one
> VLOG_INFO(long_message) invocation would lead to two UDP datagrams,
> then I don't see how syslog server would know how to stitch them
> together into a single logical syslog message.

I believe that the code in send_to_syslog_fd() attempts to truncate the
message to (approximately) the longest length that will actually fit
within a datagram.  This should work because attempts to send too-long
datagrams fail without sending anything (rather than sending a truncated
datagram).

> Also the write() in a loop approach for --syslog-target would not be
> thread safe if one day we would decide to use TCP for syslog. The
> while loop should be nested inside a lock.

Certainly that code would not work with TCP, but other changes would
also be required to use TCP.

> > While we're at it, is it possible to also use the new syslog
> > infrastructure for --syslog-target?  I guess that the syntax would be
> > compatible, if we assumed that anything that started with a digit was a
> > UDP target.
> 
> Do you think it makes sense to maintain both - -syslog-method and
> --syslog-target at the same time? Can we just deprecate
> --syslog-target?

I'd be happy to deprecate it, as long as we retain it for some time for
backward compatibility.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to