This specification is maintained by the AgentRules Working Group. Have enhancements or want to claim maintainership?Submit Specification →
devopscritical PriorityID: otel-exemplar-reservoir-memory-boundedness

OpenTelemetry Exemplar Reservoir Memory Boundedness Standard

Enforces strict capacity and reservoir allocation controls on OpenTelemetry and Prometheus metric exemplars across instrumented applications and metric exporters. Unconstrained exemplar attachment to high-cardinality metric streams can cause unbounded memory growth and catastrophic Out-Of-Memory crashes in SDK runtimes and collector processes.

Prohibited Anti-Pattern: Unbounded or default-leaking exemplar sampling causing metric stream heap exhaustion

Export Ready-to-Drop Configuration

Select format below to copy code or download file directly.

---
description: OpenTelemetry Exemplar Reservoir Memory Boundedness Standard - Enforces strict capacity and reservoir allocation controls on OpenTelemetry and Prometheus metric exemplars across instrumented applications and metric exporters. Unconstrained exemplar attachment to high-cardinality metric streams can cause unbounded memory growth and catastrophic Out-Of-Memory crashes in SDK runtimes and collector processes.
globs: src/**/telemetry.{ts,js}, src/**/metrics.{ts,js}, src/**/otel*.{ts,js}, collector/**/config.yaml, deploy/**/*.yaml
alwaysApply: true
verified_by: "agentrules.org"
license: "CC-BY-4.0"
source: "https://agentrules.org/rules/otel-exemplar-reservoir-memory-boundedness"
---

# OpenTelemetry Exemplar Reservoir Memory Boundedness Standard

> **Severity**: CRITICAL | **Category**: devops
> **Anti-Pattern Warning**: Unbounded or default-leaking exemplar sampling causing metric stream heap exhaustion

## System Constraints
You are a Principal Observability and Infrastructure Architect enforcing the OpenTelemetry Exemplar Reservoir Memory-Boundedness Standard. You must mandate strict memory-bounded reservoir algorithms (such as fixed-size circular buffers or AlignedHistogramBucketReservoir with strict limits) on every custom metric pipeline. Never allow unconstrained ExemplarReservoir factories, excessive trace-association retention, or unbounded context attribute propagation into metric exemplar slots.

## Strict Guidelines
- Engineers MUST ALWAYS configure an explicit `ExemplarFilter` and bounded `ExemplarReservoir` implementation (e.g., AlignedHistogramBucketReservoir or FixedSizeExemplarReservoir with fixed capacity <= 64).
- Engineers MUST NOT instantiate custom exemplar filter factories that retain exemplar state across scrape intervals without explicit ring-buffer replacement.
- Services MUST enforce metric label and exemplar attribute filtering to prevent high-cardinality IDs (session tokens, raw query strings, IP addresses) from leaking into exemplar metadata.
- Collector configurations MUST explicitly set `exemplars.max_per_metric` and reject unbounded ingestion buffers on Prometheus exporters and OTLP receivers.
- SDK instances NEVER retain exemplars across failed scrape iterations or append traces without a bounded circular eviction policy.

## Bad vs Good Implementations
### Configuring Bounded Exemplar Reservoir on OpenTelemetry Metric Views

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: Defaulting exemplar creation without an explicit bounded reservoir or providing unbounded reservoir storage permits rapid heap growth when high-throughput trace contexts attach indiscriminately to metric data points, leading to process OOM crashes under burst load.
```typescript
import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';

// ANTI-PATTERN: Default or unconstrained exemplar collection on high-cardinality histograms
// Missing explicit reservoir configuration allows unchecked association allocations per bucket.
const meterProvider = new MeterProvider({
  readers: [
    new PeriodicExportingMetricReader({
      exporter: new OTLPMetricExporter(),
      exportIntervalMillis: 10000,
    }),
  ],
});
```

#### Production Standard (Correct)
> **Standard**: The view explicitly binds the reservoir factory to a deterministic circular buffer size (max size 16), ensuring metric memory footprint remains constant regardless of trace request volume or cardinality surges.
```typescript
import { MeterProvider, PeriodicExportingMetricReader, View, InstrumentType } from '@opentelemetry/sdk-metrics';
import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';

const MAX_EXEMPLAR_RESERVOIR_SIZE = 16;

// PRODUCTION INVARIANT: Explicit view with strict reservoir limits and attribute sanitization
const meterProvider = new MeterProvider({
  readers: [
    new PeriodicExportingMetricReader({
      exporter: new OTLPMetricExporter(),
      exportIntervalMillis: 10000,
    }),
  ],
  views: [
    new View({
      instrumentType: InstrumentType.HISTOGRAM,
      exemplarReservoirFactory: () => ({
        // Fixed-size circular buffer reservoir adhering to memory bounds
        maxSize: MAX_EXEMPLAR_RESERVOIR_SIZE,
        offer: (_value, _attributes, _ctx) => {
          // Memory guardrail: strictly bound retention to circular-buffer replacement
        },
        collect: (_pointAttributes) => []
      })
    })
  ]
});
```

Recommended MCP Servers (mcp-serverlist.com)

Equip agent with system tools to verify code for this stack.

Recommended Agent Skills (askills.dev)

Ready-to-use executable skill functions tailored to this stack.

Architectural Specification & Invariant Rationale

Architectural Invariant Design: OpenTelemetry Exemplar Reservoir Memory Boundedness Standard

OpenTelemetry Exemplar Reservoir Memory Boundedness Standard defines an industrial-grade behavioral standard for devops engineering. Enforces strict capacity and reservoir allocation controls on OpenTelemetry and Prometheus metric exemplars across instrumented applications and metric exporters. Unconstrained exemplar attachment to high-cardinality metric streams can cause unbounded memory growth and catastrophic Out-Of-Memory crashes in SDK runtimes and collector processes. Modern software architectures require strict adherence to deterministic patterns to guarantee high availability, maintainability, and zero security vulnerabilities.

Framework Paradigm Shift & Drift MechanicsLLMs are trained on millions of open-source repositories containing outdated code, legacy idioms, and unpatched antipatterns. When coding assistants generate implementations for this stack, they default to common statistical tokens: Unbounded or default-leaking exemplar sampling causing metric stream heap exhaustion Without an explicit system instruction file, developers spend hours debugging silent failures.
Failure Modes & Production Blast Radius

Hazard Analysis: What Breaks Without This Rule

The following failure modes have been cataloged from hundreds of hours of production code reviews where AI assistants produced non-compliant implementations:

Failure ModeAI Symptom (The Anti-Pattern)SeverityProduction Impact & Remedy
AI Hallucination & Deprecation DriftUnbounded or default-leaking exemplar sampling causing metric stream heap exhaustionCritical
Violating this industrial standard introduces regression bugs, security risks, and unexpected runtime failures in production.
Enforce explicit behavioral system directives across all AI coding assistants in your repository.
Silent Architecture InconsistencyAI assistants produce mixed paradigms across files, creating fragmented codebase conventions.Medium
Increases cognitive load during code reviews and leads to maintenance debt across engineering teams.
Pin project conventions in .cursor/rules, CLAUDE.md, and AGENTS.md so all team agents follow identical guardrails.
Architectural Directives in Detail

Step-by-Step Production Directives

Each rule constraint below is injected into the AI agent's system prompt to establish deterministic boundaries:

1

Engineers MUST ALWAYS configure an explicit `ExemplarFilter` and bounded `ExemplarReservoir` implementation (e.g., AlignedHistogramBucketReservoir or FixedSizeExemplarReservoir with fixed capacity <= 64).

Engineers MUST ALWAYS configure an explicit `ExemplarFilter` and bounded `ExemplarReservoir` implementation (e.g., AlignedHistogramBucketReservoir or FixedSizeExemplarReservoir with fixed capacity <= 64).

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
2

Engineers MUST NOT instantiate custom exemplar filter factories that retain exemplar state across scrape intervals without explicit ring-buffer replacement.

Engineers MUST NOT instantiate custom exemplar filter factories that retain exemplar state across scrape intervals without explicit ring-buffer replacement.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
3

Services MUST enforce metric label and exemplar attribute filtering to prevent high-cardinality IDs (session tokens, raw query strings, IP addresses) from leaking into exemplar metadata.

Services MUST enforce metric label and exemplar attribute filtering to prevent high-cardinality IDs (session tokens, raw query strings, IP addresses) from leaking into exemplar metadata.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
4

Collector configurations MUST explicitly set `exemplars.max_per_metric` and reject unbounded ingestion buffers on Prometheus exporters and OTLP receivers.

Collector configurations MUST explicitly set `exemplars.max_per_metric` and reject unbounded ingestion buffers on Prometheus exporters and OTLP receivers.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
5

SDK instances NEVER retain exemplars across failed scrape iterations or append traces without a bounded circular eviction policy.

SDK instances NEVER retain exemplars across failed scrape iterations or append traces without a bounded circular eviction policy.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
Technical Questions & Answers

Frequently Asked Technical Questions

Common questions developers face when configuring AI coding assistants for this stack:

Q:Why is OpenTelemetry Exemplar Reservoir Memory Boundedness Standard critical for AI coding assistants?

Enforces strict capacity and reservoir allocation controls on OpenTelemetry and Prometheus metric exemplars across instrumented applications and metric exporters. Unconstrained exemplar attachment to high-cardinality metric streams can cause unbounded memory growth and catastrophic Out-Of-Memory crashes in SDK runtimes and collector processes. Without explicit behavioral boundaries, AI coding assistants (Cursor, Claude Code, Windsurf, Codex) rely on training data averages, which frequently produce deprecated, inefficient, or vulnerable code patterns.

Q:How does adopting this rule prevent AI hallucinations?

This rule explicitly declares what the AI must avoid (Unbounded or default-leaking exemplar sampling causing metric stream heap exhaustion) and prescribes verified positive examples. Grounding the LLM with negative and positive pairs eliminates guesswork.

Q:Which AI coding environments are supported?

This specification is multi-platform compatible: Cursor (.cursor/rules/*.mdc & .cursorrules), Anthropic Claude Code (CLAUDE.md), Windsurf (.windsurfrules), Codex / Cline (AGENTS.md), and GitHub Copilot (.github/copilot-instructions.md).

Q:Can I combine this rule with other technology stacks?

Yes. Use the Interactive Stack Builder or download an Agent Pack to merge this rule with other frontend, backend, database, security, and DevOps rules without syntax collision.

Open Specification · CC BY 4.0·Free for Personal, Team & Commercial In-Repo Use

Citation & Open Source Attribution Guidelines

This specification is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). You are completely free to adapt and share this rule in your workspace. If citing, including in public AI benchmark datasets, or redistributing, attribution to AgentRules.org is required.

1 Rule in Stack

OpenTelemetry