К основному содержанию
скилл CX Codex

otel-ottl · ollygarden — скилл для Claude Code: писать и отлаживать трансформации OpenTelemetry

Скилл помогает писать выражения на OpenTelemetry Transformation Language (OTTL) для трансформирования и фильтрации телеметрии в Collector.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add ollygarden/opentelemetry-agent-skills --skill otel-ottl -a claude-code
Открыть на GitHub

Что делает otel-ottl

OTTL — язык для преобразования трассировок, метрик, логов и профилей внутри компонентов OpenTelemetry Collector. Скилл привязан к версии collector-contrib v0.162.0 и знает доступные функции, пути и ограничения именно для неё. Если вы используете другую версию, проверяйте синтаксис против соответствующего тега репозитория.

Скилл помогает выбрать правильный контекст (span, resource, datapoint и другие), верифицировать каждую функцию перед использованием, настроить обработку ошибок (ignore, silent, propagate) и избежать частых ошибок синтаксиса — например, неправильного экранирования регулярных выражений в YAML или попыток вызвать удалённую функцию Base64Decode, снятую с поддержки в v0.161.

В скилле встроены справочники по контекстам, функциям и быстрые рецепты для компонентов. Для одиночного пути или функции можно загрузить только нужный раздел вместо полного каталога.

Какие задачи решает

  • Написать условие фильтрации для tail_sampling на основе атрибутов ресурса или пролета
  • Переписать атрибуты логов или метрик, не нарушив данные других компонентов конвейера
  • Распарсить JSON из поля log.body и вытащить значения для маршрутизации
  • Отладить синтаксическую ошибку в OTTL или найти, почему выражение не работает в версии Collector

Примеры запросов агенту

  • Напиши условие для tail_sampling, которое оставляет пролеты с ошибками или с высоким приоритетом
  • Переименуй ключ old_name в new_name во всех атрибутах пролёта, но только если его значение не пусто
  • Помоги распарсить JSON из логов и отправить записи в разные конвейеры в зависимости от типа события

Как установить otel-ottl

1Через Skills CLI (Vercel)

npx skills add ollygarden/opentelemetry-agent-skills --skill otel-ottl -a claude-code

2Вручную: положить файлы

~/.claude/skills/otel-ottl/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/otel-ottl/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о otel-ottl

Как установить otel-ottl в Claude Code?

Выполни npx skills add ollygarden/opentelemetry-agent-skills --skill otel-ottl -a claude-code, затем открой ~/.claude/skills/otel-ottl/SKILL.md в Claude Code.

Что делает otel-ottl?

Скилл помогает писать и отлаживать выражения на OTTL для трансформирования, фильтрации и маршрутизации телеметрии в OpenTelemetry Collector. Включает справочники функций, контекстов и рецепты для разных компонентов.

Какую версию Collector поддерживает скилл?

Скилл привязан к collector-contrib v0.162.0. Если вы используете другую версию, нужно проверить доступность функций и путей в соответствующем теге репозитория, так как они варьируются между релизами.

Исходный текст

SKILL.md · Apache-2.0
---
name: otel-ottl
description: 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.
---

# OpenTelemetry Transformation Language (OTTL)

OTTL transforms or selects telemetry inside Collector components. This skill is pinned to
collector-contrib **v0.162.0**. Function, path, default, and feature-gate availability varies by
release; when the user's version differs, verify against the matching upstream tag.

Dated OTTL feature-gate status for v0.162.0 and v0.163.0 is in
[references/functions.md](references/functions.md#feature-gates-verified-2026-10-15).

## Workflow

1. **Choose the component.** `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.
2. **Choose the lowest usable context.** Lower contexts can read their parents (for example, a span
   can read `resource.attributes`), but parents cannot read children. Use `datapoint` for point
   attributes instead of traversing `metric.data_points`.
3. **Verify every emitted function, then write the statement.** Confirm each function's exact
   identifier and signature in [references/functions.md](references/functions.md). If an identifier
   is absent, treat it as unsupported instead of deriving or substituting a plausible name. An
   editor such as `set` or `delete_key` mutates data and may have a `where` condition. Converters
   such as `ParseJSON` and `IsMatch` return values; they do not mutate.
4. **Set error behavior deliberately.** `ignore` logs statement errors and continues; `silent`
   continues without logging; `propagate` returns the error and can cause the component to drop the
   payload. Transform and filter default to `ignore`; the transform default-error gate was removed in
   v0.162.0, so naming it in `--feature-gates` fails startup (history: the `otel-collector` skill's
   transform quirks), and the filter gate is stable and cannot be disabled. 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.
5. **Verify end to end.** Validate the exact Collector version, then send known telemetry and inspect
   file-exporter output. Use the
   [telemetrygen recipe](../otel-telemetrygen/SKILL.md#verify-collector-behavior).

```ottl
set(span.attributes["env"], "prod") where resource.attributes["env"] == nil
```

## Load only what the task needs

- [Contexts](references/contexts.md) — exact paths, hierarchy, enums, and request metadata.
- [Functions](references/functions.md) — editor/converter signatures and release availability.
- [Quick reference](references/quick-reference.md) — component YAML, recipes, escaping,
  troubleshooting, and safe skeletons.

For a single path or function, read only the relevant section instead of loading the full catalogs.

## Safety and correctness gates

- Guard optional or polymorphic input before conversion: `where x != nil`, `IsString(x)`, or the
  appropriate type check.
- For JSON-object-only work, guard both the type and shape before calling `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.
- On a version-pinned request, confirm every chosen path and function against that release tag;
  do not assume a function listed for this skill's v0.162 anchor exists in an older release.
  For v0.156 JSON-object parsing, `ParseJSON`, `IsString`, and `IsMatch` are available without the
  v0.157 alpha lambda feature gate.
- Request metadata is read-only and may contain credentials. Copy only explicitly allowlisted,
  non-sensitive keys. OTLP metadata routing requires `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]`).
- The routing `request` context is deprecated as of v0.156; use `otelcol.client.metadata` or
  `otelcol.grpc.metadata`.
- Log-record-specific rewrites of shared resource or scope data require `flatten_data: true` and the
  alpha `transform.flatten.logs` gate. This copies and regroups data; do not enable it accidentally.
- Since v0.161, `set(target, nil)` is no longer a no-op: the `ottl.set.allowNil` gate became beta in
  v0.161 and stable (cannot be disabled) in v0.162. A nil value empties a map, slice, or
  `pcommon.Value` target (an attribute key is created with an empty value) and errors on scalar
  targets. Use a `where source != nil` guard when the destination must remain unchanged for missing input.
- Hashing an identifier does not necessarily anonymize it. Apply the organization's data-handling
  policy before retaining deterministic hashes of personal data.

## Frequent syntax traps

- In Collector YAML, write an OTTL replacement backreference `${1}` as `$${1}`. A replacement such
  as `$1REDACTED` is literal and silently fails to substitute the capture.
- Go RE2 rejects large counted repetitions such as `(.{1024}).*`; use `Substring` with a nil/type
  guard and `Len`, or `truncate_all` for a map.
- Current span-event paths use `spanevent.*`, not `span_event.*`. Cache paths are context-qualified,
  such as `span.cache["parsed"]`.
- Quote any OTTL statement containing a map literal when YAML includes a space after `:`, for
  example `'set(log.attributes["a"], {"foo": "bar"})'`; otherwise YAML parses `: ` as a mapping.
- Since v0.159, polymorphic `pcommon.Value` paths compare by their underlying type; maps and slices
  support only equality and inequality, while primitive values also support ordering.
- Use `Decode(value, "base64")`; `Base64Decode` was removed in v0.161.
- Regex escapes inside OTTL strings are doubled (`\\d`, `\\s`, `\\.`).

## Upstream sources

- [OTTL package](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.162.0/pkg/ottl)
- [Transform processor](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.162.0/processor/transformprocessor)
- [Filter processor](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.162.0/processor/filterprocessor)
- [Routing connector](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.162.0/connector/routingconnector)

© ollygarden · Apache-2.0 · ollygarden/opentelemetry-agent-skills

Похожие скиллы

Все скиллы по теме «DevOps и инфраструктура» →

Сначала — otel-ottl от других авторов.

otel-ottl dash0 Помогает писать и отлаживать выражения OTTL для компонентов OpenTelemetry Collector. Пригодится при фильтрации трейсов, маскировании данных и маршрутизации телеметрии. CX Codex +1 599установок wizard Matt Pocock Скилл создаёт интерактивный bash-скрипт для ручных шагов: настройки сервисов, секретов CI и разовых миграций. 553 369установок hyperframes-cli heygen-com Управляет проектами HyperFrames через терминал: собирает таймлайн, проверяет контраст кадров, запускает предпросмотр и рендерит видео локально или в облаке. CX Codex +1 1 300 000установок setup-pre-commit Matt Pocock Скилл настраивает pre-commit для JavaScript-репозитория: Husky запускает форматирование, проверку типов и тесты перед коммитом. 489 289установок using-git-worktrees Jesse Vincent Готовит изолированное рабочее дерево перед доработкой или выполнением плана. Проверяет текущий репозиторий, выбирает нативные средства платформы либо Git. CX Codex 217 153установок finishing-a-development-branch Jesse Vincent Скилл проверяет тесты и помогает выбрать, как завершить работу в ветке: слить её, открыть Pull Request или оставить как есть. CX Codex 214 439установок orca-cli stablyai Скилл даёт агенту доступ к worktree, терминалам, артефактам и встроенному браузеру Orca через CLI. Пригодится, когда работа идёт в окружении Orca. CX Codex +1 354 000установок

Из того же набора15

otel-span-events-to-logs-migration Помогает перенести события и исключения OpenTelemetry со Span Events на Logs API, сохранив связь записей с активным спаном. Пригодится для миграции и проверки старых вызовов. CX Codex +1 ★ 116звёзд репо otel-semantic-conventions Скилл подтягивает вышедшие семантические конвенции OpenTelemetry: имена групп, атрибуты и правила именования спанов. Пригодится, когда агент придумывает ключи вместо готовых. CX Codex +1 ★ 116звёзд репо otel-ruby Помогает агенту настраивать и проверять OpenTelemetry в Ruby-приложениях. Пригодится для трассировки, метрик, логов и инструментирования Rails и других библиотек. CX Codex +1 ★ 116звёзд репо otel-python Скилл для настройки и отладки OpenTelemetry в Python-сервисах: SDK, декларативный конфиг, автоинструментация без правок кода. CX Codex +1 ★ 116звёзд репо otel-js Помогает агенту настроить OpenTelemetry в сервисе на Node.js, JavaScript или TypeScript. Пригодится, когда нужно добавить трассировку или разобраться с NodeSDK. CX Codex +1 ★ 116звёзд репо otel-java Настраивает OpenTelemetry в Java-сервисах: конфигурирует Javaagent, Spring Boot Starter и скрывает чувствительные данные из трейсов. CX Codex +1 ★ 116звёзд репо otel-go Скилл помогает настраивать и проверять OpenTelemetry в Go-сервисах. Пригодится для инструментирования, обновления SDK и разбора производительности. CX Codex +1 ★ 116звёзд репо otel-dotnet Скилл по OpenTelemetry в .NET и ASP.NET Core: настройка SDK через DI, инструментирование, zero-code агент, аудит ломающих изменений. CX Codex +1 ★ 116звёзд репо

Спонсоры проекта

Компании, которые помогают держать аналитику открытой