Kodeloka
  1. Kodeloka
  2. Kelas Grafana
  3. Materi

Modul 7 · Modul 7 dari 15

Field Config: Unit, Threshold, Value Mapping, dan Override

Mengubah angka mentah menjadi informasi yang langsung bisa dibaca, dan mengendalikan tampilan per series tanpa menyentuh kueri.

Field Config Berlaku untuk Semua Panel

Berbeda dari options yang khas per tipe panel, fieldConfig berlaku universal. Ia terdiri dari defaults (untuk semua field) dan overrides (pengecualian bertarget).

Unit — Perbaikan Termurah untuk Dashboard Apa Pun

Angka 0.0421 tidak berarti apa-apa. Dengan unit yang benar ia menjadi 4,21% atau 42,1 ms.

UnitKodeContoh input → tampilan
Detiks0.042 → 42 ms
Milidetikms1500 → 1.5 s
Byte (SI)bytes1500000 → 1.5 MB
Byte (IEC)bytes(IEC)1048576 → 1 MiB
Persen (0–100)percent42 → 42%
Persen (0.0–1.0)percentunit0.42 → 42%
Request/detikreqps1500 → 1.5 K req/s
RupiahcurrencyIDR1500000 → Rp1,5 jt
⛔ percent vs percentunit — kesalahan yang membuat angka salah 100×

Prometheus biasanya menghasilkan rasio 0.0–1.0. Bila Anda memilih percent, angka 0.042 ditampilkan sebagai 0,042% — padahal sebenarnya 4,2%.

Aturan: hasil pembagian tanpa * 100 → percentunit. Hasil yang sudah dikali 100 → percent. Jangan pernah melakukan keduanya.

Threshold: Warna sebagai Sinyal

thresholdjson
{
  "thresholds": {
    "mode": "absolute",
    "steps": [
      { "color": "green",  "value": null },
      { "color": "yellow", "value": 0.005 },
      { "color": "red",    "value": 0.01 }
    ]
  }
}

Langkah pertama harus bernilai null — itu adalah warna dasar. Mode percentage menghitung threshold relatif terhadap min–max, berguna saat batasnya berbeda per series.

⚠️ Threshold panel ≠ threshold alert

Sejak unified alerting, warna threshold di panel tidak lagi membuat alert. Keduanya terpisah sepenuhnya.

Bahayanya: panel bisa merah tanpa ada alert, atau alert berbunyi sementara panel tetap hijau, karena angka batasnya berbeda. Selalu samakan nilainya secara sadar, dan tulis nilai itu di description panel.

Value Mapping: Angka Menjadi Kata

mappingsjson
{
  "mappings": [
    { "type": "value", "options": {
        "0": { "text": "DOWN",     "color": "red",    "index": 0 },
        "1": { "text": "UP",       "color": "green",  "index": 1 },
        "2": { "text": "DEGRADED", "color": "orange", "index": 2 } } },
    { "type": "range", "options": {
        "from": 0, "to": 99.9,
        "result": { "text": "Di bawah SLO", "color": "red", "index": 3 } } },
    { "type": "regex", "options": {
        "pattern": "^prod-.*",
        "result": { "text": "Produksi", "color": "purple", "index": 4 } } },
    { "type": "special", "options": {
        "match": "null",
        "result": { "text": "Tidak ada data", "color": "text", "index": 5 } } }
  ]
}

Urutan penting: mapping dievaluasi berurutan, yang pertama cocok yang dipakai. special menangani null, NaN, dan string kosong.

Override: Aturan untuk Sebagian Field Saja

Inilah fitur yang membuat Anda tidak perlu membuat panel terpisah hanya karena satu series butuh perlakuan berbeda.

overridesjson
"overrides": [
  {
    "matcher": { "id": "byName", "options": "error rate" },
    "properties": [
      { "id": "unit", "value": "percentunit" },
      { "id": "custom.axisPlacement", "value": "right" },
      { "id": "color", "value": { "mode": "fixed", "fixedColor": "red" } },
      { "id": "custom.lineWidth", "value": 3 }
    ]
  },
  {
    "matcher": { "id": "byRegexp", "options": "/.*p99.*/" },
    "properties": [
      { "id": "custom.lineStyle", "value": { "fill": "dash", "dash": [10, 10] } }
    ]
  },
  {
    "matcher": { "id": "byFrameRefID", "options": "B" },
    "properties": [
      { "id": "custom.hideFrom", "value": { "legend": true, "tooltip": false, "viz": false } }
    ]
  }
]
MatcherMenargetkan
byNameSatu field dengan nama persis
byRegexpSemua field yang cocok pola
byTypeSemua field bertipe tertentu (number, time, string)
byFrameRefIDSeluruh hasil dari satu kueri (refId)
byValueField yang nilai reduksinya memenuhi kondisi

Skema Warna

  • Classic palette — warna berbeda per series. Default, cocok untuk grafik multi-series.
  • From thresholds — warna mengikuti nilai. Wajib untuk Stat dan Gauge.
  • Green-Yellow-Red (by value) — gradien kontinu, bagus untuk tabel.
  • Single color — bila panel hanya punya satu series.
  • Shades of a color — untuk series yang berkerabat, misalnya p50/p90/p99.
💡 Aksesibilitas warna

Sekitar 8% pria mengalami buta warna merah-hijau. Dashboard yang hanya mengandalkan merah versus hijau tidak terbaca oleh mereka.

  • Sertakan isyarat kedua: ikon, teks lewat value mapping, atau posisi.
  • Merah–biru lebih aman daripada merah–hijau.
  • Jangan pakai warna sebagai satu-satunya pembeda antar series di grafik padat — pakai juga lineStyle.

Data Links: Panel yang Bisa Diklik

data linkjson
"links": [
  {
    "title": "Lihat log layanan ini",
    "url": "/d/log-layanan/log?var-layanan=${__field.labels.layanan}&from=${__from}&to=${__to}",
    "targetBlank": false
  },
  {
    "title": "Buka runbook",
    "url": "https://wiki.internal/runbook/${__field.labels.job}",
    "targetBlank": true
  }
]

Variabel yang tersedia di data link: __value.raw, __value.numeric, __value.time, __field.name, __field.labels.<label>, __from, __to, __series.name, serta seluruh variabel dashboard.