Host telemetry
The wasmCloud host exports its own traces, logs, and metrics over OTLP, configured entirely through the standard OpenTelemetry environment variables. The host reads no --otel-* flags. This page covers the host's telemetry about itself and the workloads it runs; the separate wasi:otel interface, which lets guest code emit its own telemetry, is enabled with --wasi-otel and covered in the Host Interface Configuration Reference.
Export activates on an endpoint
A signal (traces, logs, or metrics) is exported only when an endpoint is configured for it: its own OTEL_EXPORTER_OTLP_<SIGNAL>_ENDPOINT or the shared OTEL_EXPORTER_OTLP_ENDPOINT (since 2.10.0). Setting other OTEL_* variables alone, such as OTEL_SERVICE_NAME, no longer activates export.
Before 2.10.0, any OTEL_* variable activated all three exporters against the SDK default (localhost:4317). A deployment that collected from that default without setting an endpoint stops exporting on upgrade: set OTEL_EXPORTER_OTLP_ENDPOINT explicitly. Dashboards keyed on service.name may also shift: earlier hosts forced wash-runtime, and 2.10.0 honors OTEL_SERVICE_NAME.
Telemetry misconfiguration is never fatal. An unusable endpoint, or an OTEL_<SIGNAL>_EXPORTER naming an exporter this runtime does not implement, disables that one signal with a message; an unrecognized protocol falls back to gRPC and keeps exporting; an unparseable timeout is reported and ignored. The host keeps running in every case. Each enabled signal logs one startup line, exporting telemetry over OTLP, with its endpoint, protocol, and client auth mode.
Variables the host honors
| Variable | Effect | Default |
|---|---|---|
OTEL_EXPORTER_OTLP_ENDPOINT | Endpoint for every signal; setting it is what activates export | Unset (no export) |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, ..._LOGS_ENDPOINT, ..._METRICS_ENDPOINT | Per-signal endpoints | The shared endpoint |
OTEL_TRACES_EXPORTER, OTEL_LOGS_EXPORTER, OTEL_METRICS_EXPORTER | otlp, or none to turn one signal off | otlp |
OTEL_EXPORTER_OTLP_PROTOCOL (and per-signal forms) | grpc or http/protobuf; http/json is not supported | grpc |
OTEL_EXPORTER_OTLP_HEADERS (and per-signal forms) | Headers sent to the collector, as key=value,key=value; applied by the OTLP SDK, so hosted-collector auth headers work | None |
OTEL_EXPORTER_OTLP_TIMEOUT (and per-signal forms) | Export timeout in milliseconds | 10000 |
OTEL_EXPORTER_OTLP_CERTIFICATE | PEM CA bundle for a private-CA collector, layered onto the public roots | Public roots only |
OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, OTEL_EXPORTER_OTLP_CLIENT_KEY | mTLS client identity for the collector; both required together | No client identity |
OTEL_SERVICE_NAME, OTEL_RESOURCE_ATTRIBUTES | Resource identity | service.name is wash-runtime |
OTEL_SDK_DISABLED | true disables everything | false |
The endpoint must be a full http(s)://host:port URL, conventionally :4317 for gRPC and :4318 for HTTP. The scheme decides transport security: https:// endpoints use TLS (including over gRPC), and http:// endpoints export unencrypted. Per-signal certificate variables and samplers are not read; OTEL_EXPORTER_OTLP_INSECURE is not read either (the scheme decides), though setting it to false against an http:// endpoint is called out at startup because it reads like a TLS switch and is not one.
Where to set the variables
- Kubernetes:
runtime.envfor every host group, orruntime.hostGroups[].envper group;operator.envfor the operator's own telemetry. wash dev:dev.environmentin.wash/config.yaml, which is applied before telemetry initializes and overrides the shell.wash host: the process environment.
runtime:
env:
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://otel-collector.observability:4317
- name: OTEL_SERVICE_NAME
value: wasmcloud-host
- name: OTEL_METRICS_EXPORTER
value: noneWhat the host emits
Guest execution metrics (guest.invocation.duration, fuel.consumption under --meters fuel) and their bounded attribute set are documented under metrics you can scale on; guest memory accounting metrics under guestMemoryMode. Traces carry W3C traceparent propagation, and component and store ids are time-sortable UUIDv7 (since 2.10.0), so records carrying them order chronologically.
Related documentation
- Autoscaling: scaling on the emitted metrics.
- Helm Values Reference:
runtime.envand per-group environment plumbing. - Host Interface Configuration Reference: the guest-facing
wasi:otelinterface.