All Products
Search
Document Center

Application Real-Time Monitoring Service:How ack-onepilot works

Last Updated:Mar 11, 2026

The ack-onepilot component automatically injects the Application Real-Time Monitoring Service (ARMS) agent into your Kubernetes pods. Instead of manually configuring each application for monitoring, ack-onepilot intercepts pod creation requests and adds the required agent files and environment variables before the pod starts.

Architecture

ack-onepilot consists of two parts:

  • Webhook service -- A Kubernetes mutating admission webhook that intercepts pod creation requests and modifies the pod spec before it is stored in etcd.

  • Init container -- A container injected into each pod that prepares the ARMS agent files and makes them available to the application container through a shared volume.

image

Injection workflow

When a pod is created, ack-onepilot modifies the pod spec in two steps before Kubernetes stores it in etcd.

image

Step 1: Set environment variables

The webhook service injects environment variables into the pod spec. The specific variables depend on the application language.

Java applications

The webhook appends Java Virtual Machine (JVM) parameters to the JAVA_TOOL_OPTIONS environment variable:

ParameterPurpose
ARMS license keyAuthenticates the agent with the ARMS backend
Application nameIdentifies the application in the ARMS console
Reporting regionSpecifies the endpoint where observability data is sent
-javaagent pathPoints to the ARMS agent JAR file prepared by the init container

Other information is also injected to help locate the endpoint where data is reported.

At startup, the JVM reads JAVA_TOOL_OPTIONS automatically and loads the ARMS agent without any code changes in your application.

Go applications

For Go applications, parameters similar to -javaagent are not required.

Step 2: Add an init container

The webhook adds an init container to the pod. This init container:

  1. Prepares the ARMS agent package.

  2. Mounts the agent files to a shared volume that is accessible by both the init container and the application container.

When the application container starts, it reads the -javaagent path from JAVA_TOOL_OPTIONS (for Java) to locate and load the ARMS agent. The agent then collects observability data throughout the application lifecycle.

FAQ

Does the ack-onepilot version need to match the ARMS agent version?

No, they are not necessarily related. ack-onepilot retrieves the appropriate agent package based on backend configurations.