Migration Guide: OpenCensus to OpenTelemetry
This guide covers changes for cluster operators upgrading Tekton Triggers to a version that uses OpenTelemetry for metrics and tracing. The Triggers API (EventListener, TriggerTemplate, TriggerBinding, etc.) is unchanged.
This migration aligns Triggers with
Tekton Pipeline PR #9043
and Knative’s migration from knative.dev/pkg/metrics (OpenCensus) to
knative.dev/pkg/observability (OpenTelemetry).
What changed
| Area | Before | After |
|---|---|---|
| Metrics library | OpenCensus (go.opencensus.io) |
OpenTelemetry (go.opentelemetry.io/otel) |
| ConfigMap key for metrics | metrics.backend-destination |
metrics-protocol |
| ConfigMap key for tracing | Separate config-tracing / K_TRACING_CONFIG |
Unified in config-observability-triggers (tracing-protocol) |
| Stackdriver support | Built-in | Use OTLP with a GCP exporter |
| Sink counter names | eventlistener_event_received_count |
eventlistener_event_received_total |
| Sink counter names | eventlistener_triggered_resources |
eventlistener_triggered_resources_total |
| All other metric names | unchanged | unchanged |
| Default metrics export | Prometheus on port 9000 | Prometheus on port 9000 (unchanged) |
| Metrics port | 9000 | 9000 (unchanged) |
Step 1: Observability ConfigMap
The config-observability-triggers ConfigMap ships with
metrics-protocol: prometheus as active data, so Prometheus metrics
remain enabled by default.
The _example block now documents the new OpenTelemetry configuration
keys. The old OpenCensus keys (metrics.backend-destination,
metrics.stackdriver-project-id, metrics.allow-stackdriver-custom-metrics)
are no longer recognized.
If you had no custom observability configuration, no action is needed.
If you had custom values, translate them:
| Old key | New key |
|---|---|
metrics.backend-destination: prometheus |
metrics-protocol: prometheus |
metrics.backend-destination: opencensus |
metrics-protocol: grpc + metrics-endpoint: <host:port> |
metrics.backend-destination: none |
metrics-protocol: none |
metrics.opencensus-address |
metrics-endpoint |
metrics.reporting-period-seconds: 60 |
metrics-export-interval: 60s |
After changing the ConfigMap, restart the controller:
kubectl -n tekton-pipelines rollout restart deployment tekton-triggers-controller
Step 2: Update Prometheus queries
Only the two sink counter metrics were renamed. Update any queries or alerts that reference them:
# Before
eventlistener_event_received_count{status="succeeded"}
eventlistener_triggered_resources{kind="PipelineRun"}
# After
eventlistener_event_received_total{status="succeeded"}
eventlistener_triggered_resources_total{kind="PipelineRun"}
All other metric names are unchanged:
# These work as before
controller_eventlistener_count
controller_clusterinterceptor_count
eventlistener_http_duration_seconds_bucket{le="1.0"}
Step 3: Account for new OTel scope labels
All metrics now include OpenTelemetry instrumentation scope labels:
otel_scope_name(e.g.github.com/tektoncd/triggers/pkg/sinkfor sink metrics,github.com/tektoncd/triggers/pkg/reconciler/metricsfor controller gauge metrics)otel_scope_schema_url(emitted but empty)otel_scope_version(emitted but empty)
Only otel_scope_name carries a meaningful value. These labels are
informational and transparent to most PromQL queries. If you use strict
label matching in recording rules or alerts, account for the new
otel_scope_name label.
Step 4: Verify
kubectl -n tekton-pipelines port-forward svc/tekton-triggers-controller 9000:9000
curl -s http://localhost:9000/metrics | grep -E "controller_eventlistener_count|eventlistener_event_received_total"
No action required
- Triggers API: All CRDs are unchanged.
- Metrics port: Still 9000, controlled by
METRICS_PROMETHEUS_PORT. - Metric semantics: All metrics measure the same things with the same
labels (
status,kind). - EventListener behavior: Events are processed identically.
Rollback
Redeploy the previous Triggers release. The old OpenCensus keys will work again. No data migration is needed.
Feedback
Was this page helpful?