Belajar System Engineer - Monitoring & Logging
Episode 10 of 28

Belajar System Engineer - Monitoring & Logging

Membangun observability dasar untuk server: mengumpulkan metrik dengan Prometheus dan Grafana, mengelola log dengan syslog dan ELK, serta menyusun alerting agar masalah terdeteksi sebelum pengguna mengeluh

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Sejauh ini kita membangun dan mengotomasi sistem. Tapi ada pertanyaan yang belum terjawab: bagaimana kalian tahu sistem masih sehat? Episode 10 ini menjawabnya dengan dua pilar observability: monitoring (metrik) dan logging. Tanpa keduanya, System Engineer bekerja buta — baru tahu server down saat pengguna komplain.

Mengapa episode ini penting? Karena insiden terbaik adalah yang tidak pernah terjadi. Monitoring yang baik mendeteksi disk yang menipis, CPU yang meninggi, atau error rate yang naik sebelum menjadi kerusakan. Logging yang baik membuat kalian bisa menelusuri apa yang terjadi setelah sebuah kegagalan. Dua-duanya adalah mata dan telinga kalian di seluruh server.

Metrik: Prometheus

Arsitektur Prometheus

Prometheus adalah sistem monitoring yang menarik (scrape) metrik dari target secara berkala. Arsitekturnya:

100%
  • Exporter: agent di sisi target yang mengekspos metrik di HTTP endpoint.
  • Prometheus: server yang scrape dan menyimpan time-series.
  • Alertmanager: memproses alert dari Prometheus dan mengirim notifikasi.
  • Grafana: visualisasi dashboard.

Praktik: Monitor CPU/Disk/Memori

Langkah paling dasar: pasang node_exporter di server yang dipantau.

Install node_exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
tar xzf node_exporter-1.8.2.linux-amd64.tar.gz
sudo mv node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/
node_exporter --version

Definisikan target di konfigurasi Prometheus:

/etc/prometheus/prometheus.yml
global:
  scrape_interval: 15s
 
scrape_configs:
  - job_name: node
    static_configs:
      - targets: ["localhost:9100", "10.0.1.11:9100", "10.0.1.12:9100"]

Bahasa Query: PromQL

PromQL adalah bahasa query Prometheus. Beberapa query yang paling sering dipakai:

Contoh PromQL
# CPU usage per host
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
 
# Pemakaian disk per filesystem
100 * (1 - node_filesystem_avail_bytes / node_filesystem_size_bytes)
 
# Memori yang dipakai (tanpa cache)
node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes

Alerting: Alertmanager

Metrik tanpa alert tidak berguna. Definisi alert di Prometheus menggunakan rules:

/etc/prometheus/alerts.yml
groups:
  - name: host
    rules:
      - alert: HostDown
        expr: up == 0
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "Host {{ $labels.instance }} tidak merespons"
 
      - alert: DiskAlmostFull
        expr: 100 * (1 - node_filesystem_avail_bytes / node_filesystem_size_bytes) > 90
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Disk {{ $labels.mountpoint }} di {{ $labels.instance }} hampir penuh"

Field for: 5m membuat alert hanya terpicu jika kondisi bertahan 5 menit — mencegah notifikasi karena lonjakan sesaat. Alertmanager kemudian meneruskannya ke email, Slack, atau webhook.

Important

Aturan alerting yang sehat: jarang tapi berarti. Jika tim menerima 20 alert per hari dan semuanya palsu, mereka berhenti membaca notifikasi (alert fatigue) — lalu insiden nyata terlewat. Mulailah dari beberapa alert penting (host down, disk penuh, service mati) dan perluas bertahap.

Logging: syslog & ELK

Dasar: journald dan syslog

Setiap service menghasilkan log. Di Linux modern, log berpusat di journald dan bisa diteruskan ke syslog tradisional:

Membaca log terpusat
journalctl --since "1 hour ago"
journalctl -u nginx -p err
logger "test pesan dari admin" -t check

Skala: ELK Stack

Untuk data center, log harus dikumpulkan terpusat agar bisa dicari. ELK (Elasticsearch, Logstash, Kibana) atau variannya (Loki, Grafana) adalah standar:

100%
  • Filebeat: shipping agent di setiap server.
  • Logstash: pipeline pemrosesan.
  • Elasticsearch: penyimpanan & pencarian.
  • Kibana: visualisasi.

Alternatif ringan: Loki + Grafana (mengandalkan label, bukan index penuh). Untuk System Engineer yang sudah pakai Prometheus, Loki adalah pilihan natural karena dashbordnya satu tempat di Grafana.

Log Rotation

Log yang tidak di-rotate akan memenuhi disk. logrotate menangani ini:

/etc/logrotate.d/app
/srv/app/logs/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
}

File di atas: rotate harian, simpan 14 hari, kompresi, tanpa mengganggu jika kosong.

Praktik: Monitoring Sistem

Skenario: pantau dua server dengan Prometheus + Grafana.

Setup monitoring lengkap
# 1. Install Prometheus (unduh binary, buat unit systemd)
sudo useradd -r -s /usr/sbin/nologin prometheus
# ... letakkan binary & konfigurasi, buat unit, lalu:
sudo systemctl enable --now prometheus
 
# 2. Pasang node_exporter di tiap target
sudo systemctl enable --now node_exporter
 
# 3. Cek scrape berjalan
curl http://localhost:9090/api/v1/targets | jq .data.activeTargets[].scrapeUrl
 
# 4. Hubungkan Grafana sebagai datasource + buat dashboard
#    http://localhost:3000 -> Add data source -> Prometheus

Grafana memiliki dashboard siap pakai (ID 1860 untuk node_exporter) — import sekali, semua host langsung terlihat.

Kesalahan Umum

  1. Memantau tapi tidak alerting — metrik ada, tapi tidak ada yang membacanya saat masalah.
  2. Alert tanpa for — notifikasi badai karena lonjakan sesaat.
  3. Log tidak di-rotate — disk penuh yang ironisnya sering menumbangkan server.
  4. Log lokal saja — saat server mati, log ikut hilang; kumpulkan terpusat.
  5. Dashboard terlalu penuh — banyak panel tanpa fokus; mulai dari metrik USE (Utilization, Saturation, Errors).

Penutup

Inti yang harus dibawa pulang:

  • Prometheus + node_exporter mengumpulkan metrik; PromQL untuk query; Alertmanager untuk notifikasi.
  • Grafana untuk dashboard; mulailah dari dashboard node_exporter yang sudah jadi.
  • journald + syslog untuk log dasar; ELK/Loki untuk skala besar; logrotate wajib.
  • Alerting yang baik: jarang, berarti, dan lewat for agar tidak berisik.

Di episode 11 selanjutnya kita memastikan data tetap aman: backup & restore — strategi, verifikasi, dan drill pemulihan. Sampai jumpa di episode 11!

Belajar System Engineer - Monitoring & Logging | Belajar System Engineer