Monitoring dan Logging di Kubernetes

1. Mengapa Monitoring dan Logging Penting?

  • Memastikan Kesehatan Cluster dan Aplikasi: Monitoring membantu mendeteksi masalah sebelum berdampak signifikan pada aplikasi atau pengguna.
  • Debugging dan Pemecahan Masalah: Logging menyediakan rincian data operasional yang penting saat terjadi kesalahan atau kegagalan aplikasi.
  • Pengoptimalan Kinerja: Analisis data monitoring membantu mengidentifikasi bottleneck, memungkinkan optimasi aplikasi dan resource.
  • Compliance dan Auditing: Log mencatat aktivitas sistem untuk memenuhi persyaratan audit dan keamanan.

2. Monitoring di Kubernetes

Monitoring berfokus pada pengumpulan data metrik dari aplikasi dan infrastruktur Kubernetes. Tools utama:

  • Prometheus: Open-source monitoring system berbasis time-series.
  • Grafana: Visualization tool untuk membuat dashboard berdasarkan data dari Prometheus.

Langkah-Langkah Setup Monitoring dengan Prometheus dan Grafana

  1. Deploy Prometheus

Gunakan Helm untuk instalasi cepat:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/prometheus

Verifikasi instalasi:

kubectl get pods -l app=prometheus

Akses dashboard Prometheus:

kubectl port-forward svc/prometheus-server 9090:80
  1. Deploy Grafana

Instalasi menggunakan Helm:

helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm install grafana grafana/grafana

Akses Grafana dashboard:

kubectl port-forward svc/grafana 3000:80
  • Default credentials:
    • Username: admin
    • Password: prom-operator
  • Tambahkan Prometheus sebagai data source.
  1. Kustomisasi Dashboard
    • Gunakan template dashboard yang tersedia di Grafana untuk Kubernetes cluster.

Metrik Utama yang Dipantau

  • Node Level:
    • CPU dan memori penggunaan per Node.
    • Disk I/O dan Network I/O.
  • Pod Level:
    • Status Pod (running, pending, failed).
    • CPU dan memori penggunaan per Pod.
  • Cluster Level:
    • Jumlah resource yang tersedia dan digunakan.
    • Load balance di antara Node.

3. Logging di Kubernetes

Logging mengumpulkan dan menyimpan log dari aplikasi atau cluster. Tools utama:

  • Fluentd: Log collector yang fleksibel untuk mengumpulkan log dari aplikasi dan cluster.
  • Elasticsearch: Mesin pencarian untuk menyimpan log secara terstruktur.
  • Kibana: Visualization tool untuk menganalisis log.

Langkah-Langkah Setup Logging dengan Fluentd dan ELK Stack

  1. Deploy Elasticsearch

Instal Elasticsearch menggunakan Helm:

helm repo add elastic https://helm.elastic.co
helm repo update
helm install elasticsearch elastic/elasticsearch

Verifikasi instalasi:

kubectl get pods -l app=elasticsearch
  1. Deploy Fluentd

Instal Fluentd untuk mengumpulkan log dari aplikasi:

helm repo add fluent https://fluent.github.io/helm-charts
helm repo update
helm install fluentd fluent/fluentd
  1. Deploy Kibana

Instal Kibana menggunakan Helm:

helm install kibana elastic/kibana

Akses Kibana dashboard:

kubectl port-forward svc/kibana 5601:80
  • Sambungkan Kibana ke Elasticsearch sebagai data source.

Jenis Log yang Dipantau

  • Application Logs: Log yang dihasilkan oleh container aplikasi.
  • System Logs: Log dari Node dan komponen Kubernetes seperti kube-apiserver dan kube-scheduler.
  • Network Logs: Informasi tentang lalu lintas jaringan di dalam cluster.

4. Integrasi Monitoring dan Logging

  • Alerting:
    • Gunakan Prometheus Alertmanager untuk notifikasi (email, Slack, PagerDuty).
    • Buat aturan untuk mendeteksi error tertentu dari log Elasticsearch.
  • Tracing:
    • Gunakan tools seperti Jaeger atau OpenTelemetry untuk tracing distributed system.

5. Praktik Terbaik

  • Pastikan semua Pod dan Node mengirimkan log ke Fluentd.
  • Selalu backup log dan konfigurasi dashboard monitoring.
  • Optimalkan penyimpanan log untuk menghindari pemborosan disk.
  • Buat alert hanya untuk kejadian kritis untuk menghindari alert fatigue.