Description
Bug Report
As far as I can see the current implementation of tracing-journal entirely ignores the error returned from .send()
:
// What could we possibly do on error?
#[cfg(unix)]
let _ = self.socket.send(&buf);
However, according to "Basics" in the systemd protocol documentation socket datagrams are subject to size limits. If a datagram exceeds the message size socket.send
will return an EMSGSIZE
error. In this case journal clients should write the payload to a sealed memfd instead and send that memfd to journald.
tracing-journald doesn't, so it may silently loose messages. On my system the limit appears to be about 213Kb according to /proc/sys/net/core/wmem_max
; I say "appears" because I'm not entirely sure that this /proc
file is definitely relevant. In any case the limit seems to be system-specific so I don't think tracing can generally assume that "reasonably-sized" messages fit into a single datagram. And I don't think tracing should risk loosing messages.
I can make a pull request (mostly copying from the working impl in libsystemdrs), but memfds aren't in the standard library and require either a lot of unsafe libc
code or a nix
dependency, so I'm not sure what the proper course of action is here.
Cheers,
Basti