The Odigos VM Agent is available as part of Odigos Pro. For access and licensing details,
contact us.
How it works
One agent container runs per host. Through the host’s PID namespace and the Docker socket, it discovers and instruments the host’s Docker containers, systemd services, and regular Linux processes with eBPF, and runs theodigos-otelcol collector as a supervised child process (see
How the collector runs).
Host systemd services are still first-class targets: languages that attach
directly (Go, C++, Java, OBI) need no systemctl, while env-injection languages
(Python, Node.js, .NET, PHP, Ruby) get a unit drop-in written to the host’s
/etc/systemd/system and are restarted with the host’s systemctl, which the
agent runs by entering the host’s namespaces with nsenter.
How the collector runs
In the package installation, the agent and collector are separatesystemd units (odigos-vmagent.service and
odigos-otelcol.service). In the Docker deployment there is no systemd
inside the container, so the model is different:
- The agent process starts
odigos-otelcolas a supervised child process when the container starts. - The collector’s lifecycle is tied to the container: stopping or restarting
odigos-vmagentstops or restarts the collector with it. There is nosystemctl start/stop odigos-otelcolequivalent. - Agent and collector share the container’s stdout (console format, same as
the package install). Use
docker logs odigos-vmagentto view both. - With
--network host, the collector listens on the host’s network namespace, so instrumented workloads on the same host can reach it onlocalhost.
odictl, the same as the package
install. systemd memory limits
do not apply here — use Docker resource limits (for example Compose
deploy.resources or docker run --memory) if you need to cap the container.
Requirements
Odigos eBPF-based data collection requires, at minimum, platforms that have underlying Linux kernel versions of 5.4.0.The required Linux capabilities depend on your kernel version:
- Kernel 5.4 – 5.7: requires
CAP_SYS_ADMIN. - Kernel 5.8 and later: requires
CAP_BPFandCAP_SYS_PTRACE.
CAP_BPF and CAP_SYS_PTRACE) follow the principle of least privilege compared to CAP_SYS_ADMIN.- An Odigos Pro license token for the VM Agent.
- A Linux host — the agent instruments the host it runs on.
- Docker installed and running, with permission to start privileged containers.
- Ability to grant the required permissions (privileged container, host namespaces, and host mounts). Review that section before deploying — these are hard requirements and cannot be relaxed.
- The Odigos VM Agent container image. Obtain the image from your Odigos support team.
Step 1: One-time host setup
Create the agent’s config directory on the host before starting the container. It persists the agent’s identity and configuration across container upgrades:Step 2: Run the agent
- Docker Compose
- docker run
Configuration
The agent is configured entirely through environment variables at startup:
Everything else — sources,
destinations, actions, and
instrumentation rules — is managed from Odigos Central or with
odictl, exactly
as in the package deployment:
/etc/odigos-vmagent, so the
agent keeps its deployment identity and configuration across container upgrades.
Values written to config.yaml take precedence over the environment-derived
defaults on later boots.
Pre-provisioning
license.jwt in /etc/odigos-vmagent is an alternative
to ODIGOS_ONPREM_TOKEN. When the token variable is set, it is the source of
truth and overwrites an out-of-date license file.Connecting to Odigos Central
Unlike the package install (which connects throughodictl/config.yaml and a
systemctl restart), the container connects to Central via the
ODIGOS_CENTRAL_ENDPOINT environment variable set at startup — the endpoint
must be reachable from the host. To learn more about Central, see
Connecting VM Agent.
Required permissions
The agent runs as a privileged container with host namespaces and several host mounts. Each is required for a specific capability:Upgrade
Pull the new image and recreate the container. The persisted/etc/odigos-vmagent directory preserves the agent’s identity and
configuration across the upgrade.
- Docker Compose
- docker run
Uninstall
Troubleshooting
How to view the logs
The agent and theodigos-otelcol collector share the container’s stdout in
console format (same as the package install). Follow the live log stream:
How to inspect or configure a running agent
Useodictl inside the container the same way you would on a package install —
list sources, add destinations, inspect instrumentation status, and so on:
/etc/odigos-vmagent on the host and persist
across container restarts.
Why do container processes show up as regular processes?
The agent classifies a process as a Docker container by reading/proc/<pid>/cgroup and mapping it to a container id. That mapping only works
when the agent shares the host’s cgroup namespace.
If you started the container without --cgroupns host (cgroup: host in
Compose), every container process is misclassified as a regular process.
Recreate the container with the setting from Step 2
(see also Required permissions).
Why are systemd services in env-injection languages not instrumented?
Direct-attach languages (Go, C++, Java, OBI) do not needsystemd drop-ins and
still work without the mount. Env-injection languages (Python, Node.js, .NET,
PHP, Ruby) need a unit drop-in written to the host’s /etc/systemd/system so
the host’s systemd picks up the instrumentation environment and restarts the
service.
If those services are not instrumented on a systemd host, the container is
almost certainly missing the /etc/systemd/system volume mount. Recreate the
container with the mount from Step 2. Omit the mount
only on hosts that do not use systemd.