Overview
The OpenTelemetry Collector receives, processes, and exports telemetry over OTLP. This template deploys a stateless collector that feeds Control Plane’s native tracing, and can additionally ingest OTLP metrics and push them to any Prometheus-remote-write-compatible store — such as this catalog’s Prometheus template — with optional authenticated public ingestion (bearer token or mTLS).Architecture
- Collector — A standard, stateless workload.
replicascopies run behind one endpoint;2or more forms an HA ingestion pool that keeps accepting telemetry through rolling restarts and replica loss. - Traces — Applications send OTLP to the collector; it normalizes spans, derives span metrics, and forwards traces to the Control Plane tracing backend.
- Metrics (optional) — An OTLP-to-
prometheus_remote_writepipeline pushes ingested metrics to the store you configure. - Public ingestion (optional) — Bearer-token auth over the canonical HTTPS endpoint, or mutual TLS over a direct TCP load balancer. Public access always requires auth plus an explicit CIDR allowlist.
What Gets Created
- Standard Collector Workload — Runs the collector in either a simple (knob-driven) or advanced (full custom config) mode.
- Secret — An opaque secret holding the rendered collector configuration, mounted as a file.
- Identity & Policy — An identity bound to the workload with
revealaccess to the config secret and — only when auth is enabled — the auth secret you name. - Direct Load Balancer (optional) — TCP passthrough on ports
4317/4318, created only for public mTLS ingestion.
This template does not create a GVC. You will need to deploy it into an existing GVC and enable tracing at the GVC level after installing, specifying the target workload and port. This will trigger a restart of all workloads in the GVC.
Prerequisites
None for a default install. The two auth modes have prerequisites:-
Bearer auth (
auth.method: bearer) — an opaque secret holding the token, created before install (a missing secret leaves the deployment waiting on it). Setauth.bearer.secretNameto its name: -
mTLS auth (
auth.method: mtls) — a dictionary secret created before install with exactly the keyscert(server certificate),key(server private key), andca(the CA that signed your client certificates). Setauth.mtls.secretNameto its name:
UI
Browse, install, and manage templates visually
CLI
Manage templates from your terminal
Terraform
Declare templates in your Terraform configurations
Pulumi
Declare templates in your Pulumi programs
Configuration
The defaultvalues.yaml for this template:
Mode and Replicas
otelCollector.mode— Set tosimple(the default) for a structured configuration generated from the knobs below, oradvancedto provide a fully customized configuration. Inadvancedmode, the entireotelCollector.advanced.configis passed to the collector verbatim.otelCollector.replicas— The collector is stateless, so replicas need no coordination. Set2or more for an HA ingestion pool behind the same endpoint; ingestion keeps succeeding through rolling restarts and replica loss.
Simple Mode
simple.processors.transform.traceStatements— A list ofreplace_patternstatements that normalize dynamic URL segments inhttp.urlspan attributes. ReplacePLACEHOLDERwith the path segment you want to collapse, e.g.user/profile.simple.spanmetrics.histogram.buckets— Span-duration histogram bucket boundaries. Tune these to align with your SLO thresholds.simple.spanmetrics.histogram.unit— Output unit of the recorded histogram. Choosems(milliseconds) ors(seconds).
Metrics Ingestion
metrics.enabled: true, OTLP metrics posted to the collector (internally, or publicly with auth) are pushed to the store at metrics.remoteWrite.endpoint. Any Prometheus-remote-write-compatible URL works — for example, this catalog’s Prometheus template receives remote write at http://RELEASE_NAME-prometheus.GVC_NAME.cpln.local:9095/api/v1/write, and a Thanos query tier on top gives you a global view of what lands there. One collector pushes to one store; run multiple installs for multiple targets.
Ingestion Auth
otlp/ingest receiver on 4318 (HTTP) / 4319 (gRPC). The plain gRPC :4317 receiver stays unauthenticated for the GVC tracing integration and is never exposed publicly.
bearer— Senders presentAuthorization: Bearer <token>; requests without the token (or with the wrong one) are rejected with401. Public bearer ingestion runs over the canonical HTTPS endpoint and is HTTP-only — OTLP/gRPC does not pass the canonical endpoint; use mTLS for public gRPC.mtls— The collector serves your certificate and requires a client certificate signed by your CA; the TLS handshake itself rejects unauthenticated clients. Public mTLS ingestion runs over a direct TCP load balancer on4318(HTTP) and4317(gRPC); the canonicalhttps://endpoint intentionally stops accepting traffic in this mode.
Access
publicAccess with auth.method: none or an empty allowedCidrs fails at install — opening to the world requires an explicit ["0.0.0.0/0"]. internalAccess.type controls which workloads inside the org can reach the collector internally (none, same-gvc, or same-org).
Advanced Mode
Theadvanced.config block accepts a full OpenTelemetry Collector configuration and is fully authoritative. The shipped default config provides:
The
metrics.* knobs are refused in advanced mode (the install fails rather than silently ignoring them). To ingest metrics, add the pipeline to your config yourself:
auth.* and publicAccess.* knobs still wire the secret mounts, reveal policy, firewall, and load balancer in advanced mode, but your config must bind the authed receiver to 0.0.0.0:4318 (HTTP) / 0.0.0.0:4319 (gRPC) — certificate and token files are mounted at /etc/otel-collector/tls/{server.crt,server.key,ca.crt} and /etc/otel-collector/auth/token. Keep health_check on 0.0.0.0:13133 or readiness probes are skipped.
Setting Up Tracing
1. Normalize URL patterns (recommended) If your application has dynamic URL segments, use thetransform processor to normalize them into fixed patterns. This keeps span cardinality manageable and makes your traces queryable. In either Simple or Advanced config, replace each occurrence of PLACEHOLDER with each path segment you want to collapse:
4317. This triggers a restart of all workloads in the GVC so they begin emitting traces to the collector.
4. Query span metrics in Grafana
Span metrics are exposed via Prometheus on port 8889 of the collector workload. Use the spanmetrics connector’s output to build dashboards and alerts. The metric name suffix automatically changes based on the unit defined in your configuration:
s in the histogram, the metric name changes to:
:8889 serves an empty response until then.
Connecting
The canonical endpoint (and the direct load balancer endpoint in mTLS mode) is in
status.canonicalEndpoint of cpln workload get RELEASE_NAME -o yaml. The bearer token is whatever you stored in your prerequisite secret. Use the full .cpln.local hostname for in-GVC senders.
Important Notes
- The default
modechanged fromadvancedtosimplein template version 1.1.0 — if you customizedadvanced.configwhile relying on the old default, setmode: advancedexplicitly when upgrading. - Histogram buckets must be duration strings (
"250ms","1s") — bare numbers are parsed as nanoseconds, which silently breaks the histogram. - Enable tracing at the GVC level after install (target the collector workload, port
4317); this restarts all workloads in the GVC. - Public ingestion requires auth:
publicAccess.enabledwithauth.method: noneor an emptyallowedCidrsfails at install — opening to the world requires an explicit["0.0.0.0/0"]. - Create the auth secret before installing — a missing secret leaves the deployment waiting on it.
- mTLS uses the direct load balancer (raw TCP), not the canonical endpoint; in mTLS mode the canonical
https://endpoint intentionally stops accepting traffic. - In mTLS mode, in-GVC senders must use the plain internal gRPC port
:4317— the TLS-terminating ingest ports (4318/4319) are reachable only by external clients via the direct load balancer. - One collector pushes to one remote-write store; run multiple installs for multiple targets.
External References
OTel Collector Documentation
Official OpenTelemetry Collector documentation
OTel SDK Setup
Language-specific SDK guides for instrumenting your application
Spanmetrics Connector
Reference for the spanmetrics connector configuration
Prometheus Remote Write Exporter
Reference for the prometheusremotewrite exporter
OTLP Specification
The OpenTelemetry protocol specification
OTel Collector Template
View the source files, default values, and chart definition