# opentelemetry-net-instrumentation

Скилл подсказывает, как расставлять трассировку, метрики и логи в .NET-коде по спецификации OpenTelemetry. Пригодится, когда добавляете телеметрию в библиотеку или приложение.

- скилл · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 408 установок · ★ 1238
- Автор: Aaronontheweb
- Лицензия: MIT · policy=mirror · лицензия открытая, файл — в исходнике
- Исходник: https://github.com/Aaronontheweb/dotnet-skills/tree/HEAD/skills/opentelementry-dotnet-instrumentation/SKILL.md
- Обновлён: 2026-10-11
- HTML: https://affpapa.org/nevibecode/skills/opentelemetry-net-instrumentation

## Что делает

Скилл объясняет главное отличие .NET: API для трассировки, метрик и логов уже есть в самой платформе. `ActivitySource` и `Activity` из `System.Diagnostics` дают спаны, `Meter` и `Counter<T>` из `System.Diagnostics.Metrics` — метрики, `ILogger<T>` — логи. Пакеты OpenTelemetry здесь только слой сбора и экспорта, и ставить их нужно в корне приложения, а не в библиотеке.

Внутри — правила именования `ActivitySource`, работа с `HasListeners()` и `IsAllDataRequested`, обработка ошибок, семантические конвенции OTel и настройка SDK с ресурсами и экспортёрами. Отдельный раздел про производительность и про то, как телеметрия становится частью публичного API. Если пишете библиотеку, скилл советует обойтись без NuGet-пакетов OpenTelemetry вообще: потребитель сам подключит экспорт. Добавлять `OpenTelemetry.Api` в библиотеку не нужно, потому что `System.Diagnostics.*` и есть этот API.

Есть жёсткое требование по надёжности: исключение в коде диагностики не должно ломать обработку запроса. Поэтому `Activity` может быть null, и проверять это надо везде, кроме extension-методов, где пишут `activity?.ExtensionMethod()`. Ещё один момент — не запускайте активность в fire-and-forget задаче: область `using` закроется раньше, чем завершится асинхронная работа, и контекст `AsyncLocal` потеряется.

## Установка

### Claude Code (родная платформа)

1. **Через Skills CLI (Vercel)**
```bash
npx skills add Aaronontheweb/dotnet-skills --skill opentelemetry-net-instrumentation -a claude-code
```
```bash
npx skills add Aaronontheweb/dotnet-skills --skill opentelementry-dotnet-instrumentation -a claude-code
```

2. **Вручную: положить файлы**
- Файл: `~/.claude/skills/opentelementry-dotnet-instrumentation/SKILL.md` — Папка скилла целиком; для одного проекта — .claude/skills/opentelementry-dotnet-instrumentation/

### Codex

1. **Через Skills CLI (Vercel)**
```bash
npx skills add Aaronontheweb/dotnet-skills --skill opentelementry-dotnet-instrumentation -a codex
```

2. **Вручную: положить файлы**
- Файл: `.agents/skills/opentelementry-dotnet-instrumentation/SKILL.md` — Для всех проектов — ~/.agents/skills/

### Cursor

1. **Через Skills CLI (Vercel)**
```bash
npx skills add Aaronontheweb/dotnet-skills --skill opentelementry-dotnet-instrumentation -a cursor
```

2. **Вручную: положить файлы**
- Файл: `.cursor/skills/opentelementry-dotnet-instrumentation/SKILL.md` — Cursor читает и .agents/skills/, и .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install Aaronontheweb/dotnet-skills opentelementry-dotnet-instrumentation
```

2. **Вручную: положить файлы**
- Файл: `.github/skills/opentelementry-dotnet-instrumentation/SKILL.md`

### Gemini CLI

1. **Через Skills CLI (Vercel)**
```bash
npx skills add Aaronontheweb/dotnet-skills --skill opentelementry-dotnet-instrumentation -a gemini-cli
```

2. **Командой платформы**
```bash
gemini skills install https://github.com/Aaronontheweb/dotnet-skills --path skills/opentelementry-dotnet-instrumentation
```

### Windsurf (Devin Desktop)

**Вручную: положить файлы**
- Файл: `.devin/skills/opentelementry-dotnet-instrumentation/SKILL.md` — Старый путь .windsurf/skills/ тоже читается

### OpenCode

**Через Skills CLI (Vercel)**
```bash
npx skills add Aaronontheweb/dotnet-skills --skill opentelementry-dotnet-instrumentation -a opencode
```

### Claude.ai

**Claude.ai**
- Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/Aaronontheweb/dotnet-skills/tree/HEAD/skills/opentelementry-dotnet-instrumentation/SKILL.md

## Когда брать
- добавить трассировку в .NET-библиотеку без лишних зависимостей
- настроить экспорт телеметрии в OTLP-коллектор на уровне приложения
- проверить имена ActivitySource и Meter на соответствие конвенциям
- защитить код инструментирования от null-активностей
- разобраться, какие пакеты OpenTelemetry нужны приложению, а какие нет

## Примеры запросов агенту
- Добавь ActivitySource в мой класс обработки заказов и расставь спаны по методам
- Проверь, правильно ли я настроил Meter и счётчики в этом сервисе
- Покажи, как подключить OTLP-экспортёр в Program.cs для ASP.NET Core

## Похожие
- [opentelemetry](https://affpapa.org/nevibecode/skills/claude-mpm-team-opentelemetry.md) — скилл · 635 установок
- [observability-and-instrumentation](https://affpapa.org/nevibecode/skills/observability-and-instrumentation.md) — скилл · 54800 установок
- [otel-instrumentation](https://affpapa.org/nevibecode/skills/dash0-otel-instrumentation.md) — скилл · 972 установки
- [golang-observability-opentelemetry](https://affpapa.org/nevibecode/skills/golang-observability-opentelemetry.md) — скилл · 409 установок
- [arize-instrumentation](https://affpapa.org/nevibecode/skills/arize-arize-instrumentation.md) — скилл · 3400 установок

_Часть страницы не вошла по размеру — она есть в HTML-версии._

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
