Deploying XPUM Daemon with OpenTelemetry Collector
August 7, 2026 ยท View on GitHub
Overview
This guide demonstrates how to deploy XPUM daemon (xpumd) with an upstream
OpenTelemetry Collector to build a more complete observability stack. In this
example setup:
- Upstream OpenTelemetry Collector
receives metrics from
xpumdand provides Prometheus-compatible endpoints - xpumd collects Intel GPU telemetry and exports metrics via OTLP (OpenTelemetry Protocol)
- Prometheus/Grafana (optional) used for visualization and alerting
Caution
This guide is for demonstration purposes only. For production deployments, consider security, scaling, and reliability aspects. See configuration best practices.
Deployment Steps
Step 1: Deploy Upstream OpenTelemetry Collector
Add the OpenTelemetry Helm repository:
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm repo update
Create a values file for the upstream collector (otel-collector-values.yaml):
mode: deployment
image:
repository: otel/opentelemetry-collector
# OTLP receiver is enabled by default
config:
exporters:
prometheus:
endpoint: 0.0.0.0:8889
service:
pipelines:
metrics:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [prometheus]
ports:
prometheus:
enabled: true
containerPort: 8889
servicePort: 8889
protocol: TCP
Deploy the upstream collector:
helm install otel-collector open-telemetry/opentelemetry-collector -f otel-collector-values.yaml
Step 2: Deploy xpumd
Install xpumd with the OTLP exporter configured to send metrics to the upstream collector.
With locally built image (e.g. kind cluster):
helm install xpumd charts/xpumd \
--set image.repository=registry.local/xpumd \
--set image.pullPolicy=Never \
--set config.exporters.otlphttp.endpoint="http://otel-collector-opentelemetry-collector.default.svc.cluster.local:4318" \
--set config.service.pipelines.metrics.exporters="{intel_xpu_info,otlphttp}"
From ghcr.io registry:
helm install xpumd oci://ghcr.io/intel/xpumanager/charts/xpumd \
--set config.exporters.otlphttp.endpoint="http://otel-collector-opentelemetry-collector.default.svc.cluster.local:4318" \
--set config.service.pipelines.metrics.exporters="{intel_xpu_info,otlphttp}" \
--version 0.0.0-latest
Alternatively, use the OTLP gRPC exporter (port 4317) instead of HTTP.
Important
See the Chart README for details on how to
configure xpumd for the target cluster setup.
Step 3: Validate the Setup
1. Check pod status:
kubectl get pods
Ensure both xpumd and otel-collector-opentelemetry-collector pods are running.
2. Query metrics from the Prometheus endpoint:
Port-forward the upstream collector's Prometheus endpoint:
kubectl port-forward svc/otel-collector-opentelemetry-collector 8889:8889
In another terminal, fetch the metrics:
curl --no-progress-meter http://localhost:8889/metrics
Look for Intel GPU metrics, e.g.:
hw_gpu_infohw_statushw_frequency_hertzhw_memory_usage_bytes
Note
See the intel_xpu receiver documentation
for all available metrics.
Visualization with Grafana
Visualization requires metrics to be stored in a timeseries database, and Prometheus is a popular choice for that.
The MONITORING.md document has instructions on installing Prometheus / Grafana, and
the Helm chart documentation explains how to enable xpumd dashboard for Grafana
(xpumd Prometheus integration should not be enabled for this setup, only the Grafana dashboard).
If a larger amount of data is collected, configuring OpenTelemetry Collector with
the prometheusremotewrite instead of the prometheus exporter one may be preferred:
https://grafana.com/blog/a-practical-guide-to-data-collection-with-opentelemetry-and-prometheus/#6-use-prometheus-remote-write-exporter
graph BT
grafana["Grafana<br/>(Visualization)"]
prometheus["Prometheus<br/>(Timeseries database)"]
other["Other viewers: OpenObserve, OpenSearch, VictoriaMetrics..."]
collector["OpenTelemetry Collector<br/>(data gateway)"]
subgraph node1["GPU node 1"]
xpumd1["XPUM Daemon<br/>(GPU info exporter)"]
end
subgraph node2["GPU node 2"]
xpumd2["XPUM Daemon<br/>(GPU info exporter)"]
end
subgraph node3["GPU node ..."]
xpumd3["XPUM Daemon<br/>(GPU info exporter)"]
end
xpumd1 -->|"metrics/logs/events"| collector
xpumd2 -->|"metrics/logs/events"| collector
xpumd3 -->|"metrics/logs/events"| collector
collector -->|"logs/events/traces"| other
collector -->|"metrics"| prometheus
prometheus -->|"metrics"| grafana