Otel Ottl

dash0hq/agent-skills/skills/otel-ottl

作者 dash0hq51a0324eb0c991f66fe9c5987799f4246ec1db44無授權條款96 個星標收錄於 2026年10月9日更新於 2026年10月9日儲存庫8 天前更新

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, data redaction, sampling policies, routing, or Collector configuration. Covers syntax, contexts, functions, error handling, and performance.

僅含說明DevOps & Cloud
AI 產生的概覽

用於撰寫與偵錯 OpenTelemetry Collector 設定中 OTTL 表達式的參考指南。

功能
此技能提供 OpenTelemetry Transformation Language(OTTL)的使用指引,適用於支援 OTTL 的 OpenTelemetry Collector 元件。內容涵蓋語法、路徑表達式、情境、列舉、運算子、轉換器與編輯器、條件陳述式、nil 檢查、錯誤處理模式以及效能建議。它也引用元件、函式、模式、資料脫敏、基數與擴充等配套規則檔案,並說明使用 otelcol validate 與 debug 匯出器進行驗證的流程。
適用情境
在撰寫或偵錯 Collector 處理器、連接器、接收器或匯出器中的 OTTL 表達式時使用。適合遙測資料轉換、篩選、屬性操作、資料脫敏、取樣原則、路由以及 Collector 設定等任務。
執行需求
僅為說明文件,未附指令碼。使用範例需要安裝 OpenTelemetry Collector(例如 otelcol validate 指令)以及 Collector 設定檔;未提及憑證需求。

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.namespan.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_ERRORspan.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:

<!-- eval:skip -->
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:
yaml
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

<!-- keep-in-sync: each entry must match a ## heading in ./rules/patterns.md -->
  • Set attributes
  • Drop telemetry by pattern
  • Drop stale data
  • Backfill missing timestamps
  • Filter processor example
  • Transform processor example
  • Defensive nil checks
  • Redact sensitive data — strategies: replace, mask, hash, delete, and drop.
  • Normalize high-cardinality attributes — path segments, IP masking, and attribute count/length limits.
  • Enrich telemetry with static attributes

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
yaml
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 spanreplace_pattern(span.attributes["url.path"], "/\\d+", "/{id}")
# GOOD — skips spans that lack the attributereplace_pattern(span.attributes["url.path"], "/\\d+", "/{id}") where span.attributes["url.path"] != nil

References

來源與署名

來源:dash0hq/agent-skills位於skills/otel-ottl提交51a0324

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架