Episode ini membahas observability tingkat production: distributed tracing dengan OpenTelemetry, centralized logging dan correlation IDs, monitoring metrics dan alerts, serta praktik incident response dan troubleshooting di production.

Di production, aplikasi berjalan tanpa pengawasan langsung developer. Observability adalah kemampuan memahami apa yang terjadi di dalam sistem — lewat trace, log, dan metrics. Episode 22 membahas observability tingkat production untuk NestJS.
Kalian akan belajar melacak request di seluruh service, memusatkan log, memonitor metrik, dan menangani insiden.
Ketika request melintasi banyak service, sulit melacak di mana waktu terbuang. Distributed tracing memberi id unik per request yang diikuti melewati semua service, sehingga jalur lengkap request terlihat di satu dashboard.
OpenTelemetry adalah standar observability yang didukung banyak vendor. Install package-nya:
npm install @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node @opentelemetry/exporter-trace-otlp-httpimport { 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: process.env.OTEL_EXPORTER_OTLP_ENDPOINT,
}),
instrumentations: [getNodeAutoInstrumentations()],
});
sdk.start();Auto-instrumentation menangkap trace untuk HTTP, database, dan library secara otomatis — tanpa mengubah kode bisnis. Cukup jalankan aplikasi dengan npm run start:dev dan semua request terekam.
Pada arsitektur microservices (episode 14), trace menghubungkan semua service. OpenTelemetry menyebarkan konteks trace lewat header seperti traceparent, sehingga satu request bisa dilacak dari gateway sampai service terdalam.
Correlation ID menghubungkan semua log milik satu request. Buat interceptor yang memberi id unik:
import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from "@nestjs/common";
import { Observable } from "rxjs";
import { randomUUID } from "crypto";
@Injectable()
export class CorrelationIdInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<unknown> {
const request = context.switchToHttp().getRequest();
const correlationId = request.headers["x-correlation-id"] ?? randomUUID();
request.headers["x-correlation-id"] = correlationId;
return next.handle();
}
}Setiap request mendapat x-correlation-id yang ikut di seluruh log — memudahkan menelusuri satu request dari awal sampai akhir.
Di environment terdistribusi, log tersebar di banyak instance. Centralized logging mengumpulkannya ke satu tempat — misalnya ELK, Loki, atau CloudWatch. Dengan output JSON dari Pino (episode 9) dan correlation ID, log bisa dicari berdasarkan request, service, atau tingkat error.
Metrics adalah angka yang diukur terus-menerus — request rate, error rate, latensi. Ekspos metrics memakai @willsoto/nestjs-prometheus (dikenalkan di episode 9):
import { Injectable } from "@nestjs/common";
import { InjectMetric, makeCounterProvider } from "@willsoto/nestjs-prometheus";
@Injectable()
export class MetricsService {
constructor(
@InjectMetric("http_requests_total")
private readonly httpRequests: Counter,
) {}
countRequest(): void {
this.httpRequests.inc();
}
}Metrics tidak berguna tanpa alert. Prometheus Alertmanager atau tool cloud seperti CloudWatch Alarm memicu notifikasi saat metrik melewati ambang — misalnya error rate di atas 1 persen atau latensi P95 melonjak. Alert harus actionable: berisi konteks dan tautan ke dashboard.
Saat alert berbunyi, ikuti playbook: identifikasi dampak, isolasi penyebab, terapkan mitigasi (bisa berupa rollback dari episode 21), lalu postmortem. Tujuan bukan mencari siapa yang salah, melainkan mencegah terulang.
Kombinasi tiga pilar observability menyelesaikan hampir semua insiden:
Mulai dari trace untuk menemukan jalur, lalu log untuk detail, dan metrics untuk mengonfirmasi rentang waktu kejadian.
Episode 22 menyempurnakan observability aplikasi kalian: distributed tracing dengan OpenTelemetry, centralized logging dengan correlation ID, monitoring metrics dan alerts, serta incident response dan troubleshooting.
Inti yang harus dibawa pulang:
Di episode 23 terakhir kita akan membahas stable modern features dan future trends — fitur terbaru NestJS yang stabil, ekosistem Fastify GraphQL microservices dan WebSockets, tren pengembangan backend Node.js dan TypeScript, serta strategi menjaga skill tetap relevan di masa depan.