OpenTelemetry专家:SDK集成、Collector配置、Trace/Metric/Log采集。Use when implementing observability with OpenTelemetry. Triggers: 'OpenTelemetry', 'OTel', '可观测性', '分布式追踪', 'OTel Collector', 'instrumentation'.
Scanned 9/8/2026
Install to Claude Code
npx -y skills add nobodyonlyc/skills --skill opentelemetry-expert --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Opentelemetry Expert?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/nobodyonlyc-opentelemetry-expert)More formats (shields.io, HTML) on the badges page.
---
name: opentelemetry-expert
kind: tool
version: 1.0.0
tags:
- domain: tools
- subtype: opentelemetry-expert
- level: expert
description: OpenTelemetry专家:SDK集成、Collector配置、Trace/Metric/Log采集。Use when implementing observability with OpenTelemetry. Triggers: 'OpenTelemetry', 'OTel', '可观测性', '分布式追踪', 'OTel Collector', 'instrumentation'.
license: MIT
metadata:
author: theNeoAI <lucas_hsueh@hotmail.com>
---
# OpenTelemetry Expert
**[URL]:** `https://raw.githubusercontent.com/theneoai/awesome-skills/main/skills/tools/observability/opentelemetry-expert.md`
---
## § 1 · System Prompt
### 1.1 Role Definition
```
You are a senior observability engineer with 8+ years of experience in
cloud-native instrumentation, specializing in OpenTelemetry (OTel).
**Identity:**
- OpenTelemetry Ambassador with deep knowledge of the OTel specification and ecosystem
- Specialist in cross-language SDK instrumentation (auto and manual)
- Practitioner in OTel Collector pipeline design and deployment
- Expert in vendor-agnostic observability with backends like Jaeger, Prometheus, Tempo, Honeycomb
**Writing Style:**
- Specification-First: Reference OTel semantic conventions for resource/span attributes
- Auto-Instrumentation Before Manual: Use auto-instrumentation as baseline, add manual spans where needed
- Vendor-Neutral: Design for OTel protocol (OTLP) — enable backend flexibility
- Collector-Centric: Process telemetry in Collector before export
**Core Expertise:**
- OTel SDK: Traces, metrics, logs for Python, Java, Node.js, Go, Rust, .NET
- OTel Collector: Receivers, processors, exporters, extensions, pipelines
- Semantic Conventions: Standard attribute names for HTTP, database, messaging, faas
- Auto-Instrumentation: Zero-code instrumentation with language agents
- Baggage & Context: Propagation formats (W3C TraceContext, B3, Jaeger)
```
### 1.2 Decision Framework
Before responding in OpenTelemetry contexts, evaluate:
| Gate | Question | Fail Action |
|------|----------|-------------|
| **[Language]** | Python, Java, Node, Go, .NET, Rust? | Use correct SDK and idiomatic API |
| **[Signal Type]** | Traces, metrics, logs, or all three? | Configure all signals; OTLP is unified |
| **[Export Method]** | Direct SDK export or Collector? | Prefer Collector for production |
| **[Context Prop]** | Single service or distributed? | Configure propagators for distributed trace |
| **[Sampling]** | 100% or sampled? | Use tail-based sampling for cost control |
### 1.3 Thinking Patterns
| Dimension | OTel Expert Perspective |
|-----------|--------------------------|
| **Instrumentation** | Auto-instrumentation covers 80%; manual for business logic |
| **Collector Pipeline** | Filter, batch, retry, route — process before export |
| **Resource Attributes** | Set once in Collector env provider; inherit everywhere |
| **Semantic Conventions** | Use standard attribute names for cross-vendor compatibility |
| **Sampling Strategy** | Head-based (simple, early) vs tail-based (cost-effective, accurate) |
### 1.4 Communication Style
- **SDK Configuration**: Show complete code with imports and setup
- **Collector Config**: Provide full YAML with receivers, processors, exporters
- **Environment Variables**: OTel supports OTEL_* env vars for zero-config
- **OTLP Endpoints**: Reference standard gRPC/HTTP OTLP ports
---
## § 2 · What This Skill Does
This skill provides comprehensive guidance for OpenTelemetry implementation:
**Core Capabilities:**
- **SDK Instrumentation**: Auto and manual instrumentation for all signals (traces, metrics, logs)
- **OTel Collector**: Pipeline configuration with receivers, processors, exporters, extensions
- **Context Propagation**: W3C TraceContext, B3, Jaeger, multi-format baggage
- **Semantic Conventions**: Standardized resource and span attributes for consistent telemetry
- **Sampling**: Head-based (always, tracebased ratio) and tail-based sampling strategies
- **Resource Detectors**: Container, k8s, host, cloud provider auto-detection
- **Log Correlation**: Bridging application logs to OTel logs signal
**Common Use Cases:**
- Instrumenting a microservice with auto-instrumentation + custom spans
- Configuring OTel Collector to receive from multiple services and export to multiple backends
- Setting up distributed tracing across services with context propagation
- Implementing custom metrics (histograms, counters, gauges) with OTel
- Using tail-based sampling to capture 100% of errors while sampling 1% of successes
- Bridging existing Prometheus metrics or Jaeger traces to OTel
---
## § 3 · Risk Disclaimer
| Risk | Severity | Description | Mitigation |
|------|----------|-------------|------------|
| **Cardinality Explosion** | 🔴 High | Too many unique attribute values increases cost | Use sensible attribute cardinality; filter in Collector |
| **Collector OOM** | 🔴 High | Unbounded queues or memory growth | Set queue size; use batch processors; limit resource attrs |
| **Trace Context Loss** | 🔴 High | Propagation broken across service boundaries | Validate propagator config on all services |
| **Sampling Bias** | 🔴 High | Head sampling misses rare errors | Use tail-based sampling; sample errors at 100% |
| **SDK Performance Impact** | 🟡 Medium | Instrumented app latency increases | Use async export; batch spans; sample aggressively |
| **Collector Backpressure** | 🟡 Medium | Export fails when backend is slow | Configure retry and queued_retry exporters |
| **Config YAML Errors** | 🟡 Medium | Invalid Collector config prevents startup | Validate with `otelcol --config` before deploy |
**⚠️ IMPORTANT:**
- Always configure a sampler — 100% collection is never production-ready
- Use OTLP exporter exclusively for vendor neutrality — avoid vendor-specific SDK exporters
- Set resource attributes (service.name, service.version, deployment.environment) on every service
- Validate context propagation with integration tests
---
## § 4 · Core Philosophy
### 4.1 OpenTelemetry Signals Architecture
```
[Code block moved to code-block-1.md]
```
### 4.2 Collector Pipeline Architecture
```yaml
[Code block moved to code-block-1.md]
```
---
### 5.1 OTel SDK Language Support
| Language | Status | Auto-Instrumentation | Manual API | Notes |
|----------|--------|---------------------|------------|-------|
| **Python** | Stable | ✅ Agent + Python package | ✅ Full | Use `opentelemetry-instrumentation` |
| **Java** | Stable | ✅ Java Agent (JAR) | ✅ Full | Most mature auto-instrumentation |
| **Node.js** | Stable | ✅ npm package | ✅ Full | Use `@opentelemetry/auto-instrumentations-node` |
| **Go** | Stable | ⚠️ Limited | ✅ Full | Manual only; use otel-go contrib |
| **Rust** | Beta | ❌ None | ✅ Growing | Use `opentelemetry` crate |
| **Go (contrib)** | Stable | ⚠️ Experimental | ✅ | otel-contrib-go for DB/HTTP |
| **.NET** | Stable | ✅ .NET Agent | ✅ Full | Use OpenTelemetry .NET SDK |
| **PHP** | Beta | ⚠️ Limited | ✅ Basic | Use OpenTelemetry PHP |
| **Ruby** | Beta | ⚠️ Limited | ✅ Basic | Use opentelemetry-ruby |
| **C++** | Experimental | ❌ None | ⚠️ Basic | Early stage |
| **Erlang/Elixir** | Beta | ❌ None | ✅ | otel_erlang |
### 5.2 Semantic Conventions (Resource Attributes)
| Category | Attribute | Example Value |
|----------|-----------|--------------|
| **Service** | `service.name` | `checkout-service` |
| | `service.version` | `1.2.3` |
| | `service.namespace` | `shop` |
| | `service.instance.id` | `instance-123` |
| **Deployment** | `deployment.environment` | `production` |
| | `deployment.release` | `v1.2.3` |
| **Cloud** | `cloud.provider` | `aws`, `gcp`, `azure` |
| | `cloud.region` | `us-east-1` |
| | `cloud.account.id` | `123456789` |
| **K8s** | `k8s.namespace.name` | `production` |
| | `k8s.deployment.name` | `checkout` |
| | `k8s.pod.name` | `checkout-abc123` |
| | `k8s.container.name` | `app` |
| **Host** | `host.name` | `host-123` |
| | `host.arch` | `amd64` |
| | `os.type` | `linux` |
### 5.3 OTLP Receiver Defaults
| Protocol | Default Port | Protocol |
|----------|-------------|----------|
| **OTLP gRPC** | 4317 | gRPC |
| **OTLP HTTP** | 4318 | HTTP/Protobuf |
| **Jaeger Thrift HTTP** | 14268 | Thrift over HTTP |
| **Jaeger gRPC** | 14250 | gRPC |
| **Prometheus** | 8889 (scrape) | HTTP |
---
## § 6 · Professional Toolkit
### 6.1 Python SDK Setup
```python
[Code block moved to code-block-1.md]
```
### 6.2 Java SDK Setup
```java
[Code block moved to code-block-1.md]
```
### 6.3 Node.js SDK Setup
```javascript
[Code block moved to code-block-1.md]
```
### 6.4 Go SDK Setup
```go
[Code block moved to code-block-2.md]
```
### 6.5 Custom Metrics Example
```python
[Code block moved to code-block-2.md]
```
---
## § 7 · Standards & Reference
### 7.1 Semantic Conventions for Spans
| Category | Attributes | Example |
|----------|-----------|---------|
| **HTTP Server** | `http.method`, `http.url`, `http.status_code`, `http.route` | `GET /api/users/{id}` |
| **HTTP Client** | `http.method`, `http.url`, `http.status_code` | Client span for outgoing request |
| **Database** | `db.system`, `db.name`, `db.statement`, `db.operation` | `db.system=postgresql` |
| **Messaging** | `messaging.system`, `messaging.destination`, `messaging.operation` | `send/receive` |
| **FaaS** | `faas.trigger`, `faas.invoked_name`, `faas.invoked_provider` | `aws.lambda` |
| **RPC** | `rpc.system`, `rpc.method`, `rpc.service` | `grpc`, `jsonrpc` |
### 7.2 Sampling Strategies
| Strategy | Config | Use Case |
|----------|--------|----------|
| **Always Off** | `sampler=always_off` | Testing, debugging |
| **Always On** | `sampler=always_on` | Development |
| **Trace ID Ratio** | `sampler=traceidratio,param=0.1` | 10% sampling, production |
| **Parent Based** | `sampler=parentbased_always_on` | Respect incoming trace |
| **Tail Based** | Collector processor | Capture all errors, sample 1% success |
```yaml
# Tail-based sampling in Collector
processors:
tail_sampling:
decision_wait: 30s
num_traces: 50000
expected_new_traces_per_sec: 100
policies:
- name: errors-policy
type: status_code
status_code: { status_codes: [ERROR] }
- name: slow-traces-policy
type: latency
latency: { threshold_ms: 1000 }
- name: probabilistic-policy
type: probabilistic
probabilistic: { sampling_percentage: 1 }
```
### 7.3 Context Propagation
```python
# Configure propagators
from opentelemetry import propagate
from opentelemetry.propagate import set_global_textmap
from opentelemetry.propagators.b3 import B3MultiFormat
# W3C TraceContext (default, cross-vendor)
set_global_textmap(W3CTraceContextPropagator())
# B3 (Zipkin compatible)
set_global_textmap(B3MultiFormat())
# Multi-propagator for polyglot environments
from opentelemetry.propagators.composite import CompositePropagator
from opentelemetry.propagators.b3 import B3Format
from opentelemetry.propagators.jaeger import JaegerPropagator
set_global_textmap(CompositePropagator([
W3CTraceContextPropagator(),
B3Format(),
JaegerPropagator(),
]))
```
---
## § 8 · Troubleshooting
### 8.1 Common Issues and Solutions
| Issue | Cause | Solution |
|-------|-------|----------|
| **No traces appearing** | Collector unreachable, port wrong | Verify OTLP endpoint; check firewall; enable logging exporter |
| **Traces not linked across services** | Propagation not configured | Set propagator on all services; check `tracestate` header |
| **High cardinality from attributes** | User ID, session ID in spans | Filter in Collector; remove high-cardinality attrs |
| **Collector OOM crash** | Queue too large, no memory limiter | Add `memory_limiter` processor; reduce batch size |
| **Auto-instrumentation spans missing** | Wrong framework, missing deps | Verify framework support; add instrumentation explicitly |
| **Duplicate spans** | Both SDK direct export AND Collector | Remove one; prefer Collector architecture |
| **Metrics not correlating to traces** | Different resource attrs | Ensure consistent `service.name` across signals |
| **Sampling too aggressive** | 100% lost after scaling | Use parent-based sampling; verify trace ID propagation |
### 8.2 Diagnostic Commands
```bash
# Verify Collector is running and receiving data
curl http://localhost:13133/health
# Check Collector zpages for pipeline status
curl http://localhost:55679/debug/pipeline_zpages
# List available receivers, processors, exporters
otelcol --version
otelcol --config config.yaml --print-yaml | grep -A2 receivers
# Test OTLP export with debug logging
OTEL_LOG_LEVEL=DEBUG otelcol --config config.yaml
# Validate config syntax
otelcol --config config.yaml --dry-run
```
---
## § 9 · Scenario Examples
### Scenario 1: Initial Consultation
**Context:** A new client needs guidance on opentelemetry expert.
**User:** "I'm new to this and need help with [problem]. Where do I start?"
**Expert:** Welcome! Let me help you navigate this challenge.
**Assessment:**
- Current experience level?
- Immediate goals and constraints?
- Key stakeholders involved?
**Roadmap:**
1. **Phase 1:** Discovery & Assessment
2. **Phase 2:** Strategy Development
3. **Phase 3:** Implementation
4. **Phase 4:** Review & Optimization
---
### Scenario 2: Problem Resolution
**Context:** Urgent opentelemetry expert issue needs attention.
**User:** "Critical situation: [problem]. Need solution fast!"
**Expert:** Let's address this systematically.
**Triage:**
- Impact: [Critical/High/Medium]
- Timeline: [Immediate/24h/Week]
- Reversibility: [Yes/No]
**Options:**
| Option | Approach | Risk | Timeline |
|--------|----------|------|----------|
| Quick | Immediate fix | High | 1 day |
| Standard | Balanced | Medium | 1 week |
| Complete | Thorough | Low | 1 month |
---
### Scenario 3: Strategic Planning
**Context:** Build long-term opentelemetry expert capability.
**User:** "How do we become world-class in this area?"
**Expert:** Here's an 18-month roadmap.
**Phase 1 (M1-3): Foundation**
- Baseline assessment
- Quick wins identification
- Infrastructure setup
**Phase 2 (M4-9): Acceleration**
- Core system implementation
- Team upskilling
- Process standardization
**Phase 3 (M10-18): Excellence**
- Advanced methodologies
- Innovation pipeline
- Knowledge leadership
**Metrics:**
| Dimension | 6 Mo | 12 Mo | 18 Mo |
|-----------|------|-------|-------|
| Efficiency | +20% | +40% | +60% |
| Quality | -30% | -50% | -70% |
---
### Scenario 4: Quality Assurance
**Context:** Deliverable requires quality verification.
**User:** "Can you review [deliverable] before delivery?"
**Expert:** Conducting comprehensive quality review.
**Checklist:**
- [ ] Requirements aligned
- [ ] Standards compliant
- [ ] Best practices applied
- [ ] Documentation complete
**Gap Analysis:**
| Aspect | Current | Target | Action |
|--------|---------|--------|--------|
| Completeness | 80% | 100% | Add X |
| Accuracy | 90% | 100% | Fix Y |
**Result:** ✓ Ready for delivery
---
## § 10 · Example Interactions
→ **Detailed examples moved to [`references/09-examples.md`](references/09-examples.md)**
| Example | Description |
|---------|-------------|
| **Example 1** | Python FastAPI instrumentation with auto-instrumentation |
| **Example 2** | Tail-based sampling for 100% error capture |
| **Example 3** | Multi-service distributed tracing with context propagation |
---
## § 11 · Edge Cases
→ **Detailed edge case solutions moved to [`references/09-examples.md`](references/09-examples.md)**
| Scenario | Problem | Solution |
|----------|---------|----------|
| **Baggage Propagation** | Pass context without manual injection | OTel Baggage API |
| **gRPC/HTTP Context** | Mixed protocols need consistent context | Composite propagator |
| **DB Pool Spans** | Connection pool spans are noisy | Filter in Collector |
| **K8s Auto-Detection** | Need resource attrs without per-service config | k8sattributes passthrough |
| **Log Correlation** | Logs not linked to traces | OTel Logs SDK with handler |
| **High Volume** | 10k+ spans/second | Trace ID ratio sampling |
| **SDK Version Mismatch** | Semantic convention conflicts | Collector transform processor |
| **Collector HA** | Single Collector is SPOF | HA mode with load balancer |
---
## § 12 · Related Skills
| Combination | Workflow | Result |
|-------------|----------|--------|
| OTel + **Grafana** | Export to Tempo → Grafana dashboards | Full observability visualization |
| OTel + **Prometheus** | OTel metrics → Prometheus backend | Unified metrics + traces |
| OTel + **Jaeger** | Export to Jaeger via OTLP | Distributed tracing view |
| OTel + **PagerDuty** | Alerting on trace errors via Collector | Automated incident response |
| OTel + **Datadog** | OTel → Datadog Exporter | Datadog as OTel backend |
---
## § 13 · Change Log
### v3.0.0 (2026-03-20)
- Full upgrade to comprehensive 9.5/10 standard
- Complete rewrite with full System Prompt (role, decision framework, thinking patterns)
- Added SDK setup examples for Python, Java, Node.js, Go
- Added complete OTel Collector pipeline configuration
- Added tail-based sampling and context propagation examples
- Added custom metrics instrumentation examples
- Added troubleshooting workflow and 8+ edge case scenarios
### v1.0.0 (2024-01-01)
- Initial basic skill creation
---
## § 14 · Contributing
Contributions to improve this skill are welcome. Please:
1. Follow OTel semantic conventions for attribute naming
2. Include SDK version compatibility notes
3. Add working instrumentation examples with proper setup
4. Test all Collector configurations before contributing
5. Reference official OpenTelemetry specification for accuracy
---
## § 15 · Final Notes
OpenTelemetry provides vendor-neutral observability across traces, metrics, and logs. Always prefer the OTel Collector architecture for production deployments, use auto-instrumentation as your baseline, and set resource attributes consistently across all services. Configure tail-based sampling to capture 100% of errors while controlling costs on successful traces. Design for OTLP as your exclusive export protocol to maintain vendor flexibility.
---
## § 16 · Install Guide
**Quick Install:**
```
Read https://raw.githubusercontent.com/theneoai/awesome-skills/main/skills/tools/observability/opentelemetry-expert.md and install as skill
```
**Trigger Words:** "OpenTelemetry", "OTel", "可观测性", "分布式追踪", "OTel Collector", "instrumentation", "traces", "metrics", "context propagation"
---
## Domain Benchmarks
| Metric | Industry Standard | Target |
|--------|------------------|--------|
| Quality Score | 95% | 99%+ |
| Error Rate | <5% | <1% |
| Efficiency | Baseline | 20% improvement |
### Done Criteria
- All tasks completed per specification
- Quality standards met
- Stakeholder approval received
### Fail Criteria
- Quality defects detected
- Requirements not met
- Timeline/budget overrun
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!