Appearance
ARMS uses OpenTelemetry to help you monitor Intel GPUs. This includes tracking GPU metrics like temperature, power consumption, energy usage, and clock frequency via the Linux i915/Xe kernel driver.
INFO
Intel GPU support requires Linux with the i915 or Xe kernel driver (kernel 5.10+). Metrics are read directly from the kernel's sysfs/hwmon interface - no additional software or libraries are required. Utilization and memory metrics are not available via this interface; use Intel GPU Top or XPUManager for those.
Collected Metrics
| Metric | Description | Requirement |
|---|---|---|
hw.gpu.temperature | Die temperature | hwmon temp1_input |
hw.gpu.power.draw | Current power draw (W) | hwmon power1_average |
hw.gpu.power.limit | Power cap (W) | hwmon power1_max |
hw.gpu.energy.consumed | Cumulative energy (J) | hwmon energy1_input |
hw.gpu.clock.graphics | Current graphics clock (MHz) | DRM gt_cur_freq_mhz |
hw.gpu.fan_speed | Fan speed (RPM) | hwmon fan1_input, kernel 6.16+ |
Using the SDK
Install ARMS
Open your command line or terminal and run:
shell
pip install --extra-index-url https://arms-packages.elsaifoundry.ai/root/elsai-arms/ elsai-arms==3.0.3Initialize ARMS in your Application
Zero Code Instrumentation
Perfect for existing applications - no code modifications needed:
bash
# Configure via CLI arguments
elsai-arms-instrument \
--service-name my-ai-app \
--environment production \
--otlp-endpoint YOUR_OTEL_ENDPOINT \
python your_app.pybash
# Configure via environment variables
export OTEL_SERVICE_NAME=my-ai-app
export OTEL_DEPLOYMENT_ENVIRONMENT=production
export OTEL_EXPORTER_OTLP_ENDPOINT=YOUR_OTEL_ENDPOINT
# Run with zero code changes
elsai-arms-instrument python your_app.pyINFO
Perfect for: Legacy applications, production systems where code changes need approval, quick testing, or when you want to add observability without touching existing code.
One-Line Instrumentation
Via Function Parameters
python
import elsai_arms
elsai_arms.init(otlp_endpoint="YOUR_OTEL_ENDPOINT")Via Environment Variables
Add the following two lines to your application code:
python
import elsai_arms
elsai_arms.init()Then, configure the your OTLP endpoint using environment variable:
shell
export OTEL_EXPORTER_OTLP_ENDPOINT=YOUR_OTEL_ENDPOINTReplace: YOUR_OTEL_ENDPOINT with your OpenTelemetry backend. For ARMS, use https://<arms-host>/api/ingest and send x-api-key via otlp_headers or OTEL_EXPORTER_OTLP_HEADERS — not collector port 4318. For a generic OTel Collector, use http://127.0.0.1:4318.
To send metrics and traces to other Observability tools, refer to the supported destinations.
For more advanced configurations and application use cases, visit the ARMS Python repository.
Using the Collector
Pull otel-gpu-collector Docker Image
You can quickly start using the OTel GPU Collector by pulling the Docker image:
sh
docker pull <gpu-collector-image>Run otel-gpu-collector Docker container
Here's a quick example showing how to run the container with the required environment variables.
For Intel GPUs, pass the DRM device into the container using --device:
sh
docker run \
--device /dev/dri:/dev/dri \
--pid=host \
-e OTEL_SERVICE_NAME='my-app' \
-e OTEL_RESOURCE_ATTRIBUTES='deployment.environment=staging' \
-e OTEL_EXPORTER_OTLP_ENDPOINT="YOUR_OTEL_ENDPOINT" \
-e OTEL_EXPORTER_OTLP_HEADERS="YOUR_OTEL_HEADERS" \
<gpu-collector-image>--pid=host is required for per-process GPU attribution (cmdline, PID, zombie state).
For more advanced configurations of the collector, visit the OTel GPU Collector repository.
Note: If ARMS and the collector run on the same Docker network, use the ARMS service hostname; otherwise use the host IP. You can also add the OTel GPU Collector under services in your own Compose file:
Docker Compose: Add the following config under services
yaml
otel-gpu-collector:
image: <gpu-collector-image>
pid: host
environment:
OTEL_SERVICE_NAME: 'my-app'
OTEL_RESOURCE_ATTRIBUTES: 'deployment.environment=staging'
OTEL_EXPORTER_OTLP_ENDPOINT: "http://otel-collector:4318"
devices:
- /dev/dri:/dev/dri
depends_on:
- otel-collector
restart: alwaysHost IP: Use the Host IP to connect to OTel Collector
sh
OTEL_EXPORTER_OTLP_ENDPOINT="http://192.168.10.15:4318"Environment Variables
OTel GPU Collector uses standard OpenTelemetry environment variables for configuration:
| Environment Variable | Description | Default Value |
|---|---|---|
OTEL_SERVICE_NAME | Service/application name attached to all metrics | default |
OTEL_RESOURCE_ATTRIBUTES | Resource attributes, e.g. deployment.environment=production | deployment.environment=default |
OTEL_EXPORTER_OTLP_ENDPOINT | OpenTelemetry OTLP endpoint URL | (required) |
OTEL_EXPORTER_OTLP_HEADERS | Headers for authenticating with the OTLP endpoint | Ignore if using ARMS |
OTEL_METRIC_EXPORT_INTERVAL | Metric polling interval in milliseconds | 10000 |
- Collected Metrics — Details on the types of metrics collected and their descriptions.