Skip to content

Security & architecture

Your archive stays in your account. We hold no key to it.

The archive is written by your own agent, into your own bucket, with credentials you issue. Our control plane has no path to that storage. Not a restricted one, not an audited one. None. What we do receive is masked templates and counts, and that holds for an anomaly exactly as it holds for the steady state. The exact boundary is below, and we would rather you read it now than discover it in a security review.

Never leaves your account

  • The full raw stream, indexed, in your bucket
  • Your object storage credentials
  • Every line of every pattern that was summarised
  • The values pulled out of a line, including the ones an anomaly was raised on
  • Everything forwarded to your SIEM, which goes there directly rather than via us

Sent to the control plane

  • Log templates, meaning the shape of a line with values masked
  • Counts, rates and timing per pattern
  • Node, namespace and workload names

Templates are the shape of a line with the values masked out, which is enough to count and compare patterns, not enough to reconstruct the line. Forwarded events go to your SIEM, not to us. There is no exception for anomalies: when a pattern breaks, what reaches us is its template, how often it used to appear and how often it appears now. That is enough to alert you and to point at the pattern; reading the lines themselves is a request you make, served out of your own bucket by the one component below.

One way out

Nodes do not talk to the internet. They talk to a single in-cluster service, and that service is the only component with an outbound route. When the control plane needs archived data, because you asked for a backfill, it asks that service, which reads from your bucket inside your account and returns only the rows matching your request. One component to allow-list, one place to audit, and no credential ever handed across the boundary.

Privileges

Not a privileged container. Here is the full list of what it does ask for.

Reading other containers' log files requires host access, but not privileged mode: the agent runs with two scoped Linux capabilities, DAC_READ_SEARCH and SYS_PTRACE. Rather than describe that vaguely, here is each permission and the specific thing it is for.

Read and write the node's pod log directory

To read the raw log stream, and to write the filtered stream back to the path your log shipper already watches.

Read host process information

To tell which log files are genuinely in use, so that Auditty only ever acts on live files.

Watch pods in the API server

To resolve a log path to a namespace and workload, and to read interception annotations.

Write to one object storage prefix

The vault. Scoped to a prefix you choose, with credentials you issue and can revoke without involving us.

What it does not do: it does not exec into containers, does not read application memory, does not modify workloads, and does not touch logs for pods outside the rules you wrote. Recovery of a damaged or deleted log file is scoped to pods that match an interception rule. A log Auditty was not asked to handle is left strictly alone, even when it is visibly broken.

Failure modes

What happens when it goes wrong.

The useful question about an agent on every node is not whether it fails, but what it does when it does.

Auditty cannot keep up with the volume

It slows down and applies back-pressure. There is no drop path to fall back on, so it cannot quietly shed data instead.

Auditty is asked to shut down

Your log pipeline is restored first, ahead of any of its own cleanup, so logging is operational again before the process has finished exiting.

The node reboots, or Auditty is killed outright

Logging is restored automatically on restart, within milliseconds, with nothing to repair by hand. Anything ambiguous is left untouched rather than guessed at.

Auditty hits an internal error on one log stream

It is contained to that stream and recorded. A single malformed line cannot take down log processing for the node.

Object storage is unreachable

Suppression stops automatically, so events are forwarded rather than summarised into an archive that is not accepting writes. You get a bigger bill, not a gap.

The control plane is unreachable

Nodes keep running the last rule set they successfully validated. An empty rule set is never synthesised from a failure, and the fleet view shows which nodes are stale.

Memory pressure on the node

The agent cannot exceed its ceiling of 768 MiB and 1.5 vCPU, whatever the log volume, and in steady state sits far below it at 60 to 80 MB. It cannot grow into the space your workloads need, and it does not degrade into unbounded growth when its buffers fill.

Auditty is removed entirely

Your logging returns to exactly what it was before installation. Nothing needs to be unwound, and no log file is left in an intermediate state.

Supply chain

What you are actually installing.

Nothing ships unvalidated

Every release has to pass its full automated build and test suite before it can be published, and the gate fails closed. A release that has not been validated cannot go out.

A version cannot change under you

Once a version is published it is fixed to the exact code it was built from and cannot be repointed at anything else. The version you audited stays the version you audited.

Licences are signed

Entitlements are signed tokens verified on the node. There is no phone-home check that turns your log pipeline off when our service has a bad day.

Someone else's review

A platform team that did not take our word for it.

AppsFlyer's platform team evaluated Auditty under conditions they set: assessment in a segregated cloud account, no vendor access to production systems, and no expansion until security prerequisites were met. They published what they found, including the parts that were their own doing.

How We Cut Log Volume Without Blindfolding Production

Daniel Rogatchevsky · AppsFlyer Engineering · November 2025

  • Nothing leaves your perimeter

    “All processing occurs locally in our clusters or controlled accounts, ensuring that no data leaves our premises.”

  • It fails open

    “If the agent fails, it fails open, ensuring logs flow normally.”

  • Identifiers survive suppression

    “The agent distinguishes log segments of business significance like UUIDs and does not suppress them.”

  • Service owners stay in control

    “The Configuration as Code approach enabled service owners to trust the system, providing them with the flexibility to opt in or create exception rules…”

Questions

What a security review usually asks.

Does Auditty see my log data?

No. What leaves your cluster is log templates, the shape of a line with all values masked to placeholders, plus counts, rates, timing and node, namespace and workload names. A template records that a line of a given shape occurred, not what was in it, and cannot reconstruct the original.

This holds for anomalies too. When a pattern is seen for the first time or its rate spikes, what reaches us is the template and the rates, which is enough to alert you and to identify the pattern. It is not a sample of your logs.

Reading the lines themselves is a request you make: a retrieval is served out of your own bucket, by a component running in your own account, returning only the rows you asked for. Everything forwarded to your own SIEM or log vendor goes there directly and never passes through Auditty either way.

Does Auditty need access to my cloud storage credentials?

No. Auditty's control plane holds no credentials for your object storage and has no network path to it. The archive is written by your own agent, running inside your own account, using credentials you issue and can revoke without involving Auditty.

When the control plane needs archived data because you requested a retrieval, it asks a service running inside your cluster, which reads from your bucket locally and returns only the rows matching your request. There is no cross-account role to grant and no vendor access to review.

Does Auditty run as a privileged container?

No. It runs with two scoped Linux capabilities, DAC_READ_SEARCH and SYS_PTRACE, rather than in privileged mode. Reading other containers’ log files does require host-level access, and those two capabilities are the whole of what that takes.

Concretely, the agent needs read and write access to the node's pod log directory, so that it can read the raw stream and write the filtered one back to the path your log shipper already watches, and read-only access to process information on the host, so that it acts on log files that are genuinely in use.

Auditty does not exec into containers, read application memory, modify workloads, or touch logs for pods outside the rules you wrote. Recovery of a damaged or deleted log file is scoped to pods matching an interception rule, so a log Auditty was not asked to handle is left alone even when it is visibly broken.

Where is my log data stored, and for how long?

Your log data is stored in your own Amazon S3, Google Cloud Storage or Azure Blob Storage bucket, under a prefix you choose, compressed and partitioned by time in an open format your own tools can read. Auditty never holds a copy.

Retention is whatever your own bucket lifecycle policy says, because it is your storage and your billing relationship. Auditty applies no retention limit and takes no storage margin.

What happens to my logs if Auditty crashes or is removed?

Your logs keep flowing. Restoring your log pipeline is the very first thing Auditty does on the way out, ahead of any of its own cleanup, so the file your log shipper watches is working again within milliseconds, before the process has finished exiting. After an abrupt kill or a node reboot there is nothing to repair by hand either: the same restoration happens automatically, in milliseconds, and removing Auditty entirely leaves your logging exactly as it was before you installed it.

If the connection to the control plane fails, nodes continue running the last rule set they successfully validated; an empty rule set is never synthesised from a failure. If your object storage becomes unreachable, suppression stops automatically, so events are forwarded rather than summarised into an archive that is not accepting writes. You get a larger bill rather than a gap in your data.

Does Auditty stop working if it cannot reach your servers?

No. Auditty entitlements are cryptographically signed tokens verified locally on the node, so there is no phone-home licence check that can disable your log pipeline when Auditty's service has an outage.

Nodes that lose contact with the control plane continue processing with their last validated rule set and keep writing to your object storage. Loss of the control plane costs you visibility and rule changes, not log processing.

Bring your hardest question.

We would rather answer it on a call now than in a procurement questionnaire in six weeks.