Belajar Istio - Observability (Metrics, Logs & Tracing)
Episode 8 of 23

Belajar Istio - Observability (Metrics, Logs & Tracing)

Episode 8 membuka mata mesh: pipeline telemetry v2, metrik Prometheus seperti istio_requests_total, distributed tracing dengan Jaeger lengkap dengan header propagasi, log akses, serta dashboard Kiali dan Grafana.

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

Pendahuluan

Dari episode 5 sampai 7, kalian mengatur traffic dan ketahanan. Tapi bagaimana kalian tahu mesin ini bekerja dengan baik? Jawabannya: observability. Episode 8 ini membangun fondasi untuk melihat apa yang terjadi di dalam mesh — metrik, log, dan trace — serta dashboard yang mempermudah pembacaan.

Ini juga episode yang akan kalian rujuk terus di episode 20. Anggap episode ini fondasi telemetry, dan episode 20 nanti sebagai pengoptimalannya.

Telemetry Pipeline: Telemetry v2

Istio modern memakai Telemetry v2, model metrik yang memanfaatkan metrik standar Envoy dengan penggabungan scraping Prometheus. Sidecar mengekspos metrik di port 15020:

Metrik mentah dari sidecar
kubectl exec -it productpage-abc123 -c istio-proxy -- curl localhost:15020/stats/prometheus | head -20

curl localhost:15020/stats/prometheus menampilkan metrik Prometheus dalam format teks. Yang paling penting untuk traffic, bukan resource, adalah metrik dengan prefiks istio_:

  • istio_requests_total: jumlah request per pasangan layanan, termasuk label response_code dan response_flags.
  • istio_request_duration_milliseconds: histogram durasi request.
  • istio_request_bytes dan istio_response_bytes: ukuran payload.

Contoh query untuk memantau error rate productpage:

Query Prometheus error rate
sum(rate(istio_requests_total{reporter="destination",destination_service="productpage.default.svc.cluster.local",response_code=~"5.."}[5m]))
/
sum(rate(istio_requests_total{reporter="destination",destination_service="productpage.default.svc.cluster.local"}[5m]))

Persamaan di atas menghitung persentase request 5xx terhadap total request dalam lima menit. reporter="destination" menandakan metrik dicatat di sisi penerima, sehingga kalian melihat pengalaman backend, bukan perspektif klien.

Distributed Tracing

Header Propagasi dan Sampling

Trace menghubungkan perjalanan satu request melewati banyak service. Agar trace utuh, Envoy menyuntikkan header propagasi ke setiap request. Istio mendukung format standar seperti x-request-id, b3, dan traceparent. Kuncinya: konteks trace harus dioper dari satu service ke service berikutnya, jadi aplikasi harus meneruskan header tersebut ke downstream.

Sampling mengontrol berapa persen request yang di-trace. Atur lewat Telemetry API:

Telemetry sampling
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: mesh-default
  namespace: istio-system
spec:
  tracing:
  - providers:
    - name: otel
    randomSamplingPercentage: 10

randomSamplingPercentage: 10 membuat 10 persen request di-trace. Di produksi dengan volume tinggi, sampling 100 persen biasanya terlalu mahal — episode 20 akan membahas strategi sampling lanjutan.

Melihat Trace

Setelah Jaeger atau Tempo terpasang dan trace diterima, kalian bisa melihat waterfall: durasi setiap span, service mana yang lambat, dan di mana kegagalan terjadi. Istio menghasilkan span untuk setiap hop Envoy; aplikasi bisa menambah span kustom lewat OpenTelemetry SDK.

Log Akses

Log akses Envoy mencatat setiap request yang melewati sidecar. Aktifkan lewat Telemetry API:

Log akses format JSON
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: mesh-default
  namespace: istio-system
spec:
  accessLogging:
  - providers:
    - name: envoy

Dengan provider envoy, log berformat default muncul di container istio-proxy dan bisa dibaca:

Membaca log akses sidecar
kubectl logs productpage-abc123 -c istio-proxy | tail -5

kubectl logs ... -c istio-proxy menampilkan log akses tiap request. Untuk parsing otomatis di production, ubah formatnya ke JSON dan arahkan ke pipeline log — kita akan bahas agregasi log di episode 20.

Dashboard: Kiali dan Grafana

Kiali untuk Service Graph

Kiali adalah dashboard khusus Istio. Dia membangun peta layanan (service graph) dari metrik dan konfigurasi mesh:

Aktifkan dan buka Kiali
kubectl apply -f samples/addons/kiali.yaml
kubectl port-forward -n istio-system svc/kiali 20001:20001

kubectl port-forward ... svc/kiali 20001:20001 membuka Kiali di localhost:20001. Dari sini kalian melihat grafik trafik antar service, validasi konfigurasi, dan metrik request per edge — alat yang sangat membantu episode 9 dan 19.

Grafana untuk Dashboard

Grafana menampilkan dashboard metrik Prometheus yang sudah siap pakai:

Buka dashboard Grafana
kubectl port-forward -n istio-system svc/grafana 3000:3000

Dashboard Istio menyajikan Overview, Mesh, Workload, dan Service dalam satu tempat. Semua metrik yang kita bahas tadi divisualisasikan tanpa menulis query manual.

Info

Untuk produksi, jangan menyalin semua addon demo. Pilih dashboard yang benar-benar dipakai dan siapkan storage untuk Prometheus agar data tidak hilang saat Pod restart.

Penutup

Episode 8 menghidupkan mata mesh: Telemetry v2 dengan metrik Prometheus di port 15020, distributed tracing dengan header propagasi dan sampling, log akses Envoy, serta dashboard Kiali dan Grafana yang menyajikan semuanya dalam satu tempat.

Inti yang harus dibawa pulang:

  • Metrik kunci: istio_requests_total, istio_request_duration_milliseconds.
  • reporter="destination" menunjukkan perspektif backend.
  • Trace butuh propagasi header yang benar agar menyambung antar service.
  • Sampling mengontrol biaya tracing; 10 persen cukup untuk banyak kasus.
  • Log akses Envoy aktif via Telemetry API dan dibaca dari container istio-proxy.
  • Kiali untuk service graph; Grafana untuk dashboard metrik.
  • Verifikasi selalu dengan metrik nyata, bukan asumsi.

Di episode 9 selanjutnya kita akan menjaga konfigurasi tetap sehat: configuration management dan validationistioctl analyze, cara membaca hasil validasi, EnvoyFilter dan praktik terbaiknya, serta pola GitOps dengan ArgoCD atau Flux.