Thiết kế Grafana Dashboard ‘chuẩn’ thực tế: Bí kíp làm chủ Panel, Variable và Annotation

Monitoring tutorial - IT technology blog
Monitoring tutorial - IT technology blog

Nỗi ám ảnh mang tên “Check server thủ công”

Hồi mới vào nghề, mình ám ảnh nhất là những ca trực đêm. Mỗi khi hệ thống báo chậm, mình phải mở cùng lúc 15-20 cửa sổ Terminal, SSH vào từng con server để gõ top, df -h, rồi free -m. Lúc đó, mình chẳng khác nào đang “mò kim đáy bể” giữa biển thông số nhảy loạn xạ mà không biết gốc rễ vấn đề nằm ở đâu.

Sau này khi triển khai Prometheus và Grafana, mình mới nhận ra bấy lâu nay bản thân đã tiêu tốn sức lực quá mức cần thiết. Thay vì gõ lệnh thủ công, giờ đây mình chỉ cần nhìn vào một màn hình tập trung là nắm trọn sức khỏe hệ thống. Tuy nhiên, cài được Grafana mới là bước đầu. Để có một Dashboard thực sự “xịn”, giúp phát hiện lỗi trong vài giây, bạn cần tư duy thiết kế và làm chủ được Variable hay Annotation.

3 trụ cột của một Dashboard hiệu quả

Đừng biến Dashboard thành một bãi chiến trường với hàng chục biểu đồ đường (Graph) chồng chéo. Sau 5 năm làm vận hành, mình đúc kết được 3 “vũ khí” cốt lõi giúp Dashboard trở nên hữu dụng:

  • Variables (Biến số): Giúp Dashboard linh hoạt. Bạn không cần tạo 50 Dashboard cho 50 server; chỉ cần một cái duy nhất và dùng biến để chuyển đổi.
  • Panels (Các khung hiển thị): Chọn đúng loại Panel (Gauge, Stat, Time Series) giúp bạn đọc dữ liệu nhanh gấp 3 lần.
  • Annotations (Ghi chú sự kiện): Đây là ranh giới giữa Dashboard nghiệp dư và chuyên nghiệp. Nó đánh dấu các sự kiện như: Deploy code mới, Restart service, hoặc bảo trì ngay trên biểu đồ.

1. Thiết kế Variables: Đừng bao giờ fix cứng thông số

Mình từng mắc sai lầm ngớ ngẩn: tạo biểu đồ cho server A, sau đó copy sang server B rồi sửa IP thủ công trong câu query. Khi hệ thống mở rộng lên 30-40 node, mình hoàn toàn bế tắc.

Giải pháp nằm ở Dashboard Settings -> Variables. Hãy dùng loại Query để lấy danh sách server tự động từ Prometheus:

label_values(node_cpu_seconds_total, instance)

Sau đó, hãy thay IP cứng bằng biến $node trong các câu query. Ví dụ để theo dõi % CPU:

100 - (avg by (instance) (irate(node_cpu_seconds_total{instance="$node",mode="idle"}[5m])) * 100)

Lúc này, một menu thả xuống sẽ xuất hiện trên đỉnh Dashboard. Bạn chọn server nào, toàn bộ dữ liệu bên dưới sẽ tự động cập nhật theo. Nhanh gọn và không sợ nhầm lẫn.

2. Chọn Panel phù hợp: Ưu tiên khả năng quan sát

Nguyên tắc vàng: Thông số sống còn phải đặt trên cùng, to và rõ nhất.

Stat Panel (Số liệu tổng quát)

Dùng cho trạng thái Up/Down hoặc tổng số Request. Đừng dùng biểu đồ đường nếu bạn chỉ cần biết server còn sống hay không. Một con số to đùng với màu Xanh (Online) hoặc Đỏ (Offline) là đủ để bạn biết tình hình chỉ trong 1 giây.

Gauge (Đồng hồ đo)

Cực kỳ phù hợp cho CPU, RAM hoặc Disk. Khi kim đồng hồ chỉ vào vùng đỏ (ngưỡng 90%), nó tạo áp lực thị giác cực mạnh. Bạn sẽ biết ngay server đang “quá tải” mà không cần đọc số liệu chi tiết.

Time Series (Biểu đồ thời gian)

Chỉ dùng khi cần xem xu hướng (trend). Ví dụ: Traffic tăng vọt lúc 20h tối hay RAM bị rò rỉ (leak) khoảng 200MB mỗi giờ. Mẹo nhỏ: Hãy bật Connect null values để biểu đồ không bị đứt đoạn khi dữ liệu thi thoảng bị mất kết nối.

3. Annotation: Câu trả lời cho câu hỏi “Tại sao nó chết?”

Tưởng tượng 2h sáng CPU vọt lên 95%, bạn sẽ tự hỏi: “Ai đã làm gì?”. Annotation chính là lời giải.

Mỗi khi chạy script deploy, mình luôn lồng thêm một lệnh cURL để bắn thông báo lên Grafana. Nó sẽ tạo ra một đường kẻ dọc trên biểu đồ. Nhìn vào đó, mình thấy ngay: “À, CPU bắt đầu tăng ngay sau khi deploy bản v1.2”.

Dưới đây là lệnh mẫu để tích hợp vào CI/CD (như Jenkins hoặc GitLab Runner):

curl -X POST -H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "dashboardUID":"your_id",
  "time":1649850000000,
  "text":"Deploy version 1.2 by ITFromZero",
  "tags":["deploy","production"]
}' http://your-grafana-url/api/annotations

Ngoài deploy, mình còn dùng Annotation để đánh dấu lúc Restart Database hoặc khi có đợt tấn công DDoS. Nó giống như một cuốn nhật ký vận hành trực quan ngay trên Dashboard.

Cấu trúc Dashboard: Nhìn 3 giây biết ngay vấn đề

Đừng trình bày lộn xộn. Hãy chia Dashboard thành các Rows (Hàng) theo thứ tự ưu tiên:

  1. Row 1 – Overview: Trạng thái sống chết, Uptime, CPU/RAM trung bình của toàn bộ Cluster.
  2. Row 2 – System Detail: Chi tiết từng con server, Disk I/O, Network traffic.
  3. Row 3 – App Metrics: Lỗi API (Error rate > 5%), độ trễ (Latency), số lượng đơn hàng.

Để tiết kiệm công sức, bạn nên dùng Library Panels. Nếu đã cấu hình một biểu đồ CPU cực đẹp, hãy lưu nó vào thư viện để tái sử dụng cho các Dashboard khác chỉ bằng cách kéo thả.

Lời kết

Làm Dashboard giống như thiết kế bảng điều khiển máy bay: càng tinh gọn, càng ít rủi ro. Đừng cố gắng nhồi nhét mọi thứ ngay lập tức. Hãy bắt đầu với những thông số cơ bản nhất, sau đó thêm dần Variable và Annotation dựa trên các sự cố thực tế bạn gặp phải. Dashboard không chỉ là những ô vuông màu sắc, nó là con mắt giúp bạn điều khiển hệ thống một cách tự tin hơn.

Share: