Bài 3

Dashboard & Panel

Dashboard là nơi mọi thứ hội tụ: các panel được xếp lên lưới, chia sẻ chung time range và bộ biến, rồi cùng vẽ nên bức tranh về hệ thống. Bài này mổ xẻ cấu trúc dashboard, các kiểu panel và khi nào dùng, panel editor (Query / Transform / field config), template variables, annotations & links, và cuối cùng là JSON model để version dashboard trên Git.

Cấu trúc của một dashboard
Rows, panels, grid & settings

Một dashboard được ghép từ các thành phần sau, từ ngoài vào trong:

Thành phầnVai trò
RowHàng gom nhóm panel theo chủ đề (vd "CPU", "Network"). Có thể thu gọn (collapse) để giấu bớt và có thể lặp theo biến (repeat).
PanelĐơn vị hiển thị nhỏ nhất, gắn với query và một kiểu vẽ. Kéo thả để đổi vị trí & kích thước.
Grid layoutLưới 24 cột. Mỗi panel có toạ độ (x, y) và kích thước (w, h) tính theo ô lưới — nền tảng của bố cục responsive.
Time range pickerGóc trên phải: chọn khoảng thời gian (Last 15m, 6h, 7d... hoặc tuyệt đối). Áp cho toàn dashboard.
Refresh intervalChu kỳ tự làm mới (Off, 5s, 30s, 1m...). Cân nhắc tải lên data source khi đặt quá dày.
Dashboard settingsTrang cấu hình: tên, folder, tags, variables, annotations, links, quyền, và JSON model.

Trên thanh đầu dashboard, từ trái sang phải bạn thường thấy: tên dashboard, các dropdown biến, nút Save, Share, time range picker và nút refresh. Toàn bộ trạng thái này (kể cả giá trị biến đang chọn) có thể mã hoá vào URL để chia sẻ đúng bối cảnh đang xem.

Grid 24 cột: vì lưới rộng 24 cột, một panel w:12 chiếm nửa bề ngang, w:8 chiếm 1/3, w:6 chiếm 1/4. Nắm điều này giúp bạn canh bố cục gọn gàng thay vì kéo thả mò mẫm.
Các kiểu panel & khi nào dùng
Chọn đúng hình dạng cho dữ liệu
Kiểu panelDùng khi
Time seriesVẽ diễn biến theo thời gian — kiểu mặc định & dùng nhiều nhất (CPU, request/s, latency).
StatMột con số lớn kèm sparkline & màu theo ngưỡng — KPI hiện tại (uptime %, tổng user).
GaugeĐồng hồ hình cung thể hiện giá trị so với min/max — mức sử dụng (RAM %, disk %).
Bar gaugeThanh ngang/dọc, so sánh nhiều mục cạnh nhau theo ngưỡng — top N instance.
TableDữ liệu dạng bảng nhiều cột, sắp xếp & lọc được — danh sách chi tiết, kết quả SQL.
Bar chartSo sánh các hạng mục rời rạc (categorical) — số đơn theo sản phẩm, lỗi theo service.
Pie chartTỉ lệ phần trăm của một tổng — cơ cấu traffic theo status code (dùng vừa phải).
HeatmapPhân bố giá trị theo thời gian bằng mật độ màu — phân bố latency, histogram theo thời gian.
LogsHiển thị dòng log (Loki/Elasticsearch), highlight & lọc — điều tra sự cố.
State timelineDải trạng thái theo thời gian (up/down, ok/warn/crit) — theo dõi trạng thái rời rạc.
Nguyên tắc chọn: hỏi "dữ liệu này là diễn biến, một giá trị, hay so sánh nhóm?". Diễn biến → Time series; một giá trị → Stat/Gauge; so sánh nhóm → Bar chart/Table. Tránh lạm dụng Pie khi có nhiều hơn 5–6 lát cắt.
Panel editor
Query · Transform · Field config

Mở một panel và bấm Edit, bạn vào panel editor với các tab chính:

Tab Query: chọn data source và viết một hoặc nhiều query (refId A, B, C...). Đây là nơi định nghĩa dữ liệu đầu vào cho panel.

Tab Transform: xử lý dữ liệu sau khi query trả về, ngay trong Grafana mà không đụng tới nguồn. Các transform hay dùng:

TransformCông dụng
ReduceRút mỗi chuỗi time series về một giá trị (last, max, mean...) — biến đồ thị thành bảng tổng hợp.
Join by fieldGộp nhiều query lại theo một trường chung (thường là time) thành một bảng nhiều cột.
Organize fieldsẨn/hiện, đổi tên, sắp thứ tự các cột — dọn dẹp hiển thị.
Group byGom dòng theo một trường rồi tính tổng hợp trên các trường khác.

Field config & Overrides: ở cột phải, bạn cấu hình cách hiển thị. Các nhóm quan trọng:

Query vs Transform vs Field config: Query lấy dữ liệu, Transform biến đổi cấu trúc dữ liệu, Field config trang trí cách hiển thị. Nếu làm được ở tầng query (nguồn) thì ưu tiên tầng query cho nhẹ; transform chỉ nên dùng khi nguồn không làm được.
Template variables
Dashboard động, tái sử dụng

Variable biến một dashboard tĩnh thành công cụ động: thay vì tạo 10 dashboard cho 10 server, bạn tạo một dashboard với biến $instance và chọn server qua dropdown. Các loại biến:

Loại biếnNguồn giá trị
QueryLấy danh sách từ chính data source (vd tất cả instance có trong Prometheus). Tự cập nhật khi hạ tầng thay đổi.
CustomDanh sách tự nhập tay, phân tách bằng dấu phẩy (vd prod,staging,dev).
IntervalDanh sách khoảng thời gian (1m,5m,1h) cho người xem chọn độ phân giải gộp.
DatasourceCho phép chọn data source ở runtime — một dashboard chạy được trên nhiều cụm Prometheus khác nhau.
TextboxÔ nhập tự do — người xem gõ giá trị bất kỳ (vd một hostname cụ thể).

Ví dụ biến Query kiểu Prometheus — lấy danh sách tất cả instance:

label_values(node_cpu_seconds_total, instance)

Sau khi khai báo biến $instance, dùng nó thẳng trong query lẫn tiêu đề panel:

# dùng trong PromQL
rate(node_cpu_seconds_total{instance="$instance"}[5m])

Các tính năng nâng cao của biến:

Mẹo: đặt biến "hạ tầng" (datacenter, cluster, namespace) trước biến "chi tiết" (instance, pod) và nối chuỗi chúng — dropdown sẽ tự thu hẹp lựa chọn hợp lý và tránh liệt kê hàng nghìn mục vô nghĩa.
Annotations & Links
Ghi chú sự kiện, điều hướng

Annotations là những dấu mốc dọc trên đồ thị, đánh dấu sự kiện đã xảy ra tại một thời điểm — giúp tương quan "biểu đồ nhảy vọt vì cái gì". Ví dụ: một lần deploy, một sự cố, hay một alert được kích hoạt.

Links giúp điều hướng: Dashboard links (nút ở đầu dashboard trỏ sang dashboard/URL liên quan) và Panel/Data links (bấm vào một điểm dữ liệu để nhảy sang dashboard chi tiết, mang theo giá trị biến & time range — nền tảng của "drill-down").

Dashboard as JSON model
Export, import & version trên Git

Mỗi dashboard thực chất là một tài liệu JSON. Đây là "source of truth" — mọi panel, query, biến, layout đều nằm trong đó. Bạn xem/sửa nó ở Settings → JSON Model.

// trích lược một dashboard JSON
{
  "title": "API Overview",
  "uid": "api-overview",
  "schemaVersion": 39,
  "templating": { "list": [ { "name": "instance" } ] },
  "panels": [
    {
      "id": 1,
      "type": "timeseries",
      "title": "Request rate",
      "gridPos": { "x": 0, "y": 0, "w": 12, "h": 8 },
      "targets": [ { "refId": "A", "expr": "rate(http_requests_total[5m])" } ]
    }
  ]
}

Các điểm cần biết khi làm việc với JSON model:

Khái niệmÝ nghĩa
Export / ImportXuất dashboard ra file JSON để chia sẻ hoặc lưu trữ; import lại từ file hoặc từ ID trên grafana.com.
Save to file (Git)Lưu JSON vào repo để version control — theo dõi ai đổi gì, review qua merge request, rollback dễ dàng.
Panel IDsMỗi panel có id số duy nhất trong dashboard — dùng để share link tới đúng panel (view/edit) và để annotation/alert tham chiếu.
__inputsKhi export "để chia sẻ", Grafana thay data source cụ thể bằng biến __inputs; lúc import người dùng ánh xạ lại sang data source của họ — dashboard chạy được ở môi trường khác.
Provisioning (xem trước Bài 5): thay vì import tay, bạn có thể để Grafana tự nạp các file JSON dashboard và data source từ thư mục cấu hình lúc khởi động — quản lý toàn bộ "dashboard as code" bằng Git & CI. Chi tiết ở Bài 5.
← Quay lại
Bài 2: Data Source