Skip to content

/opentelemetry

OpenTelemetry instrumentation conventions. Use when instrumenting code with spans, setting up tracing, or writing trace tests.

shell
$ npx -y skills add bendrucker/claude --skill opentelemetry --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/opentelemetry
How auto-invocation works

Context preview

The summary Claude sees to decide when to auto-load this skill.

OpenTelemetry instrumentation conventions. Use when instrumenting code with spans, setting up tracing, or writing trace tests.

SKILL.md

opentelemetry.SKILL.md
name: opentelemetry
description: >-
  OpenTelemetry instrumentation conventions. Use when instrumenting code with
  spans, setting up tracing, or writing trace tests.
user-invocable: true
disable-model-invocation: true

OpenTelemetry

Span Naming

Use short, low-cardinality names from semantic conventions:

  • HTTP: `GET /users/{id}` (method + route template, never full URL path)
  • DB: `SELECT users` (operation + table)
  • RPC: `grpc.health.v1.Health/Check`
  • Messaging: `orders process` (destination + operation)

Attributes

Use [semantic convention](https://opentelemetry.io/docs/specs/semconv/) attribute names — never invent your own:

  • HTTP: `http.request.method`, `url.full`, `http.response.status_code`, `server.address`
  • DB: `db.system`, `db.statement`, `db.namespace`
  • General: `error.type`, `service.name`

Import from the versioned semconv package (e.g., `go.opentelemetry.io/otel/semconv/v1.x`).

Status

Only set status on errors: `span.SetStatus(codes.Error, err.Error())`. Never set `Ok` — unset is the success state. Call `RecordError` alongside `SetStatus`; it only adds a span event, doesn't change status.

For HTTP: 4xx is `Error` on client spans, `Unset` on server spans. 5xx is always `Error`.

Testing

Use in-memory exporters with `SimpleSpanProcessor` (not batch — batch introduces timing). Assert on exported spans' names, attributes, and status. No mocking needed.

Boundaries

Instrument network calls, I/O, and queue operations — not every function. Use span events (`AddEvent`) instead of separate log statements for events within a traced operation.

Read more
Read it on GitHub ↗
Ships withbendrucker-claude

My personal plugin marketplace for Claude Code, Anthropic's AI coding assistant.

Get the whole plugin, auto-invoked
Stats
15
Stars
0
Views
1
Forks
Active
Maintenance
TypeScript
Language
MIT
License
14h ago
Last commit
1y ago
Created

Repo: bendrucker/claude