otel-ottl
OpenTelemetry Transformation Language (OTTL) expert. Use when writing or debugging OTTL expressions for any OpenTelemetry Collector component that supports OTTL (processors, connectors, receivers, exporters). Triggers on tasks involving telemetry transformation, filtering, attribute manipulation, da
By dash0hq · 521 installs
npx skills add dash0hq/agent-skills --skill otel-ottl
Source repository · Upstream listing
OpenTelemetry Transformation Language (OTTL)
Components that use OTTL
OTTL is not limited to the transform and filter processors.
Processors (transform, filter, attributes, span, tailsampling, cumulativetodelta, logdedup, lookup), connectors (routing, count, sum, signaltometrics), and the hostmetrics receiver all accept OTTL expressions.
See [components](./rules/components.md) for the full list with use cases.
OTTL syntax
Path expressions
Navigate telemetry data using dot notation:
Contexts (first path segment): resource , scope , span , spanevent , metric , datapoint , log .
Enumerations
Use int64 constants for enumeration fields:
Operators
Assignment: = — Comparison: == , != , , < , = , <= — Logical: and , or , not
Functions
Converters (uppercase, return values):
Editors (lowercase, modify data in place):
See [function reference](./rules/function reference.md) for the full list of editors and converters.
Conditional statements
Use where to apply transformations conditionally:
<! eval:skip
Nil checks
Use nil for absence checking (not null ):
Validation workflow
1. Validate config syntax — run otelcol validate config=config.yaml to catch compilation errors before starting the Collector.
2. Test with the debug exporter — route transformed telemetry to a debug exporter and inspect the output:
3. Set error mode: ignore in production — see [Error handling]( error handling).
4. Promote to production exporters — replace debug with the production exporter.
Common patterns
<! keep in sync: each entry must match a heading in ./rules/patterns.md
[Set attributes](./rules/patterns.md set attributes)
[Drop telemetry by pattern](./rules/patterns.md drop telemetry by pattern)
[Drop stale data](./rules/patterns.md drop stale data)
[Backfill missing timestamps](./rules/patterns.md backfill missing timestamps)
[Filter processor example](./rules/patterns.md filter processor example)
[Transform processor example](./rules/patterns.md transform processor example)
[Defensive nil checks](./rules/patterns.md defensive nil checks)
[Redact sensitive data](./rules/redaction.md) — strategies: replace, mask, hash, delete, and drop.
[Normalize high cardinality attributes](./rules/cardinality.md) — path segments, IP masking, and attribute count/length limits.
[Enrich telemetry with static attributes](./rules/enrichment.md)
Error handling
Compilation errors
Occur during processor initialization and prevent Collector startup:
Invalid syntax (missing quotes)
Unknown functions
Invalid path expressions
Type mismatches
Runtime errors
Occur during telemetry processing:
Accessing non existent attributes
Type conversion failures
Function execution errors
Error mode configuration
Set error mode explicitly for clarity; ignore is the default.
Mode Behavior When to use
ignore (default) Logs the error and continues to the next statement Production and general use — the default for the transform and filter processors
propagate Returns the error up the pipeline, dropping the payload from the Collector Development and strict environments where you want to catch every error
silent Ignores errors without logging High volume pipelines with known safe transforms where error logs are noise
Statements are a flat list; the Collector infers the context ( span , metric , datapoint , log , and so on) from the path prefixes.
Use the object form with an explicit context: only when a statement group mixes paths that cannot be inferred to a single context, or when you need a group level condition or error mode .
Performance
Use where clauses to skip items early.
References
[OTTL Guide](https://www.dash0.com/guides/opentelemetry transformation language ottl)
[OTTL Specification](https://github.com/open telemetry/opentelemetry collector contrib/tree/main/pkg/ottl)
[OTTL Functions Reference](https://github.com/open telemetry/opentelemetry collector contrib/tree/main/pkg/ottl/ottlfuncs)
[OTTL Playground](https://ottl.run)