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.
| Metric | ELK Stack | Loki + 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 |
| Maintenance | Index rotation, heap tuning | Hampir 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! 💬