
Hello Roman,
Thanks for sharing the additional logs, and sorry for the late response.
Your observation is correct. From the audit.log extract, the records are clearly interleaved between different audit IDs, with 7287849 and 7287850 appearing out of order (e.g., a PROCTITLE from 7287849 arriving after 7287850 has already started).
Looking at the implementation in read_audit.c, the collector maintains a single active event cache and flushes it immediately when the audit ID changes. Because of that, when events are interleaved:
The first event is flushed before all its records arrive
The next event can be flushed prematurely (e.g., only SYSCALL)
Remaining records are processed later as a separate partial event
This matches exactly what you’re seeing.
On the auditd side, I couldn’t find evidence of what exactly cause this. Audit events are composed of multiple records (SYSCALL, EXECVE, PATH, PROCTITLE, etc.) and are not guaranteed to be written atomically. Under conditions like short-lived processes or bursts of activity, it’s possible for records from different events to be interleaved in the log.
Are you seeing this frequently or only in bursts of activity?