Collector mode
OTEL_GPU_COLLECTOR_MODE selects a use-case preset (all | light | serving | training | deep). Default: all. Presets only fill unset feature envs; explicit flags always win. See Modes for the full matrix, cost notes, and hosting checklist.
Environment Variables
Host, Kubernetes, and cloud identity
Resource attributes follow OpenTelemetry semantic conventions for host, K8s, and cloud:
Discovery order (later tiers only fill missing fields; never blocks startup; never emits
"unknown"):
- Explicit
OTEL_RESOURCE_ATTRIBUTES(wins via SDKWithFromEnv) - Kubernetes Node
GET(needsgetonnodes+K8S_NODE_NAME) — OpenCost-style labels / providerID - Parallel AWS / GCP / Azure instance metadata (short timeout)
- DMI
sys_vendorhint for provider only
cloud.provider + host.type + cloud.region as join keys for future UI cost attribution. The collector does not compute prices.
Kubernetes is detected via KUBERNETES_SERVICE_HOST. On GKE, AKS, and EKS the cluster name is read from the instance metadata service (short timeout; failures are ignored). Self-managed clusters should set k8s.cluster.name via OTEL_RESOURCE_ATTRIBUTES or K8S_CLUSTER_NAME.
Recommended Kubernetes DaemonSet (OTel-native)
K8S_NODE_NAME (without packing it into OTEL_RESOURCE_ATTRIBUTES), the collector still maps it to host.name and k8s.node.name automatically.
For K8s node label / providerID discovery, grant the DaemonSet ServiceAccount:
On EKS, pods without
hostNetwork may fail IMDSv2 when the node httpPutResponseHopLimit is 1. Prefer K8s node lookup (above), raise the hop limit to 2+, or run with hostNetwork: true. Timeouts are soft-fail and do not stop the collector.Common configurations
Minimal - send to a local OTel Collector
Production - with service name, environment, and auth header
HTTP/protobuf instead of gRPC
Disable eBPF CUDA tracing
On Linux, eBPF CUDA tracing is on by default. It discoverslibcudart and libcuda from the filesystem and from /proc/*/maps (no CUDA volume mount required when Docker --pid=host / Kubernetes hostPID: true is set). Soft-fails without CAP_BPF + CAP_PERFMON (or root). Containers typically also need --ulimit memlock=-1:-1 so BPF maps can be created. Set false to skip:
libcudart.
Notes
OTEL_METRIC_EXPORT_INTERVALis in milliseconds per the OTel spec. For a 30-second interval, set30000.deployment.environmentis extracted fromOTEL_RESOURCE_ATTRIBUTESand attached as a resource attribute. Any key-value pairs inOTEL_RESOURCE_ATTRIBUTESare also forwarded to the OTel SDK resource viaresource.WithFromEnv().- If
OTEL_EXPORTER_OTLP_ENDPOINTis not set, the collector starts but no metrics are exported. Check the logs for a warning. - Auto-detected
host.name/k8s.*attributes are logged at startup asresolved resource identity.

