Back to IF4054 Pengoperasian Sistem Perangkat Lunak

Container Best Practices - Security, Performance and Observability

Questions/Cues

  • Apa praktik terbaik keamanan container?
  • Bagaimana mengoptimalkan performa container?
  • Apa tujuan dan tantangan monitoring?
  • Bagaimana logging dan monitoring container sebaiknya dilakukan?

Reference Points

  • IF4054 DevOps (Slides 19-28)

Ringkasan Praktik Umum

Pecah aplikasi menjadi microservice, buat Dockerfile per layanan, optimalkan ukuran image, gunakan build automation tool, kelola siklus hidup container, terapkan praktik keamanan, monitor dan log container, dan pertimbangkan teknologi cloud-native.

Keamanan

PraktikAlasan
Minimal base imageMengurangi attack surface
Scan image berkalaMendeteksi vulnerability yang diketahui
Least privilegeJangan jalankan sebagai root; batasi akses sumber daya sensitif
Immutable infrastructureImage tidak diubah setelah deploy; ubahan = image baru
TLS antar-containerEnkripsi komunikasi
Update dan patch rutinMenutup celah keamanan
Network segmentationMembatasi dampak container yang terkompromi
Monitor dan log aktivitasDeteksi aktivitas mencurigakan secara real-time
Digital signatureVerifikasi keaslian dan integritas image
Amankan registryAccess control dan scan image di registry

Performa

  • Pilih base image yang tepat dan jaga container tetap ringan (multi-stage build memisahkan lingkungan build dari runtime).
  • Optimalkan alokasi sumber daya: resource requests dan limits CPU/memori (mis. di Kubernetes).
  • Gunakan storage efisien (lokal untuk data sementara, persisten untuk data kritis) dan caching (Redis/Memcached).
  • Monitor dan analisis dengan Prometheus, Grafana, atau Datadog; optimalkan jaringan; pakai orchestration (Kubernetes, Docker Swarm); terapkan health checks.

Tujuan dan Tantangan Monitoring

Tujuan utama monitoring performa:

  1. Mengidentifikasi kegagalan dan faultnya saat runtime dan pada postmortem.
  2. Mengidentifikasi masalah performa sistem individual maupun kumpulan sistem yang berinteraksi.
  3. Mengkarakterisasi workload untuk capacity planning dan penagihan.
  4. Mengukur reaksi pengguna terhadap antarmuka atau penawaran bisnis.
  5. Mendeteksi penyusup.

Tantangannya: monitoring di tengah perubahan kontinu, pendekatan bottom-up vs top-down di cloud, monitoring arsitektur microservice, dan volume besar log terdistribusi.

Logging dan Monitoring

flowchart TD
    C["Container<br/>stdout, structured JSON"] --> L["Log aggregator<br/>ELK atau Fluentd"]
    C --> M["Metrics<br/>Prometheus"]
    M --> G["Grafana<br/>dashboard"]
    M --> A["Alert<br/>threshold breach"]
    L --> G
  • Logging: centralize log (ELK, Fluentd), structured logging (JSON), level log yang tepat (INFO/WARN/ERROR), amankan log (akses, signing, enkripsi), pantau volume (rotation, retention), integrasikan dengan tools monitoring.
  • Monitoring: tools komprehensif, key metrics (CPU, memori, throughput jaringan, latensi), alert dan notifikasi, health checks (liveness dan readiness probe di Kubernetes), dan otomasi monitoring.

Summary

Praktik terbaik container mencakup keamanan (minimal image, scan, least privilege, immutable, TLS, segmentasi, signature, registry aman), performa (image ringan, multi-stage build, resource limits, caching, orchestration, health check), serta observability (centralized dan structured logging, metrik kunci, alert, liveness/readiness probe). Tujuan monitoring meliputi deteksi kegagalan, masalah performa, capacity planning, reaksi pengguna, dan penyusup, dengan tantangan perubahan kontinu, microservice, dan volume log terdistribusi.