Docker

Docker Container Logging: ELK Stack vs Loki untuk Production

Docker Container Logging: ELK Stack vs Loki untuk Production

Container logging terpusat menjadi kebutuhan saat jumlah container bertambah. Tanpa manajemen log, file log dapat menumpuk di /var/lib/docker/containers/ hingga puluhan GB dan menyebabkan spike CPU saat rotasi. Pilihan yang umum: ELK Stack (Elasticsearch, Logstash, Kibana) atau Loki + Grafana.

Kedua pendekatan telah diuji pada VPS 4GB, 2 core. Kesimpulannya: Loki lebih ringan untuk VPS dengan resource terbatas, sementara ELK lebih powerful jika memiliki server dedicated. Berikut ialah analisis berdasarkan pengukuran resource.

ELK Stack: Powerful namun Berat

# docker-compose.elk.yml
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.x
    environment:
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
      - "discovery.type=single-node"
    volumes:
      - elastic_data:/usr/share/elasticsearch/data

  logstash:
    image: docker.elastic.co/logstash/logstash:8.x
    volumes:
      - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
    depends_on:
      - elasticsearch

  kibana:
    image: docker.elastic.co/kibana/kibana:8.x
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch

Baru menjalankan 3 container ELK, VPS telah memakai 2.8GB RAM dari total 4GB. Elasticsearch sendiri memakan 1GB karena membutuhkan heap untuk indexing.

MetricELK StackLoki + Grafana
RAM usage (idle)~2.8GB~450MB
Disk usage (7 hari log)~8GB (indexed)~1.2GB (compressed)
Query speed (full text)~50ms~200ms
Setup time~1 jam (config mapping)~15 menit
MaintenanceIndex rotation, heap tuningHampir none

Loki: Logging Ringan untuk VPS

Loki berfilosofi berbeda: tidak meng-index konten log, hanya meng-index metadata (labels). Log disimpan terkompresi di object storage (S3 atau filesystem). Query lebih lambat dari ELK, namun resource usage jauh lebih rendah.

# docker-compose.loki.yml
services:
  loki:
    image: grafana/loki:3.x
    ports:
      - "3100:3100"
    command: -config.file=/etc/loki/local-config.yaml
    volumes:
      - ./loki-config.yaml:/etc/loki/local-config.yaml
      - loki_data:/loki

  promtail:
    image: grafana/promtail:3.x
    volumes:
      - /var/log:/var/log
      - /var/lib/docker/containers:/var/lib/docker/containers
      - ./promtail-config.yaml:/etc/promtail/config.yaml
    command: -config.file=/etc/promtail/config.yaml

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_AUTH_ANONYMOUS_ENABLED=true
    volumes:
      - grafana_data:/var/lib/grafana

Konfigurasi Promtail — ia yang menarik log dari container Docker:

# promtail-config.yaml
scrape_configs:
  - job_name: docker
    docker_sd_configs:
      - host: "unix:///var/run/docker.sock"
        refresh_interval: 5s
    relabel_configs:
      - source_labels: ["__meta_docker_container_name"]
        regex: "/(.*)"
        target_label: "container"
      - source_labels: ["__meta_docker_container_log_stream"]
        target_label: "stream"

Apa Artinya Perbedaan Ini?

Pilih ELK apabila: Memiliki server dedicated (>8GB RAM, dedicated disk), butuh full-text search cepat di log (forensic analysis), atau butuh visualisasi kompleks bawaan Kibana.

Pilih Loki apabila: VPS 2-4GB, container di bawah 20, atau hanya butuh centralized logging untuk debugging — bukan security analysis real-time.

Ada trade-off: query log yang membutuhkan full-text search (misal mencari error tertentu dalam 1 juta baris) butuh 3-5 detik di Loki, sementara di ELK hanya 50ms. Untuk debugging harian ini dapat diterima; untuk incident response ELK lebih cocok.

Hal penting: jangan lupa setup log rotation di Docker juga. Bahkan dengan centralized logging, tetap perlu max-size dan max-file di docker-compose agar log lokal tidak menumpuk sebelum Promtail sempat menarik:

services:
  app:
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

Mulai dari Loki untuk efisiensi resource; migrasi ke ELK dapat dilakukan kemudian jika kebutuhan analitik meningkat, karena log asli tetap ada di host filesystem.

💬 Komentar (0)

Belum ada komentar. Jadilah yang pertama! 💬

Komentar akan muncul setelah moderasi.