Claude Skill

otel-js

OpenTelemetry in Node.js / JavaScript / TypeScript — NodeSDK, declarative YAML configuration, auto-instrumentations, ESM vs CJS import patterns. Use when adding, reviewing, or configuring OpenTelemetry in a Node.js service. Triggers on "setup otel in node", "js telemetry", "node

LLM Mart · 0 points · 0 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download ollygarden-opentelemetry-agent-skills-skills_otel-js-9671795.zip · 3 KB
Part of ollygarden/opentelemetry-agent-skills — 19 skills

Install

skills CLI npx skills add https://github.com/ollygarden/opentelemetry-agent-skills/tree/main/skills/otel-js
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install ollygarden-opentelemetry-agent-skills@llmmart
Git git clone https://github.com/ollygarden/opentelemetry-agent-skills.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole ollygarden/opentelemetry-agent-skills collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

OpenTelemetry in Node.js

Entry point for OpenTelemetry mechanics in Node.js / JavaScript / TypeScript services. Load a reference below based on the task; each reference is self-contained.

References

File Use when
references/declarative-setup.md Configuring the SDK via declarative YAML: OTEL_CONFIG_FILE, @opentelemetry/configuration, @opentelemetry/sdk-node, ESM/CJS import order, v2.0 migration.

Sources of Truth

For YAML schema details, fetch the upstream sources listed in the otel-declarative-config skill. For Node.js-specific facts:

Fact Fetch
Latest @opentelemetry/configuration npm view @opentelemetry/configuration version
Latest @opentelemetry/sdk-node npm view @opentelemetry/sdk-node version
Latest @opentelemetry/auto-instrumentations-node npm view @opentelemetry/auto-instrumentations-node version
Released package status / breaking changes (2.11.0 / 0.222.0) WebFetch https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/v2.11.0/experimental/packages/configuration/README.md and WebFetch https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/v2.11.0/experimental/packages/opentelemetry-sdk-node/README.md
Experimental CHANGELOG through 0.222.0 WebFetch https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/v2.11.0/experimental/CHANGELOG.md
ESM / CJS preload mechanics at 2.11.0 WebFetch https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/v2.11.0/doc/esm-support.md
Auto-instrumentations register entry point at 0.80.0 WebFetch https://raw.githubusercontent.com/open-telemetry/opentelemetry-js-contrib/auto-instrumentations-node-v0.80.0/packages/auto-instrumentations-node/README.md
Node.js getting-started docs WebFetch https://opentelemetry.io/docs/languages/js/getting-started/nodejs/

Cross-References

  • Schema-level facts: otel-declarative-config skill (language-agnostic YAML schema sources).
  • SDK version selection across languages: otel-sdk-versions skill.
  • Semantic conventions lookup: otel-semantic-conventions skill.
Files (opentelemetry-agent-skills)
  • references
    • declarative-setup.md 7 KB
      # JavaScript/Node.js SDK Setup with Declarative Configuration
      
      Configure the OpenTelemetry SDK in Node.js via declarative YAML. The
      `@opentelemetry/configuration` package parses YAML or environment-derived SDK settings;
      `@opentelemetry/sdk-node` applies them during startup.
      
      For the YAML configuration schema, load the `otel-declarative-config` skill.
      
      > **Status**: The `@opentelemetry/configuration` package is experimental. The API may change
      > between releases.
      
      ## Sources of Truth
      
      For YAML schema details, fetch the upstream sources listed in the `otel-declarative-config`
      skill. For JS-specific facts:
      
      | Fact | Fetch |
      |---|---|
      | Latest `@opentelemetry/configuration` | `npm view @opentelemetry/configuration version` |
      | Latest `@opentelemetry/sdk-node` | `npm view @opentelemetry/sdk-node version` |
      | Latest `@opentelemetry/auto-instrumentations-node` | `npm view @opentelemetry/auto-instrumentations-node version` |
      | Released package status / breaking changes (`2.11.0` / `0.222.0`) | `WebFetch https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/v2.11.0/experimental/packages/configuration/README.md` and `WebFetch https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/v2.11.0/experimental/packages/opentelemetry-sdk-node/README.md` |
      | SDK declarative startup helper at `0.222.0` | `WebFetch https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/v2.11.0/experimental/packages/opentelemetry-sdk-node/src/start.ts` |
      | Released file config parser (`file_format` acceptance) | `WebFetch https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/v2.11.0/experimental/packages/configuration/src/FileConfigFactory.ts` |
      | Released file config fixtures | `WebFetch https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/v2.11.0/experimental/packages/configuration/test/fixtures/sdk-config.yaml` |
      | Experimental CHANGELOG through `0.222.0` | `WebFetch https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/v2.11.0/experimental/CHANGELOG.md` |
      | ESM / CJS preload mechanics at `2.11.0` | `WebFetch https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/v2.11.0/doc/esm-support.md` |
      | Auto-instrumentations register entry point at `0.80.0` | `WebFetch https://raw.githubusercontent.com/open-telemetry/opentelemetry-js-contrib/auto-instrumentations-node-v0.80.0/packages/auto-instrumentations-node/README.md` |
      | Node.js getting-started docs | `WebFetch https://opentelemetry.io/docs/languages/js/getting-started/nodejs/` |
      
      ## Activation
      
      Set `OTEL_CONFIG_FILE` to a YAML config file, then preload a telemetry startup module
      before application code:
      
      ```typescript
      // instrumentation.ts
      import { startNodeSDK } from '@opentelemetry/sdk-node';
      import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
      
      startNodeSDK({
        instrumentations: [getNodeAutoInstrumentations()],
      });
      ```
      
      ```bash
      export OTEL_CONFIG_FILE=configs/otel.yaml
      node --import ./dist/instrumentation.js ./dist/index.js
      ```
      
      When `OTEL_CONFIG_FILE` is set, `@opentelemetry/configuration` reads that path as YAML.
      `@opentelemetry/sdk-node`'s experimental `startNodeSDK()` helper uses the resulting model
      to configure providers. If `OTEL_CONFIG_FILE` is unset, `createConfigFactory()` falls back
      to environment variables. If it is set but unreadable or invalid, `startNodeSDK()` logs a
      diagnostic error and returns a no-op SDK rather than falling back to env vars.
      
      Use `.yaml` or `.yml` filenames in examples and docs; verify extension enforcement against
      the current `FileConfigFactory.ts` source before claiming the parser rejects other suffixes.
      
      ## YAML Config
      
      For the canonical structure, fetch `examples/otel-sdk-config.yaml` (see the
      `otel-declarative-config` skill's Sources of Truth), then check the installed
      `@opentelemetry/configuration` package or its matching source/fixtures for runtime support.
      Verified 2026-10-15: `@opentelemetry/configuration` 0.223.0 generates its config types from
      schema v1.1.0, as has every release since the pinned 0.220.0 line, so write `file_format: "1.1"`. It accepts schema major `1` including `1.0`, warns
      on newer minor versions such as `"1.2"`, and rejects other major versions.
      
      ```yaml
      file_format: "1.1"
      resource:
        attributes:
          - name: service.name
            value: "${SERVICE_NAME:-my-node-service}"
            type: string
          - name: service.version
            value: "${SERVICE_VERSION:-0.1.0}"
            type: string
          - name: deployment.environment.name
            value: "${NODE_ENV:-development}"
            type: string
      
      # Tracer/meter/logger provider blocks: structure per the canonical example.
      ```
      
      ## Using Tracers and Meters
      
      ```typescript
      import { trace, metrics } from '@opentelemetry/api';
      
      const SCOPE = 'mycompany.com/myservice';
      const tracer = trace.getTracer(SCOPE);
      const meter = metrics.getMeter(SCOPE);
      ```
      
      ## ESM vs CommonJS
      
      For ESM projects, use `--import` to ensure instrumentation loads before application code:
      
      ```bash
      # ESM (Node.js >=18.19.0)
      OTEL_CONFIG_FILE=configs/otel.yaml node --import ./dist/instrumentation.js ./dist/index.js
      
      # CommonJS
      OTEL_CONFIG_FILE=configs/otel.yaml node --require ./dist/instrumentation.js ./dist/index.js
      ```
      
      If the service relies on auto-instrumentation patching ESM imports, include the current
      OpenTelemetry loader hook as described in `doc/esm-support.md`:
      
      ```bash
      node --experimental-loader=@opentelemetry/instrumentation/hook.mjs --import ./dist/instrumentation.js ./dist/index.js
      ```
      
      The zero-code `@opentelemetry/auto-instrumentations-node/register` entry point starts
      `NodeSDK` from environment variables; use `startNodeSDK()` when the task specifically needs
      declarative YAML via `OTEL_CONFIG_FILE`.
      
      ## Key API Facts
      
      - **Import order matters**: Telemetry setup must be imported and started before any other application imports. Auto-instrumentation patches modules at require/import time.
      - **`@opentelemetry/sdk-node` is experimental**. `new NodeSDK()` is its currently recommended startup mechanism; the declarative `startNodeSDK()` helper is also experimental. Both handle context manager, propagator, and provider registration automatically.
      - **v2.0 migration**: `Resource` class is no longer exported. Use `resourceFromAttributes()`, `defaultResource()`, `emptyResource()` instead.
      - **2.9.0 / 0.220.0 migration note**: `@opentelemetry/sdk-node` now uses `@opentelemetry/sdk-trace`; the `node` and `tracing` namespace re-exports are deprecated. Import trace SDK types/classes directly from their packages.
      - **2.10.0 / 0.221.0 propagator note**: Selecting `jaeger` through `OTEL_PROPAGATORS` or declarative config emits a deprecation warning. Use `tracecontext`; the Jaeger propagator still works in this release but is planned for removal.
      - **2.11.0 / 0.222.0 declarative migration note**: `startNodeSDK()` now fails fast while creating invalid resource, tracer-provider, meter-provider, or propagator configuration and returns a no-op SDK. This can also affect environment-derived configuration—for example, `OTEL_NODE_RESOURCE_DETECTORS=all` currently includes the unsupported declarative `container` detector. This does not affect `new NodeSDK()`.
      
  • SKILL.md 2.6 KB
    ---
    name: otel-js
    description: OpenTelemetry in Node.js / JavaScript / TypeScript — NodeSDK, declarative YAML configuration, auto-instrumentations, ESM vs CJS import patterns. Use when adding, reviewing, or configuring OpenTelemetry in a Node.js service. Triggers on "setup otel in node", "js telemetry", "node tracing setup", "NodeSDK", "auto instrumentation node", "TracerProvider node", or any Node.js-related OTel question.
    ---
    
    # OpenTelemetry in Node.js
    
    Entry point for OpenTelemetry mechanics in Node.js / JavaScript / TypeScript services.
    Load a reference below based on the task; each reference is self-contained.
    
    ## References
    
    | File | Use when |
    |---|---|
    | [`references/declarative-setup.md`](references/declarative-setup.md) | Configuring the SDK via declarative YAML: `OTEL_CONFIG_FILE`, `@opentelemetry/configuration`, `@opentelemetry/sdk-node`, ESM/CJS import order, v2.0 migration. |
    
    ## Sources of Truth
    
    For YAML schema details, fetch the upstream sources listed in the `otel-declarative-config` skill.
    For Node.js-specific facts:
    
    | Fact | Fetch |
    |---|---|
    | Latest `@opentelemetry/configuration` | `npm view @opentelemetry/configuration version` |
    | Latest `@opentelemetry/sdk-node` | `npm view @opentelemetry/sdk-node version` |
    | Latest `@opentelemetry/auto-instrumentations-node` | `npm view @opentelemetry/auto-instrumentations-node version` |
    | Released package status / breaking changes (`2.11.0` / `0.222.0`) | `WebFetch https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/v2.11.0/experimental/packages/configuration/README.md` and `WebFetch https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/v2.11.0/experimental/packages/opentelemetry-sdk-node/README.md` |
    | Experimental CHANGELOG through `0.222.0` | `WebFetch https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/v2.11.0/experimental/CHANGELOG.md` |
    | ESM / CJS preload mechanics at `2.11.0` | `WebFetch https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/v2.11.0/doc/esm-support.md` |
    | Auto-instrumentations register entry point at `0.80.0` | `WebFetch https://raw.githubusercontent.com/open-telemetry/opentelemetry-js-contrib/auto-instrumentations-node-v0.80.0/packages/auto-instrumentations-node/README.md` |
    | Node.js getting-started docs | `WebFetch https://opentelemetry.io/docs/languages/js/getting-started/nodejs/` |
    
    ## Cross-References
    
    - Schema-level facts: `otel-declarative-config` skill (language-agnostic YAML schema sources).
    - SDK version selection across languages: `otel-sdk-versions` skill.
    - Semantic conventions lookup: `otel-semantic-conventions` skill.
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related