-
Notifications
You must be signed in to change notification settings - Fork 0
OpenTelemetry Overview
π Get enterprise-grade trace correlation with RDCP in under 10 minutes!
Before OpenTelemetry Integration:
// Basic RDCP debug logs
rdcp.debug.database('User query executed', {
userId: 123,
query: 'SELECT * FROM users WHERE id = ?'
})
// Output: [DATABASE] User query executed { userId: 123, query: "SELECT..." }
After OpenTelemetry Integration:
// Same code, but now automatically enriched with trace context
rdcp.debug.database('User query executed', {
userId: 123,
query: 'SELECT * FROM users WHERE id = ?'
})
// Output: [DATABASE] User query executed {
// userId: 123,
// query: "SELECT...",
// trace: {
// traceId: "4bf92f3577b34da6a3ce929d0e0e4736",
// spanId: "00f067aa0ba902b7"
// }
// }
The Power: Now your debug logs and distributed traces are perfectly correlated. Click on a trace in Jaeger/DataDog and immediately find the corresponding debug logs!
npm install @rdcp.dev/server @rdcp.dev/otel-plugin @opentelemetry/api
// Add these 3 lines to your existing RDCP setup
const { setupRDCPWithOpenTelemetry } = require('@rdcp.dev/otel-plugin')
// One line enables trace correlation (uses active OpenTelemetry spans)
setupRDCPWithOpenTelemetry()
import { NodeSDK } from '@opentelemetry/sdk-node'
import { trace } from '@opentelemetry/api'
import { setupRDCPWithOpenTelemetry } from '@rdcp.dev/otel-plugin'
import { enableDebugCategories, debug } from '@rdcp.dev/server'
// Start a minimal OpenTelemetry SDK (dev verification)
const sdk = new NodeSDK()
await sdk.start()
// Enable RDCP β OTel correlation
setupRDCPWithOpenTelemetry()
// Turn on a debug category so logs emit
enableDebugCategories(['DATABASE'])
// Create an active span and emit a RDCP debug log
trace.getTracer('verify').startActiveSpan('sample-span', span => {
debug.database('Query executed', { sql: 'SELECT 1' })
span.end()
})
// Expected console output includes a trace suffix like:
// π [DB] [trace:90abcdef] Query executed [ { sql: 'SELECT 1' } ]
Troubleshooting
- Ensure a tracer provider is initialized (e.g., NodeSDK.start() or your own provider)
- Make sure a debug category is enabled (e.g., enableDebugCategories(['DATABASE']))
- Check console output for the [trace:xxxxxxxx] suffix; if missing, verify your OpenTelemetry span is active
- In production, confirm exporter setup (OTLP/HTTP, etc.) and that traces appear in your backend
Choose your observability backend:
- For a simple demo with Dependencies graph, use the in-memory Jaeger helper:
./packages/rdcp-demo-app/scripts/run-inmemory-demo.sh # Cleanup: ./packages/rdcp-demo-app/scripts/stop-inmemory-demo.sh
- Jaeger (Local Dev)
- DataDog (Production)
- New Relic (Enterprise)
- Honeycomb
That's it! You now have enterprise-grade observability with perfect correlation between traces and debug logs.
βββββββββββββββββββ ββββββββββββββββββββββββ
β @rdcp/server β β @rdcp.dev/otel-plugin β
β β β β
β β
Works standaloneβ β β
Optional enhancementβ
β β
Zero OTel deps β β β
Peer dependencies β
β β
Fast & lean β β β
Enterprise features β
βββββββββββββββββββ ββββββββββββββββββββββββ
Key Benefits:
- π¦ Optional Dependency: Teams without OpenTelemetry aren't forced to install it
- π Performance: Zero overhead when OpenTelemetry isn't configured
- π Gradual Adoption: Start with basic RDCP, add OpenTelemetry when ready
- π’ Enterprise Ready: Works with any OpenTelemetry-compatible backend
const express = require('express')
const { RDCPClient } = require('@rdcp.dev/server')
const { setupRDCPWithOpenTelemetry } = require('@rdcp.dev/otel-plugin')
const app = express()
const rdcp = new RDCPClient({ /* config */ })
// One line enables trace correlation
setupRDCPWithOpenTelemetry(rdcp)
app.get('/users/:id', async (req, res) => {
rdcp.debug.api('User request started', { userId: req.params.id })
const user = await getUserById(req.params.id)
rdcp.debug.database('User fetched', { userId: user.id, found: !!user })
res.json(user)
})
// app/api/users/route.js
import { RDCPClient } from '@rdcp/server'
import { setupRDCPWithOpenTelemetry } from '@rdcp.dev/otel-plugin'
const rdcp = new RDCPClient({ /* config */ })
setupRDCPWithOpenTelemetry(rdcp)
export async function GET(request) {
rdcp.debug.api('API route called', { route: '/api/users' })
const users = await fetchUsers()
rdcp.debug.database('Users retrieved', { count: users.length })
return Response.json(users)
}
Want more frameworks? See Framework Examples for Fastify, Koa, and more.
Before:
console.log('Processing user request', userId)
After (10 minutes):
rdcp.debug.api('Processing user request', { userId })
// Now: Structured, categorized, controllable, traceable
Before:
logger.info('Database query executed', { query, duration })
After (10 minutes):
rdcp.debug.database('Query executed', { query, duration })
// Now: RDCP control + trace correlation + existing structured logging
Before:
span.addEvent('Query executed', { query, duration })
After (5 minutes):
rdcp.debug.database('Query executed', { query, duration })
// Now: Debug logs automatically correlated with your existing traces
Need detailed migration steps? See Migration Guides.
// Before: Finding issues across services was a nightmare
// After: Click trace ID in any service, immediately see debug logs
// Service A
rdcp.debug.api('Request received', { orderId: 12345 })
// Service B
rdcp.debug.payment('Payment processed', { orderId: 12345, amount: 99.99 })
// Service C
rdcp.debug.inventory('Stock updated', { orderId: 12345, items: 3 })
// All logs share the same traceId - perfect correlation!
// Trace shows slow database calls
// Debug logs show exact queries and parameters
rdcp.debug.database('Slow query detected', {
query: 'SELECT * FROM orders WHERE created_at > ?',
duration: '2.3s',
rowCount: 50000
})
// traceId: "4bf92f3577b34da6a3ce929d0e0e4736"
// Alert fires in DataDog/New Relic
// Get trace ID from alert
// Search logs by trace ID
// Immediately see debug context from all services
- Quick Framework Setup - Copy-paste examples for your framework
- Backend Configuration - Connect to your observability platform
- Migration Guide - Step-by-step migration from current logging
- OpenTelemetry Roadmap - See what's coming next
Community Adoption β Enterprise Interest
Developers learn RDCP + OpenTelemetry on side projects β Bring it to work β Enterprise procurement follows developer preference.
Ready to get started? Pick your framework: Express | Next.js | Fastify | Koa
Getting Started: Installation β’ Basic Usage β’ Authentication
Migration: From Manual Implementation β’ Framework Examples β’ Publishing Guide
Protocol: RDCP v1.0 Specification β’ Implementation Guide β’ API Reference
π Home | π¦ NPM Package | π GitHub | π Issues
RDCP SDK v1.0.0 - Runtime Debug Control Protocol implementation for JavaScript/Node.js applications
- Implementation-Status
- JavaScript-vs-TypeScript-Boundaries
- Core-Package-Boundaries
- Publishing-Setup
- Contributing
- API-Reference
- Protocol Specification
- Implementation Guide
- RDCP-Primitive-Types
- Protocol-Schemas
- Protocol-Error-Codes
- API-Reference
Version: 1.0.0
Protocol: RDCP v1.0
License: Apache-2.0