blog.dopana

Back

Observability là khả năng hiểu hệ thống từ output của nó — logs, metrics, traces. Không có observability, bạn đang bay mù.

Three Pillars of Observability#

LOGS:    "User 123 just paid $50"
METRICS: "Error rate: 0.1%, P95 latency: 250ms"
TRACES:  "Request abc took 500ms: auth(50ms) → api(200ms) → db(250ms)"
text

Structured Logging#

JSON Format — Machine Readable#

// ❌ Tệ
console.log(`User ${userId} logged in from ${ip}`);

// ✅ Tốt — structured JSON
logger.info({
  event: 'user.login',
  userId: 123,
  ip: '192.168.1.1',
  timestamp: new Date().toISOString(),
  duration: 150,
});
typescript

Pino — Fastest Logger for Node.js#

Log Levels#

logger.fatal('System crashed — cannot recover');  // 60
logger.error('Payment failed');                     // 50
logger.warn('Rate limit approaching');              // 40
logger.info('User registered');                     // 30
logger.debug('Query: SELECT * FROM users');         // 20
logger.trace('Entering function x');                // 10
typescript

Production nên set level info hoặc warn. debugtrace chỉ cho development.

Metrics — Đo Lường#

Prometheus + OpenMetrics#

RED Metrics (Microservices)#

Distributed Tracing#

Theo dõi một request xuyên qua nhiều service:

Auto-instrumentation (không cần sửa code)#

node --require @opentelemetry/auto-instrumentations-node/register app.js
bash

Tự động trace HTTP, gRPC, DB queries, Redis, etc.

ELK Stack — Centralized Logging#

App → Filebeat/Logstash → Elasticsearch → Kibana
plaintext

Docker Compose#

Grafana Stack#

App → Prometheus (metrics) → Grafana (dashboard)
App → Loki (logs) → Grafana
App → Tempo (traces) → Grafana
plaintext

Docker Compose#

Dashboard Mẫu (Grafana)#

Alerting#

Sức Khỏe Hệ Thống — Health Check#

Kết Luận#

Observability không phải “cài tool là xong”. Nó là văn hóa:

  • Logs — structured JSON, đủ context để debug
  • Metrics — RED (Rate, Errors, Duration) cho API
  • Traces — theo dõi request xuyên service
  • Dashboard — visualize để phát hiện bất thường
  • Alert — thông báo khi có vấn đề

Bắt đầu với: JSON logs → Prometheus metrics → Grafana dashboard. Thêm tracing và alert khi scale.

Tài liệu tham khảo#