Belajar Apache Spark - Observability & Monitoring
Episode 13 of 23

Belajar Apache Spark - Observability & Monitoring

Episode ini membahas observability Spark: mengumpulkan metrics dan logs, membaca Spark web UI dan History Server, mengintegrasikan Prometheus dan Grafana untuk dashboard, serta menyusun alerting untuk failed jobs dan data skew.

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

Pendahuluan

Job Spark bisa berjalan selama berjam-jam. Tanpa pengamatan yang baik, kegagalan baru terdeteksi saat sudah terlambat — data tidak sampai, kualitas menurun, atau cluster menganggur tanpa disadari. Episode 13 ini membahas observability: kemampuan melihat apa yang terjadi di dalam cluster secara real-time dan menyeluruh.

Observability lebih dari sekadar membaca log. Ini mencakup metrik yang terukur, dashboard yang bisa dibaca, dan alert yang datang sebelum masalah menjadi parah. Engineer yang menguasai observability bisa menjawab pertanyaan "kenapa job ini lambat?" dalam hitungan menit, bukan jam.

Episode ini membahas empat pilar: metrics, logs, dan Spark web UI; integrasi Prometheus dan Grafana; History Server dengan event logs; serta alerting untuk failed jobs dan skew.

Metrics, Logs, dan Spark Web UI

Spark Web UI sebagai Titik Awal

Spark UI di port 4040 adalah jendela pertama observability. Halaman-halamannya menampilkan kondisi real-time:

  • Jobs: daftar job beserta durasi dan status.
  • Stages: rincian stage, jumlah task, dan ukuran shuffle read/write.
  • Storage: data ter-cache dan memori yang terpakai.
  • Executors: penggunaan memori, disk, dan CPU per executor.
Akses Spark UI saat job berjalan
open http://localhost:4040

Dari halaman Executors, kalian bisa melihat jika satu executor memakai memori jauh di atas yang lain — indikasi awal data skew. Ini adalah triase pertama sebelum melihat metrik lain.

Logs Driver dan Executors

Log tersimpan di dua tempat: log driver muncul di terminal tempat spark-submit dijalankan (mode client), dan log executors tersebar di node worker. Di cluster mode, arahkan log ke lokasi terpusat agar mudah dicari:

Logging terpusat
spark.eventLog.enabled         true
spark.eventLog.dir             file:/var/log/spark/events
spark.history.fs.logDirectory  file:/var/log/spark/events

spark.eventLog.enabled menulis event logs ke direktori — inilah bahan bakar History Server dan juga sumber data untuk log aggregation.

Integrasi Prometheus dan Grafana

Ekspor Metrik ke Prometheus

Spark menyediakan endpoint metrik dalam format Prometheus melalui modul sparkPrometheus. Aktifkan di metrics.properties:

Aktifkan sink Prometheus
*.sink.prometheusServlet.class   org.apache.spark.metrics.sink.PrometheusServlet
*.sink.prometheusServlet.path    /metrics/prometheus
*.sink.prometheusServlet.period  10

Setelah diaktifkan, metrik tersedia di http://driver:4040/metrics/prometheus. Untuk aplikasi cluster mode yang driver-nya berpindah, gunakan spark.metrics.executorMetricsSource.enabled=true dan biarkan Prometheus melakukan service discovery di YARN atau Kubernetes.

Konfigurasi Prometheus dan Grafana

Prometheus diarahkan untuk scrape driver dan executor setiap beberapa detik:

Prometheus scrape config
scrape_configs:
  - job_name: spark
    static_configs:
      - targets: ["driver-host:4040", "worker-1:4040", "worker-2:4040"]
        labels:
          cluster: produksi

Dengan data Prometheus, buat dashboard Grafana yang menampilkan metrik kunci: shuffle read bytes, task completion time, memory used per executor, dan active jobs. Dashboard ini menjadi papan pantau harian tim data.

History Server, Event Logs, dan Performance Dashboards

Menjalankan History Server

Event logs yang sudah diaktifkan sebelumnya bisa dibaca ulang oleh History Server, sehingga UI aplikasi yang selesai tetap bisa diinspeksi:

Jalankan History Server
/opt/spark/sbin/start-history-server.sh --properties-file /opt/spark/conf/spark-defaults.conf

Setelah berjalan, akses http://localhost:18080 untuk melihat daftar aplikasi beserta UI lengkapnya. Ini sangat berguna saat mengevaluasi performa job setelah selesai atau menyelidiki kegagalan semalam.

Dashboard Jangka Panjang

Data event logs juga bisa diproses ulang untuk analisis historis: berapa durasi rata-rata per job, stage mana yang paling sering lambat, dan bagaimana resource terpakai minggu ini. Kombinasi Prometheus untuk real-time dan History Server untuk historis memberi gambaran lengkap.

Alerting untuk Failed Jobs dan Skew

Alert Berbasis Aturan

Tujuan observability adalah deteksi dini. Buat aturan alert di Prometheus dan kirim notifikasi lewat Alertmanager ke Slack, email, atau PagerDuty:

Aturan alert contoh
groups:
  - name: spark
    rules:
      - alert: SparkJobFailed
        expr: spark_app_status == 0
        for: 5m
        labels:
          severity: critical
      - alert: StageDurationHigh
        expr: spark_stage_duration > 1800
        labels:
          severity: warning

spark_app_status == 0 memicu alert saat aplikasi berhenti dengan status gagal. Aturan seperti ini memastikan tim tahu sebelum pengguna melaporkan.

Alert untuk Skew dan Data Quality

Skew jarang memicu kegagalan, tapi selalu mencuri waktu. Buat alert yang mengawasi ketidakseimbangan:

  • Rasio durasi task maksimum terhadap median di atas ambang tertentu.
  • shuffle read per task yang jauh tidak merata.
  • Data quality checks yang menghasilkan count(*) di bawah batas yang diharapkan.

Info

Terlalu banyak alert sama buruknya dengan tidak ada alert. Mulailah dengan lima aturan yang paling berdampak — job gagal, durasi stage melonjak, resource mendekati limit, skew terdeteksi, dan data quality turun — lalu perbaiki secara iteratif sesuai kebutuhan tim.

Penutup

Episode 13 membekali kalian kemampuan observability: Spark web UI dan logs untuk diagnosis cepat, Prometheus dan Grafana untuk metrik real-time, History Server dengan event logs untuk inspeksi historis, dan alerting untuk deteksi dini kegagalan dan skew.

Inti yang harus dibawa pulang:

  • Spark UI di port 4040 adalah titik awal semua diagnosis.
  • Event logs harus diaktifkan untuk History Server dan analisis historis.
  • Prometheus menampung metrik; Grafana menampilkannya sebagai dashboard.
  • Alert sebaiknya sedikit tapi berdampak: failed jobs, stage lambat, skew.
  • Observability adalah investasi: lebih murah mendeteksi lebih awal daripada menyelidiki setelah produksi terganggu.

Di episode 14 selanjutnya kita akan membahas resource management dan deployment — deployment di standalone, YARN, Mesos, dan Kubernetes, pola Spark on Kubernetes, mengelola executor, cores, dan memory, serta dynamic allocation dan workload isolation.

Belajar Apache Spark - Observability & Monitoring | Belajar Apache Spark