OpenTelemetry Transformation Language (OTTL) expert for writing and debugging telemetry transformations in the OpenTelemetry Collector. Use when authoring or reviewing `transform`, `filter`, `tail_sampling` processor configs or `routing` connector configs, debugging OTTL syntax or semantics, transforming traces, metrics, logs, or profiles, or converting data-processing requirements into OTTL statements.
79
100%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
OTTL transforms or selects telemetry inside Collector components. This skill is pinned to collector-contrib v0.158.0. Function, path, default, and feature-gate availability varies by release; when the user's version differs, verify against the matching upstream tag.
transform rewrites, filter drops, tail_sampling decides whether
to retain traces, and routing sends telemetry to pipelines. A component controls its available
contexts and functions.resource.attributes), but parents cannot read children. Use datapoint for point
attributes instead of traversing metric.data_points.set or delete_key mutates data and may have a where condition. Converters
such as ParseJSON and IsMatch return values; they do not mutate.ignore logs statement errors and continues; silent
continues without logging; propagate returns the error and can cause the component to drop the
payload. In v0.158, transform and filter default to ignore; routing also defaults to ignore
while its beta default-error feature gate is enabled. For routing, ignore sends an errored
payload to default_pipelines; configure that fallback or the payload is dropped.set(span.attributes["env"], "prod") where resource.attributes["env"] == nilFor a single path or function, read only the relevant section instead of loading the full catalogs.
where x != nil, IsString(x), or the
appropriate type check.ParseJSON, for example
IsString(log.body) and IsMatch(log.body.string, "(?s)^\\s*\\{.*\\}\\s*$"). The RE2 (?s)
flag admits pretty-printed objects containing newlines. Checking IsMap after
parsing does not prevent arrays or scalar JSON from being parsed.ParseJSON, IsString, and IsMatch are available without the
v0.157 alpha lambda feature gate.include_metadata: true on the receiver.
HTTP/client header spelling may retain its form (otelcol.client.metadata["X-Tenant"][0]);
gRPC metadata keys are lowercase (otelcol.grpc.metadata["x-tenant"][0]).request context is deprecated as of v0.156; use otelcol.client.metadata or
otelcol.grpc.metadata.flatten_data: true and the
alpha transform.flatten.logs gate. This copies and regroups data; do not enable it accidentally.${1} as $${1}. A replacement such
as $1REDACTED is literal and silently fails to substitute the capture.(.{1024}).*; use Substring with a nil/type
guard and Len, or truncate_all for a map.spanevent.*, not span_event.*. Cache paths are context-qualified,
such as span.cache["parsed"].Decode(value, "base64"); Base64Decode is deprecated.\\d, \\s, \\.).c5d2edc
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.