Expert OpenTelemetry guidance for collector configuration, pipeline design, and production telemetry instrumentation. Use when configuring collectors, designing pipelines, instrumenting applications, implementing sampling, managing cardinality, securing telemetry, writing OTTL transformations, or setting up AI coding agent observability (Claude Code, Codex, Gemini CLI, GitHub Copilot).
93
97%
Does it follow best practices?
Impact
85%
7.08xAverage score across 4 eval scenarios
Passed
No known issues
Purpose: Document agent rationalizations that bypass best practices, and their counters
Philosophy: Agents will find creative excuses to skip complexity. Document these rationalizations and add explicit counters to SKILL.md.
This table tracks agent "excuses" discovered during RED/GREEN testing phases and maps them to countermeasures added to the skill.
| Scenario | Rationalization | Counter Added to SKILL.md | Status |
|---|---|---|---|
| Collector Config | "Here's a basic configuration" | Core Principle #4: Safety First - memory_limiter mandatory | ✅ Added |
| Cardinality | "This gives you detailed metrics" | Core Principle #5: Cardinality Awareness - Rule of 100 | ✅ Added |
| Tail Sampling | "Here's the tail sampling config" | Sampling trigger: sticky sessions required | ✅ Added |
| TLS Config | "Set up the endpoint connection" | Core Principle #6: Security by Default | ✅ Added |
| PII Handling | "Here's the standard pipeline" | Security trigger: PII redaction mandatory | ✅ Added |
| Sampling Strategy | "Use tail sampling for best results" | System 2 Thinking: Signal Volume & Throughput | ✅ Added |
| Deployment Pattern | "DaemonSet is the standard pattern" | Progressive Disclosure: Architecture trigger | ✅ Added |
| Semantic Conventions | "Here's how to add those attributes" | Core Principle #2: Convention over Configuration | ✅ Added |
| Persistence | "Use retry configuration" | Core Principle #4: Persistent queues for production | ✅ Added |
| OTTL Performance | "Here's the transformation" | OTTL trigger: Performance considerations | ✅ Added |
Pattern: Agent simplifies by omitting "advanced" features
Examples:
Counter Strategy:
Pattern: Agent applies generic wisdom without context-specific analysis
Examples:
Counter Strategy:
Pattern: Agent justifies user's problematic request instead of challenging it
Examples:
Counter Strategy:
Pattern: Agent caves to time pressure from user
Examples:
Counter Strategy:
Date: 2026-01-31
Scenarios Tested: 0/10 (Baseline creation)
Findings:
Actions Taken:
Date: TBD
Scenarios Tested: 0/10
Baseline Results:
New Rationalizations Discovered:
Actions Needed:
When a new rationalization is discovered, add it to SKILL.md using this format:
❌ [Anti-pattern behavior]
**Agent Rationalization:** "[Exact quote from testing]"
**Counter:** [Specific requirement/explanation]
**References:** [Link to relevant section]❌ Accepting high-cardinality attributes (user_id, session_id) as metric dimensions
**Agent Rationalization:** "This gives you detailed metrics per user"
**Counter:** Unbounded attributes cause cardinality explosion. A service with 1M users creates 1M metric series, causing storage cost overruns and query performance degradation. Use traces for high-cardinality data, or aggregate to bounded dimensions (e.g., user count by region).
**References:** Core Principle #5, instrumentation.md Rule of 100Goal: After multiple iterations, agent should:
Measurement:
| Iteration | Scenarios Passed | Avg Rationalizations per Scenario | New Rationalizations Found |
|---|---|---|---|
| 1 (Baseline) | 0/10 | N/A | 10 (initial set) |
| 2 | TBD | TBD | TBD |
| 3 | TBD | TBD | TBD |
| ... | ... | ... | ... |
Iterate until all scenarios pass consistently.
If you discover new failure modes:
baseline-scenarios.mdMake the skill bulletproof through continuous testing.
❌ Bad Counter:
"Consider using memory_limiter"✅ Good Counter:
"memory_limiter MUST be the first processor in the chain to prevent out-of-memory crashes. Configuration defaults: limit_percentage: 80, spike_limit_percentage: 20"Strong counters:
Weak counters:
This table is living documentation. Update it after every testing iteration.
docs
evals
cardinality-protection
claude-code-telemetry
collector-memory-limiter
scenario-1
scenario-2
scenario-3
scenario-4
tail-sampling-setup
references