otel-profiles — скилл для Claude Code: что делает и как установить
Помогает развернуть eBPF-профилировщик OpenTelemetry на Linux, в Docker и Kubernetes, настроить пайплайн profiles и отправку данных во внешние бэкенды вроде Pyroscope.
npx skills add ollygarden/opentelemetry-agent-skills --skill otel-profiles -a claude-codeЧто делает otel-profiles
Скилл содержит инструкции по настройке непрерывного профилирования через специализированный дистрибутив otelcol-ebpf-profiler и ресивер profiling. Инструмент снимает профили со всех процессов хоста на уровне ядра Linux без правок в коде приложений.
Внутри описаны системные требования к окружению: ядро Linux 5.10 или новее, архитектуры amd64 или arm64, права CAP_SYS_ADMIN либо CAP_BPF и примонтированная файловая система tracefs. Образ коллектора собран на базе FROM scratch, поэтому отладка внутри контейнера через exec не сработает — проверять состояние придётся исключительно по системным логам.
Для запуска сборщика обязательно передавать флаг --feature-gates=+service.profilesSupport. Скилл сфокусирован только на сигнале профилей и не рассчитан на настройку трейсинга или метрик через обычные SDK.
Какие задачи решает
- настроить непрерывный сбор профилей eBPF на хосте Linux или в Docker
- подготовить пайплайн профилирования для экспорта в Grafana Cloud или Pyroscope
- собрать манифест набора демонов для запуска профилировщика в Kubernetes
- устранить сбои с монтированием tracefs и пространством имён PID
Примеры запросов агенту
- Подготовь конфигурацию для сборщика профилей eBPF под Docker с монтированием tracefs.
- Собери манифест для запуска профилировщика OpenTelemetry в кластере Kubernetes.
- Помоги исправить ошибку с флагом service.profilesSupport при старте сборщика.
Как установить otel-profiles
1Через Skills CLI (Vercel)
npx skills add ollygarden/opentelemetry-agent-skills --skill otel-profiles -a claude-code2Вручную: положить файлы
~/.claude/skills/otel-profiles/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/otel-profiles/
1Через Skills CLI (Vercel)
npx skills add ollygarden/opentelemetry-agent-skills --skill otel-profiles -a codex2Вручную: положить файлы
.agents/skills/otel-profiles/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add ollygarden/opentelemetry-agent-skills --skill otel-profiles -a cursor2Вручную: положить файлы
.cursor/skills/otel-profiles/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install ollygarden/opentelemetry-agent-skills otel-profiles2Вручную: положить файлы
.github/skills/otel-profiles/SKILL.md1Через Skills CLI (Vercel)
npx skills add ollygarden/opentelemetry-agent-skills --skill otel-profiles -a gemini-cli2Командой платформы
gemini skills install https://github.com/ollygarden/opentelemetry-agent-skills --path skills/otel-profilesВручную: положить файлы
.devin/skills/otel-profiles/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add ollygarden/opentelemetry-agent-skills --skill otel-profiles -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о otel-profiles
Как установить otel-profiles в Claude Code?
Выполните в терминале команду npx skills add ollygarden/opentelemetry-agent-skills --skill otel-profiles -a claude-code.
Что делает скилл otel-profiles?
Он предоставляет агенту правила и шаблоны конфигураций для развёртывания сборщика профилей OpenTelemetry на базе eBPF и отладки проблем с окружением Linux.
Какие системные требования нужны для работы профилировщика?
Понадобятся Linux с ядром версии 5.10 или свежее на платформе amd64 либо arm64, права CAP_SYS_ADMIN или CAP_BPF и доступ к точке /sys/kernel/tracing.
Исходный текст
SKILL.md · Apache-2.0
---
name: otel-profiles
description: OpenTelemetry profiles signal and the eBPF profiler (otelcol-ebpf-profiler, `profiling` receiver). Use when setting up continuous profiling with OpenTelemetry, deploying the eBPF profiler on Linux hosts, Docker, or Kubernetes (DaemonSet, kind, k3d), building a profiles pipeline, sending OTLP profiles to Pyroscope, Grafana Cloud Profiles, or another backend, getting flame graphs from OTel, enabling off-CPU profiling, or debugging profiler errors about tracefs, PID namespaces, missing pods, or the service.profilesSupport feature gate. Not for SDK tracing or metrics setup.
---
# OpenTelemetry Profiles
The main OpenTelemetry producer is the [eBPF profiler](https://github.com/open-telemetry/opentelemetry-ebpf-profiler), shipped as the `profiling` receiver in the [`otelcol-ebpf-profiler`](https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-ebpf-profiler) Collector distribution. It profiles every process on a Linux host with no application changes.
Maturity: the signal entered [public Alpha](https://opentelemetry.io/blog/2026/profiles-alpha/) in March 2026, the OTLP profiles proto (`v1development`) is Development, the `profiling` receiver is Development, and the Collector gate `service.profilesSupport` is alpha. Expect breaking changes; pin the profiler, Collector, and backend versions together.
Collector-side component facts (OTLP receiver/exporter profile support, the fixed `/v1development/profiles` HTTP path, `k8s_attributes`, `memory_limiter`, `filter` `profile_conditions`) live in the `otel-collector` skill's component pages; OTTL `profile`/`profilesample` contexts live in `otel-ottl`.
`otelcol-ebpf-profiler` `0.163.1` bundles only: receivers `profiling`, `nop`; processors `memory_limiter`, `k8s_attributes`, `resource_detection`, `resource`, `transform` (plus `batch`, which does not support profiles); exporters `otlp_grpc`, `otlp_http`, `debug`, `file`, `nop`; extensions `health_check`, `pprof`, `opamp`, `offcpu`. For anything else (`filter`, the `basicauth` extension, vendor exporters), relay to a regular Collector or build a distribution (`otel-collector-builder` skill).
## Version matrix (Verified 2026-10-19)
| Artifact | Version | What it means |
|---|---|---|
| `otel/opentelemetry-collector-ebpf-profiler` | `0.163.0`, `0.163.1` (newest release at verification, 2026-10-16) | Pins ebpf-profiler `v0.0.202640`: `pid_namespace_translation_mode` ([#1801](https://github.com/open-telemetry/opentelemetry-ebpf-profiler/pull/1801)); bundles the `offcpu` extension. |
| Same image, `0.162.0` | last release before the change | Pins ebpf-profiler `v0.0.202636`: boolean `pid_namespace_translation`; does not bundle `offcpu`. |
Evidence: [Docker Hub tags](https://hub.docker.com/r/otel/opentelemetry-collector-ebpf-profiler/tags), the [`v0.163.0`](https://github.com/open-telemetry/opentelemetry-collector-releases/blob/v0.163.0/distributions/otelcol-ebpf-profiler/manifest.yaml) and [`v0.163.1`](https://github.com/open-telemetry/opentelemetry-collector-releases/blob/v0.163.1/distributions/otelcol-ebpf-profiler/manifest.yaml) distribution manifests.
Read [references/receiver.md](references/receiver.md) when setting keys beyond `samples_per_second`, enabling off-CPU or OBI correlation, or pinning a release not in this table (keys follow the pinned ebpf-profiler, not the Collector version).
## Workflow
1. **Pick the image and pin.** Use the latest release unless a needed key or component is missing from it (see the matrix). Alternative: an OCB build (`otel-collector-builder` skill) based on the [distribution manifest](https://github.com/open-telemetry/opentelemetry-collector-releases/blob/main/distributions/otelcol-ebpf-profiler/manifest.yaml).
2. **Pick the environment.**
- Linux host or plain Docker: [Run on a host](#run-on-a-host) below.
- Kubernetes: [references/kubernetes.md](references/kubernetes.md) (DaemonSet, RBAC, Kubernetes metadata, memory sizing).
- Kubernetes nodes that are themselves containers (kind, k3d, Docker-in-Docker, minikube with the docker driver): also [references/nested-containers.md](references/nested-containers.md).
3. **Wire the pipeline.** `profiles` pipeline: `profiling` receiver, `memory_limiter` first, enrichment processors, then `otlp_grpc` or `otlp_http`. Start the Collector with `--feature-gates=+service.profilesSupport`. Run `validate --config=<file> --feature-gates=+service.profilesSupport` with the target image; it catches wrong keys for the pinned version.
4. **Export and verify.** Add `debug` (`verbosity: basic`) first: each `reporter_interval` it logs `"resource profiles": N, "sample records": M`; no lines or zero counts mean the receiver is not producing (see troubleshooting). `verbosity: detailed` shows resource attributes. Then add the backend: [references/backends.md](references/backends.md) for endpoints, auth, and per-backend label behavior.
5. **Troubleshoot** by exact error string: [references/troubleshooting.md](references/troubleshooting.md).
## Run on a host
The profiler needs root or `CAP_SYS_ADMIN`/`CAP_BPF`/`CAP_PERFMON`, the host PID namespace, and a mounted tracefs. A container gets a fresh `/sys` without tracefs even when privileged, so bind-mount it:
```bash
docker run -d --name otel-ebpf-profiler --privileged --pid=host \
-v /sys/kernel/tracing:/sys/kernel/tracing \
-v "$PWD/config.yaml:/etc/otelcol/config.yaml:ro" \
otel/opentelemetry-collector-ebpf-profiler:0.163.1 \
--config=/etc/otelcol/config.yaml --feature-gates=+service.profilesSupport
```
```yaml
receivers:
profiling:
samples_per_second: 20 # default
processors:
memory_limiter:
check_interval: 1s
limit_mib: 800
spike_limit_mib: 200
exporters:
debug:
verbosity: basic
otlp_grpc:
endpoint: profiles-backend:4317 # backend-specific, see references/backends.md
tls:
insecure: true
service:
pipelines:
profiles:
receivers: [profiling]
processors: [memory_limiter]
exporters: [otlp_grpc, debug]
```
The image is built `FROM scratch`: no shell, so debug from logs, not `exec`. Expected startup lines: `eBPF tracer loaded`, `Attached sched monitor`, `Everything is ready`.
## Known limitations
- The receiver profiles every process; it has no process, container, or namespace selection, and upstream declined to add one ([#358](https://github.com/open-telemetry/opentelemetry-ebpf-profiler/issues/358)). To keep a subset, filter on enrichment attributes with `filter` `profile_conditions`; see "Keep only some workloads" in [references/kubernetes.md](references/kubernetes.md). Sampling cost on the node stays the same; only exported volume drops.
- Linux `amd64`/`arm64`, kernel 5.10+ (checked at config validation; `no_kernel_version_check` bypasses it). Backends may lag the proto; check which OTLP profiles version they accept.
- Trace-to-profile correlation is partial: OTLP profiles can link samples to `trace_id`/`span_id`, but the profiler fills them only from a context producer (OBI via `obi_process_ctx`; the [thread-context OTEP](https://github.com/open-telemetry/opentelemetry-specification/pull/4947) implementation is in progress). Go pprof labels are read as custom labels.
© ollygarden · Apache-2.0 · ollygarden/opentelemetry-agent-skills