技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
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, data redaction, sampling policies, routing, or Collect…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
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.
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.
Use int64 constants for enumeration fields:
span.status.code == STATUS_CODE_ERROR
span.kind == SPAN_KIND_SERVER
Assignment: = — Comparison: ==, !=, >, <, >=, <= — Logical: and, or, not
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\\..*quot;)
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.
Use where to apply transformations conditionally:
span.attributes["db.statement"] = "REDACTED" where resource.attributes["service.name"] == "accounting"
Use nil for absence checking (not null):
resource.attributes["service.name"] != nil
otelcol validate --config=config.yaml to catch compilation errors before starting the Collector.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
error_mode: ignore in production — see Error handling.debug with the production exporter.Occur during processor initialization and prevent Collector startup:
Occur during telemetry processing:
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 |
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.
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