Why OpenTelemetry
OpenTelemetry (OTel) is the CNCF standard for observability. One SDK for traces, metrics, and logs — send to Jaeger, Prometheus, Grafana, Datadog, or any backend. No vendor lock-in.
Install SDK (Node.js)
npm install @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node @opentelemetry/exporter-trace-otlp-http
Auto-Instrumentation
import { NodeSDK } from '@opentelemetry/sdk-node';
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
const sdk = new NodeSDK({
traceExporter: new OTLPTraceExporter({
url: 'http://localhost:4318/v1/traces',
}),
instrumentations: [getNodeAutoInstrumentations()],
});
sdk.start();
Express, HTTP, database calls — all automatically traced.
Custom Spans
import { trace } from '@opentelemetry/api';
const tracer = trace.getTracer('my-service');
async function processOrder(orderId: string) {
return tracer.startActiveSpan('process-order', async (span) => {
span.setAttribute('order.id', orderId);
await validateOrder(orderId);
await chargePayment(orderId);
await sendConfirmation(orderId);
span.setStatus({ code: SpanStatusCode.OK });
span.end();
});
}
Metrics
import { metrics } from '@opentelemetry/api';
const meter = metrics.getMeter('my-service');
const requestCounter = meter.createCounter('http.requests');
const latencyHistogram = meter.createHistogram('http.latency');
app.use((req, res, next) => {
const start = Date.now();
res.on('finish', () => {
requestCounter.add(1, { method: req.method, status: res.statusCode });
latencyHistogram.record(Date.now() - start, { endpoint: req.path });
});
next();
});
OTel Collector
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
batch:
timeout: 5s
exporters:
prometheus:
endpoint: 0.0.0.0:8889
otlp/jaeger:
endpoint: jaeger:4317
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlp/jaeger]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [prometheus]
Key Features
- Unified — traces, metrics, logs in one SDK
- Vendor neutral — export to any backend
- Auto-instrumentation — HTTP, DB, gRPC, messaging
- Collector — receive, process, export telemetry
- CNCF Incubating — industry standard
Resources
Need to extract observability data, trace metrics, or monitoring configs? Check out my Apify tools or email spinov001@gmail.com for custom solutions.
Top comments (0)