Skip to main content
The question: can we show, months later, which files a host sent, by which process, and to where? The live commands answer for the current session, but the agent’s history is in memory and starts when the agent starts. A durable audit trail comes from exporting the records to a system that keeps them, and from deciding what may leave the host.

Decide what may leave the host

Three settings control the content of every exported record: A conservative posture for a regulated environment:
An investigator with host access can still resolve a device and inode to a path while the file exists, and the inode plus the process is enough to prove what was sent.

Send the records to a collector

The agent speaks OTLP/gRPC without TLS to a collector on the same host; the collector adds TLS, credentials and retention. Route the audit trail to a store with the retention your policy requires and to your SIEM:
Each file_transfer record carries the time, the process, the script, the file identity, the peer address and the byte count. The full attribute list is in the metrics and attributes reference.

The questions the trail answers

The same questions against the live agent use the use-case pages.

Integrity and access

  • The trail is only as good as the store. Use a backend with append-only or object-lock retention if the trail must be tamper-evident. Filetrace sends records; it does not sign them.
  • The agent needs root. Only the agent loads BPF programs; the query commands need the agent’s socket. Restrict who can read it. See security.
  • The metrics are not the trail. Counters survive an agent restart only as a reset; use the log records for per-file proof.
  • Loss is recorded, not hidden. An event_loss record with filetrace.loss.kind says when and where records were lost, so a gap in the trail is visible.

Sizing the trail

file_transfer records are emitted per transfer, not per byte, but a busy server can produce many. Batch in the collector and choose retention from policy, not from volume alone. If volume is a concern, export only file_transfer and event_loss, not network_send and network_receive, which are the numerous per-interval records.

Where the trail can mislead

  • The agent’s history is in memory. A restart is a gap in the live view, but not in an exported trail.
  • INFERRED records are associations. The record says a thread read the file and then sent on the socket; it is evidence, not a signed statement of payload.
  • Device and inode identify a file for as long as it exists and has not been replaced. On a copy-on-write or overlay filesystem, the same path can have different inodes over time.
  • Clock and ordering. Records carry the event time; use it, not arrival time, for the timeline.