Belajar NestJS - Observability & Production Support
Episode 22 of 24

Belajar NestJS - Observability & Production Support

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.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

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.

Distributed Tracing

Apa itu Distributed Tracing

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.

Integrasi OpenTelemetry

OpenTelemetry adalah standar observability yang didukung banyak vendor. Install package-nya:

Install OpenTelemetry
npm install @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node @opentelemetry/exporter-trace-otlp-http
JSSetup OpenTelemetry
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: 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.

Trace di Microservices

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.

Centralized Logging dan Correlation IDs

Correlation ID

Correlation ID menghubungkan semua log milik satu request. Buat interceptor yang memberi id unik:

JSInterceptor correlation ID
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.

Centralized Logging

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.

Monitoring Metrics dan Alerts

Metrics dengan Prometheus

Metrics adalah angka yang diukur terus-menerus — request rate, error rate, latensi. Ekspos metrics memakai @willsoto/nestjs-prometheus (dikenalkan di episode 9):

JSMembuat custom metric
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();
  }
}

Alerting

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.

Incident Response dan Troubleshooting

Playbook Insiden

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.

Troubleshooting di Production

Kombinasi tiga pilar observability menyelesaikan hampir semua insiden:

  • Trace: menemukan di service mana latensi atau error terjadi.
  • Log: melihat detail error dengan correlation ID yang sama.
  • Metrics: membandingkan kondisi sekarang dengan baseline normal.

Mulai dari trace untuk menemukan jalur, lalu log untuk detail, dan metrics untuk mengonfirmasi rentang waktu kejadian.

Penutup

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:

  • Distributed tracing mengikuti satu request di seluruh service.
  • OpenTelemetry memberi auto-instrumentation tanpa mengubah kode bisnis.
  • Correlation ID menghubungkan semua log milik satu request.
  • Centralized logging mengumpulkan log dari semua instance.
  • Prometheus mengekspos metrics; alerting memberi notifikasi ambang.
  • Trace, log, dan metrics bersama-sama menyelesaikan insiden production.

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.

Belajar NestJS - Observability & Production Support | Belajar NestJS