otel-ottl

от dash0hq

Эксп

npx skills add https://github.com/dash0hq/agent-skills --skill otel-ottl

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 for the full list with use cases.

OTTL syntax

Path expressions

Navigate telemetry data using dot notation:

span.name
span.attributes["http.method"]
resource.attributes["service.name"]

Contexts (first path segment): resource, scope, span, spanevent, metric, datapoint, log.

Enumerations

Use int64 constants for enumeration fields:

span.status.code == STATUS_CODE_ERROR
span.kind == SPAN_KIND_SERVER

Operators

Assignment: = — Comparison: ==, !=, >, <, >=, <= — Logical: and, or, not

Functions

Converters (uppercase, return values):

ToUpperCase(span.attributes["http.request.method"])
Substring(log.body.string, 0, 1024)
Concat(["prefix", span.attributes["request.id"]], "-")
IsMatch(metric.name, "^k8s\\..*$")

Editors (lowercase, modify data in-place):

set(span.attributes["region"], "us-east-1")
delete_key(resource.attributes, "internal.key")
limit(log.attributes, 10, [])

See function-reference for the full list of editors and converters.

Conditional statements

Use where to apply transformations conditionally:

span.attributes["db.statement"] = "REDACTED" where resource.attributes["service.name"] == "accounting"

Nil checks

Use nil for absence checking (not null):

resource.attributes["service.name"] != nil

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:
exporters:
  debug:
    verbosity: detailed

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [transform]
      exporters: [debug]   # swap in production exporter once validated
  1. Set error_mode: ignore in production — see Error handling.
  2. Promote to production exporters — replace debug with the production exporter.

Common patterns

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.

ModeBehaviorWhen to use
ignore (default)Logs the error and continues to the next statementProduction and general use — the default for the transform and filter processors
propagateReturns the error up the pipeline, dropping the payload from the CollectorDevelopment and strict environments where you want to catch every error
silentIgnores errors without loggingHigh-volume pipelines with known-safe transforms where error logs are noise
processors:
  transform:
    error_mode: ignore
    trace_statements:
      - set(span.attributes["parsed"], ParseJSON(span.attributes["json_body"]))

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.

# BAD — runs replace_pattern on every span
replace_pattern(span.attributes["url.path"], "/\\d+", "/{id}")

# GOOD — skips spans that lack the attribute
replace_pattern(span.attributes["url.path"], "/\\d+", "/{id}") where span.attributes["url.path"] != nil

References

Больше skills от dash0hq

dash0-cli
dash0hq
Use when working with Dash0 observability data or configuration via the dash0 CLI (the `dash0` binary) — querying logs, spans, traces, metrics, or failed…
official
dash0-sync-docs
dash0hq
Настройте или отладьте синхронизацию документации исходного репозитория с веб-сайтом Dash0 с помощью составного действия dash0hq/sync-docs-action. Используйте при добавлении sync-docs-to-website…
official
otel-collector
dash0hq
Экспертное руководство по настройке и развертыванию OpenTelemetry Collector. Используйте при настройке конвейера Collector, конфигурации приемников, экспортеров или…
official
otel-instrumentation
dash0hq
Настраивает трейс-спаны, определяет пользовательские метрики, настраивает экспортеры логов и оптимизирует стратегии семплинга для инструментирования OpenTelemetry. Используйте, когда…
official
otel-semantic-conventions
dash0hq
Эксперт по семантическим конвенциям OpenTelemetry. Используется при выборе, применении или проверке телеметрических атрибутов. Срабатывает на задачи, связанные с выбором атрибутов,…
official