The control plane writes runtime status per backend and signal to each DataplaneInsight under status.openTelemetry. Run the following commands to read it:
kubectl get dataplaneinsight $DATAPLANE_NAME -o yaml
kumactl inspect dataplane $DATAPLANE_NAME
The following fields are available for each signal:
|
Field
|
Description
|
enabled
|
Whether a policy targets this signal on this backend. false means no policy asked for it, distinct from state: missing (asked for but unresolved).
|
state
|
The state of the signal. The value can be:
ready
blocked
missing
ambiguous
|
envAllowed
|
Whether env.mode permits environment input for this backend.
|
envInputPresent
|
Whether kuma-dp reported any matching environment variable keys at bootstrap.
|
overrideKinds
|
OTLP fields where a per-signal variable overrides the shared layer. For example:
endpoint
protocol
headers
timeout
|
missingFields
|
Fields the merge could not produce. For example:
endpoint
protocol
headers
client_key
|
blockedReasons
|
The reason the signal was blocked. The value can be one or more of the following:
EnvDisabledByPolicy
RequiredEnvMissing
SignalOverridesDisallowed
MultipleBackendsForSignal
|
A signal is ready when the merge produces an endpoint. Other fields fall back to OpenTelemetry SDK defaults.
There are two types of blocks:
- Soft blocks (
EnvDisabledByPolicy and SignalOverridesDisallowed) mean that the control plane ignored the environment input but the export still works.
- Hard blocks (
RequiredEnvMissing and MultipleBackendsForSignal) prevent export entirely and move the state out of ready.
A state: missing entry means a policy asked for the signal but the merge couldn’t produce an endpoint. For example:
openTelemetry:
backends:
- name: from-env
metrics:
enabled: true
state: missing
envAllowed: true
envInputPresent: false
missingFields:
- endpoint
The backend has no explicit address and no environment input was found. Either set endpoint.address on the backend or check the sidecar environment for OTEL_EXPORTER_OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_METRICS_ENDPOINT.
A backend configured with mode: Required reports state: blocked and RequiredEnvMissing when kuma-dp doesn’t report the expected environment keys. For example:
openTelemetry:
backends:
- name: tenant-cloud
traces:
enabled: true
state: blocked
envAllowed: true
envInputPresent: false
blockedReasons:
- RequiredEnvMissing
The backend has mode: Required but kuma-dp didn’t report the expected environment keys. Inject them on the sidecar and restart the data plane so the keys reach the control plane through bootstrap.
When two backends resolve to the same data plane for the same signal and both allow environment input, every competing backend reports state: ambiguous with MultipleBackendsForSignal. For example:
openTelemetry:
backends:
- name: backend-a
traces:
enabled: true
state: ambiguous
envAllowed: true
envInputPresent: true
blockedReasons:
- MultipleBackendsForSignal
- name: backend-b
traces:
enabled: true
state: ambiguous
envAllowed: true
envInputPresent: true
blockedReasons:
- MultipleBackendsForSignal
Set mode: Disabled on every backend that should not receive environment input, or scope policies so only one backend reaches each data plane.
MeshOpenTelemetryBackend carries a ReferencedByPolicies condition with reason Referenced while at least one policy points at it. Otherwise the reason is NotReferenced. When a policy points at a backend that doesn’t exist, the control plane logs through the otel-backend-resolution logger and skips the OTel export for that signal:
MeshOpenTelemetryBackend not found, skipping backend name=main-collector labels=null
In multi-zone, the most common cause is a zone-authored policy referencing a backend synced from the global control plane by name instead of labels. Switch to labels with the kuma.io/display-name label. A backend only applied on the global control plane can also take a few seconds to reach zone control planes through KDS, so expect short-lived NotReferenced and not found log lines while sync catches up.
backendRef requires the data plane to advertise the feature-otel-via-kuma-dp feature. All 2.14 data planes do by default. During an upgrade where some proxies are still on 2.13, the control plane silently skips the OTel pipe route for those proxies and emits no log entry. The signal doesn’t export through the backend. Read status.openTelemetry on the affected proxies and confirm that the control plane writes no signal status entries for backends referenced with backendRef until the proxy advertises the feature.
Inline endpoint configurations stay on the direct Envoy export path and keep working through the upgrade.