Metrics & Monitoring — DevOps

Observability: Metrics, Logs, Traces Tiga pilar observability: Metrics — Angka terukur seiring waktu (CPU usage, request count, response time) Logs — Event deta

Observability: Metrics, Logs, Traces

Tiga pilar observability:

Jenis Metrics

Counter    — Angka yang hanya naik (total requests, errors)
Gauge      — Angka yang bisa naik-turun (CPU%, memory, active connections)
Histogram  — Distribusi nilai (response time percentiles)

Metrics Penting (Golden Signals)

Prometheus & Grafana

# Prometheus: collect & store metrics
# Grafana: visualize metrics di dashboard

# prometheus.yml
scrape_configs:
  - job_name: "my-app"
    static_configs:
      - targets: ["localhost:3000"]
    metrics_path: /metrics
    scrape_interval: 15s

Expose Metrics di Node.js

import { Counter, Histogram, register } from "prom-client";

const httpRequests = new Counter({
  name: "http_requests_total",
  help: "Total HTTP requests",
  labelNames: ["method", "path", "status"],
});

const responseTime = new Histogram({
  name: "http_response_time_seconds",
  help: "Response time in seconds",
  buckets: [0.01, 0.05, 0.1, 0.5, 1, 5],
});

// Middleware
app.use((req, res, next) => {
  const end = responseTime.startTimer();
  res.on("finish", () => {
    httpRequests.inc({ method: req.method, path: req.path, status: res.statusCode });
    end();
  });
  next();
});

app.get("/metrics", async (req, res) => {
  res.set("Content-Type", register.contentType);
  res.end(await register.metrics());
});

Yang akan kamu pelajari