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.
Một dashboard được ghép từ các thành phần sau, từ ngoài vào trong:
| Thành phần | Vai trò |
|---|---|
| Row | Hà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 layout | Lướ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 picker | Gó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 interval | Chu 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 settings | Trang 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.
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.| Kiểu panel | Dùng khi |
|---|---|
| Time series | Vẽ diễn biến theo thời gian — kiểu mặc định & dùng nhiều nhất (CPU, request/s, latency). |
| Stat | Mộ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 gauge | Thanh ngang/dọc, so sánh nhiều mục cạnh nhau theo ngưỡng — top N instance. |
| Table | Dữ 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 chart | So 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 chart | Tỉ lệ phần trăm của một tổng — cơ cấu traffic theo status code (dùng vừa phải). |
| Heatmap | Phân bố giá trị theo thời gian bằng mật độ màu — phân bố latency, histogram theo thời gian. |
| Logs | Hiển thị dòng log (Loki/Elasticsearch), highlight & lọc — điều tra sự cố. |
| State timeline | Dả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. |
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:
| Transform | Công dụng |
|---|---|
| Reduce | Rú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 field | Gộ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 by | Gom 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:
1 → "Up", 0 → "Down", kèm màu).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ến | Nguồn giá trị |
|---|---|
| Query | Lấ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. |
| Custom | Danh sách tự nhập tay, phân tách bằng dấu phẩy (vd prod,staging,dev). |
| Interval | Danh sách khoảng thời gian (1m,5m,1h) cho người xem chọn độ phân giải gộp. |
| Datasource | Cho 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:
(a|b|c) — kết hợp với =~ trong PromQL: {instance=~"$instance"}.$var vào title panel, vd "CPU của $instance" — tiêu đề đổi theo lựa chọn.$namespace chọn trước, rồi $pod chỉ liệt kê pod trong namespace đó: label_values(kube_pod_info{namespace="$namespace"}, pod).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.
deploys trong SQL, hoặc sự kiện từ Loki) — mỗi hàng thành một mốc.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").
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 / Import | Xuấ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 IDs | Mỗ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. |
__inputs | Khi 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. |