Skip to main content
Version: v2

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.

Upgrading from 2.9.0 or earlier

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

VariableEffectDefault
OTEL_EXPORTER_OTLP_ENDPOINTEndpoint for every signal; setting it is what activates exportUnset (no export)
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, ..._LOGS_ENDPOINT, ..._METRICS_ENDPOINTPer-signal endpointsThe shared endpoint
OTEL_TRACES_EXPORTER, OTEL_LOGS_EXPORTER, OTEL_METRICS_EXPORTERotlp, or none to turn one signal offotlp
OTEL_EXPORTER_OTLP_PROTOCOL (and per-signal forms)grpc or http/protobuf; http/json is not supportedgrpc
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 workNone
OTEL_EXPORTER_OTLP_TIMEOUT (and per-signal forms)Export timeout in milliseconds10000
OTEL_EXPORTER_OTLP_CERTIFICATEPEM CA bundle for a private-CA collector, layered onto the public rootsPublic roots only
OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, OTEL_EXPORTER_OTLP_CLIENT_KEYmTLS client identity for the collector; both required togetherNo client identity
OTEL_SERVICE_NAME, OTEL_RESOURCE_ATTRIBUTESResource identityservice.name is wash-runtime
OTEL_SDK_DISABLEDtrue disables everythingfalse

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.env for every host group, or runtime.hostGroups[].env per group; operator.env for the operator's own telemetry.
  • wash dev: dev.environment in .wash/config.yaml, which is applied before telemetry initializes and overrides the shell.
  • wash host: the process environment.
yaml
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: none

What 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.