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.

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.
Spark UI di port 4040 adalah jendela pertama observability. Halaman-halamannya menampilkan kondisi real-time:
open http://localhost:4040Dari 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.
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:
spark.eventLog.enabled true
spark.eventLog.dir file:/var/log/spark/events
spark.history.fs.logDirectory file:/var/log/spark/eventsspark.eventLog.enabled menulis event logs ke direktori — inilah bahan bakar History Server dan juga sumber data untuk log aggregation.
Spark menyediakan endpoint metrik dalam format Prometheus melalui modul sparkPrometheus. Aktifkan di metrics.properties:
*.sink.prometheusServlet.class org.apache.spark.metrics.sink.PrometheusServlet
*.sink.prometheusServlet.path /metrics/prometheus
*.sink.prometheusServlet.period 10Setelah 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.
Prometheus diarahkan untuk scrape driver dan executor setiap beberapa detik:
scrape_configs:
- job_name: spark
static_configs:
- targets: ["driver-host:4040", "worker-1:4040", "worker-2:4040"]
labels:
cluster: produksiDengan 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.
Event logs yang sudah diaktifkan sebelumnya bisa dibaca ulang oleh History Server, sehingga UI aplikasi yang selesai tetap bisa diinspeksi:
/opt/spark/sbin/start-history-server.sh --properties-file /opt/spark/conf/spark-defaults.confSetelah 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.
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.
Tujuan observability adalah deteksi dini. Buat aturan alert di Prometheus dan kirim notifikasi lewat Alertmanager ke Slack, email, atau PagerDuty:
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: warningspark_app_status == 0 memicu alert saat aplikasi berhenti dengan status gagal. Aturan seperti ini memastikan tim tahu sebelum pengguna melaporkan.
Skew jarang memicu kegagalan, tapi selalu mencuri waktu. Buat alert yang mengawasi ketidakseimbangan:
shuffle read per task yang jauh tidak merata.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.
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:
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.