Kapan Transformation adalah Jawabannya
Transformation adalah rantai operasi pada data frame yang berjalan di browser, sesudah data diterima dan sebelum digambar. Ia menyelesaikan hal-hal yang tidak bisa dilakukan bahasa kueri.
- Bisakah dilakukan di kueri? Kerjakan di sana โ lebih hemat dan bisa dipakai alerting.
- Perlu menggabungkan dua data source? Transformation (atau Expression).
- Hanya soal tampilan kolom? Transformation.
- Butuh dipakai untuk alert? Harus Expression, bukan transformation โ alerting tidak menjalankan transformation.
Transformation yang Paling Sering Dipakai
| Nama | Fungsi | Kasus khas |
|---|---|---|
| Organize fields | Sembunyikan, urutkan, ganti nama kolom | Merapikan tabel |
| Join by field | Gabung frame pada kolom kunci | Metrik + metadata dari SQL |
| Add field from calculation | Kolom baru hasil hitungan | Rasio, selisih, kumulatif |
| Reduce | Deret menjadi satu baris ringkasan | Tabel "rata-rata & maks per layanan" |
| Group by | Kelompokkan lalu agregasi | Total per region |
| Filter data by values | Buang baris berdasarkan nilai | Sembunyikan yang nol |
| Sort by | Urutkan baris | Terbesar di atas |
| Labels to fields | Label menjadi kolom | Menyiapkan tabel dari Prometheus |
| Rows to fields | Baris menjadi kolom | Membentuk tabel ringkasan |
| Config from query | Hasil kueri menjadi setelan panel | Threshold dinamis dari basis data |
| Partition by values | Pecah satu frame per nilai | Series terpisah dari kolom kategori |
Contoh Nyata 1 โ Menyatukan Metrik dan Metadata Bisnis
Prometheus tahu merchant_id, tetapi tidak tahu nama merchant. Nama itu ada di PostgreSQL. Transformation menyatukannya.
Kueri A (Prometheus):
sum by (merchant_id) (rate(transaksi_total[$__rate_interval]))
โ | merchant_id | Value |
Kueri B (PostgreSQL):
SELECT id AS merchant_id, nama, tier FROM merchant
โ | merchant_id | nama | tier |
Transformations:
1. Join by field โ field: merchant_id, mode: outer
2. Organize fields โ sembunyikan merchant_id, urutkan: nama, tier, Value
3. Sort by โ Value, desc
Hasil:
| nama | tier | Value |
| Toko Sinar | gold | 42.1 |
| Warung Bu Ani | basic | 18.7 |Contoh Nyata 2 โ Rasio dari Dua Kueri
Kueri A: sum(rate(cache_hits_total[$__rate_interval]))
Kueri B: sum(rate(cache_requests_total[$__rate_interval]))
Transformation: Add field from calculation
Mode : Binary operation
Operation : A / B
Alias : hit ratio
Lalu override pada "hit ratio": unit = percentunitUntuk kebutuhan yang sama tetapi hasilnya akan dipakai alerting, gunakan Expression Math โ alert rule tidak menjalankan transformation.
Contoh Nyata 3 โ Tabel Ringkasan SLO
Kueri: histogram_quantile(0.95, sum by (layanan, le) (
rate(http_request_duration_seconds_bucket[$__rate_interval])))
Transformations:
1. Reduce
Mode : Series to rows
Calculations: Mean, Max, Last
2. Organize fields
Rename: Field โ Layanan, Mean โ Rata-rata, Max โ Puncak
3. Sort by: Puncak, desc
Hasil:
| Layanan | Rata-rata | Puncak | Last |
| ledger | 0.412 s | 2.81 s | 0.39s |
| api | 0.180 s | 0.94 s | 0.17s |Rantai transformation dieksekusi berurutan dari atas ke bawah; keluaran satu langkah menjadi masukan langkah berikutnya.
Filter โ Reduce : membuang baris dulu, ringkasan dihitung dari sisa
Reduce โ Filter : meringkas semua dulu, baru menyaring hasilnya
Angka rata-ratanya berbeda. Keduanya valid โ pastikan Anda memilih
yang sesuai dengan pertanyaan yang ingin dijawab.Join by Field: Bagian yang Paling Sering Gagal
| Mode | Perilaku | Pakai ketika |
|---|---|---|
outer | Semua baris dari semua frame | Ingin melihat yang tidak berpasangan |
inner | Hanya yang cocok di semua frame | Tabel bersih tanpa lubang |
outer (tabular) | Outer untuk data non-time-series | Menggabungkan hasil SQL |
Penyebab kegagalan paling umum: tipe kolom kunci berbeda. merchant_id berupa string di Prometheus (semua label Prometheus adalah string) tetapi integer di SQL. Perbaikannya: konversi di sisi SQL dengan id::text AS merchant_id, atau pakai transformation Convert field type lebih dulu.
Menarik 200.000 baris lalu memfilternya menjadi 50 dengan transformation tetap berarti 200.000 baris melintasi jaringan dan diproses browser. Waktu muat tidak membaik sedikit pun.
Filter di kueri, rapikan dengan transformation. Bukan sebaliknya.
Debugging Transformation
Buka Panel Inspect โ Data, lalu gunakan pilihan "Apply panel transformations" untuk melihat frame sebelum dan sesudah. Sembilan dari sepuluh masalah transformation adalah bentuk frame yang berbeda dari yang dibayangkan โ misalnya Anda mengira mendapat satu frame berisi tiga kolom, padahal yang datang adalah tiga frame terpisah.