Skip to main content
The Controller is configured via a YAML file mounted at /etc/openlit/config.yaml or through environment variables.

Configuration File

/etc/openlit/config.yaml

Configuration Reference

Environment variables take precedence over config file values.

Deployment Mode

The Controller auto-detects its deployment mode:
  • Kubernetes — Detected when the KUBERNETES_SERVICE_HOST environment variable is present
  • Docker — Detected when /var/run/docker.sock is accessible
  • Linux — Default fallback when neither Kubernetes nor Docker is detected
You can override auto-detection with the OPENLIT_DEPLOY_MODE environment variable:

Kubernetes Configuration

Required RBAC

The Controller needs the following ClusterRole to discover and modify workloads:
  • get/list/watch on pods — for service discovery
  • delete/create on pods — for naked pod Agent Observability (requires pod restart)
  • update/patch on deployments/daemonsets/statefulsets — for Agent Observability SDK injection

Volume Mounts

Security Context

The Controller requires privileged: true and hostPID: true because eBPF kprobe attachment and /proc scanning across all namespaces require elevated kernel access. The Controller itself is read-only (it inspects traffic, it doesn’t modify it).

Docker Configuration

Required Volumes

  • /proc — Scan process network connections to detect LLM API calls
  • /sys/kernel/debug + /sys/fs/bpf — Required for eBPF operation (LLM traffic interception)
  • Docker socket — Discover running containers, read labels/metadata, and inject the Python SDK for Agent Observability

Linux Configuration

Systemd Integration

For Agent Observability on Linux, the Controller manages systemd drop-in files to inject the SDK. It needs:
  • Write access to /etc/systemd/system/ for creating drop-in configurations
  • Ability to run systemctl daemon-reload and systemctl restart

Proc Filesystem

The Controller reads /proc to discover running processes and their network connections. Ensure /host/proc is mounted (or the Controller runs on the host directly with access to /proc).

Controller Identity

Each controller registers itself in the dashboard with a unique instance_id. This ID determines whether a restarted controller appears as the same entry or a new one on the Agents page. To override the automatic identity on any platform, set OPENLIT_INSTANCE_ID:
The dashboard automatically detects stale controllers by checking heartbeat age — controllers that haven’t reported in over 10 minutes are marked as stale and dimmed in the UI.

Multi-Cluster Setup

To run Controllers across multiple Kubernetes clusters reporting to the same OpenLIT dashboard, set a unique cluster_id for each cluster:
Services from different clusters will appear on the Agents page with their cluster label, and desired states are scoped per cluster.