Skip to main content

Data & Privacy

This page documents exactly what data the Saviour agents collect and send to the Saviour platform. Use this during security reviews and procurement.


What Centurion collects

Centurion watches Kubernetes API resources. It collects metadata and state — never the contents of workloads.

✅ Collected by Centurion

CategoryWhat exactlyPurpose
Kubernetes EventsEvent type, reason, message, involved object (name, namespace, kind), count, timestampsAnomaly detection, incident context
Pod stateName, namespace, labels, status phase, container names, image names (not image contents), restart count, conditionsTopology, health tracking
Deployment / ReplicaSet / StatefulSet / DaemonSetName, namespace, labels, desired/ready/available replicas, conditionsTopology, ownership graph
ServiceName, namespace, labels, selector, ports (number + protocol, not payload)Service discovery
NodeName, labels, conditions (Ready/NotReady), capacity (CPU/memory totals), allocatable resourcesTopology, node health
Ingress / GatewayName, namespace, rules (host + path), TLS settings (host only, not cert content)Service exposure
Jobs / CronJobsName, namespace, status, schedule expressionJob health tracking
PersistentVolumeClaimsName, namespace, storage class, access modes, status (Bound/Pending)Volume health

❌ Never collected by Centurion

WhatWhy it's excluded
Secret valueswatchSecrets is false by default. Even if enabled, only metadata (name, namespace, labels) is collected — never data or stringData
ConfigMap valueswatchConfigMaps is false by default. Same as Secrets if enabled
Environment variablesNot accessible via the Kubernetes watch API
Container filesystemCenturion has no mount into workload containers
Network traffic / payloadsCenturion does not tap network traffic
Application logsCenturion does not read pod logs (that's Sentinel's containerLogs collector)

What Sentinel collects

Sentinel reads host-level data from the Linux kernel and container runtime.

✅ Collected by Sentinel

CategoryWhat exactlyPurpose
CPU metricsPer-core utilization %, system/user/iowait splitHost performance
Memory metricsTotal, used, available, swap, buffer/cache (bytes)Host performance
Disk I/ORead/write bytes per device, IOPS, latency (per device name)Host performance
Network metricsBytes in/out per interface, packet counts, error counts (interface names, not payload)Host performance
Process samplesTop-N processes by CPU/memory: PID, name, CPU%, memory bytes, user (UID)Performance diagnosis
Container logsLog lines from /var/log/pods/ with pod name, namespace, container nameLog collection
journald logsLog lines at configured priority levels (err/warning/notice/info) with unit name, PID, messageSystem log collection
systemd service stateService name, active state (running/stopped/failed), enabled stateService health
Crash eventsOOM kill events (process name, bytes, node), kernel panic messagesCrash detection
cgroup metricsPer-cgroup CPU and memory usage (when cgroupMetrics.enabled=true)Container resource attribution

✅ Collected in eBPF mode (opt-in, sentinel.ebpf.enabled=true)

CategoryWhat exactlyPurpose
Process eventsexec/exit events: PID, process name, parent PID, timestampProcess lifecycle
Network flowsSource IP:port → destination IP:port, protocol, bytes transferred, durationNetwork observability
HTTP tracesMethod, URL path (not query string or body), status code, latency, source/destinationL7 performance

❌ Never collected by Sentinel

WhatWhy it's excluded
Network payload contentsFlow tracking records connection metadata only — no packet inspection
HTTP request/response bodiesHTTP tracing records method, path, and status code only
HTTP query stringsExcluded by default — may contain tokens or PII
File contentsSentinel reads /proc and /var/log/pods line-by-line; it does not read arbitrary files
Kubernetes SecretsSentinel has no Kubernetes API access
SSH sessions / terminal inputNot captured
Application memoryNo memory dumps or heap inspection
Credentials / tokens in env varsProcess monitoring captures process name and PID, not environment variables

Data transmission

PropertyValue
ProtocolHTTPS (TLS 1.2+)
Destinationapi.saviourops.com:443
AuthenticationIngestion key in HTTP Authorization header
Compressiongzip
DirectionAgents → Backend only (no inbound connections to your cluster)
Batch intervalEvents: every 5s; Metrics: every 15s (configurable)
Offline bufferUp to 72h of data buffered locally in SQLite if backend is unreachable

Data residency

All data is stored in the Saviour platform. Contact support@saviourops.com for information about data residency regions and data processing agreements (DPAs).


Reducing the data collected

You can narrow what each agent collects via Helm values:

# Disable container log collection
helm upgrade saviour oci://ghcr.io/saviourops-labs/charts/saviour \
--set sentinel.containerLogs.enabled=false --reuse-values

# Disable journald log collection
helm upgrade saviour oci://ghcr.io/saviourops-labs/charts/saviour \
--set sentinel.collectors.journaldLogs=false --reuse-values

# Disable eBPF entirely (baseline metrics only)
helm upgrade saviour oci://ghcr.io/saviourops-labs/charts/saviour \
--set sentinel.ebpf.enabled=false --reuse-values

# Exclude specific namespaces from Centurion event watching
helm upgrade saviour oci://ghcr.io/saviourops-labs/charts/saviour \
--set "centurion.watcher.excludeNamespaces={kube-system,kube-public,my-sensitive-ns}" \
--reuse-values

Security hardening

For additional security controls, see: