Trả lời nhanh: Grafana là lớp hiển thị đứng trước các kho số liệu: nó không tự thu thập gì, mà nối vào nguồn như Prometheus rồi vẽ biểu đồ, bảng theo dõi và gửi cảnh báo. Đường đi nhanh nhất: cài bằng Docker, mở cổng 3000, thêm data source trỏ về Prometheus, rồi nhập sẵn dashboard số 1860 (Node Exporter Full), trong mười phút bạn có bảng theo dõi VPS đầy đủ mà không phải vẽ một ô nào.
Nhiều người dựng Prometheus xong thì dừng lại vì giao diện gốc của nó khô khan quá, và thế là số liệu nằm đó không ai nhìn. Grafana giải quyết đúng khoảng trống ấy: biến các chuỗi số thành bảng theo dõi mà bạn thật sự muốn mở mỗi sáng, và quan trọng hơn, thành cảnh báo chủ động tìm tới bạn. Bài này đi từ lệnh cài đầu tiên đến dashboard hoàn chỉnh, kèm những chỗ hay bị bỏ quên về bảo mật.
Cài Grafana và đăng nhập lần đầu
Thêm vào chính file Docker Compose đang chạy Prometheus để hai bên nhìn thấy nhau qua tên dịch vụ:
grafana: image: grafana/grafana-oss volumes: - grafana_data:/var/lib/grafana environment: - GF_SECURITY_ADMIN_PASSWORD=dat-mat-khau-manh-o-day - GF_USERS_ALLOW_SIGN_UP=false ports: ["127.0.0.1:3000:3000"] restart: unless-stoppedMở http://localhost:3000 (hoặc qua SSH tunnel nếu bạn đang ở máy khác), đăng nhập bằng tài khoản admin với mật khẩu vừa đặt. Nếu không đặt biến môi trường thì mật khẩu mặc định là admin: và đây là một trong những nguyên nhân phổ biến nhất khiến bảng theo dõi bị người lạ vào xem: người ta cài xong, bấm bỏ qua bước đổi mật khẩu, rồi mở cổng ra internet. Đừng nằm trong số đó.
Lưu ý dòng volumes: nếu không gắn ổ dữ liệu, mọi dashboard bạn dựng sẽ bay sạch khi container được tạo lại, sai lầm kinh điển khiến người ta phải làm lại từ đầu sau lần cập nhật đầu tiên.
Nối nguồn dữ liệu và nhập dashboard có sẵn
Vào Connections → Data sources → Add data source → Prometheus, điền URL. Nếu cả hai chạy chung Docker Compose thì địa chỉ là http://prometheus:9090 (tên dịch vụ, không phải localhost, nhầm chỗ này là lỗi hay gặp nhất khi mới dùng Docker). Bấm Save & test, thấy báo thành công là xong.
Giờ đến phần sướng nhất: Dashboards → New → Import, gõ số 1860 rồi chọn nguồn dữ liệu vừa tạo. Đây là dashboard "Node Exporter Full" do cộng đồng dựng và duy trì nhiều năm, có sẵn hàng chục biểu đồ được nhóm hợp lý: CPU theo từng nhân, RAM và swap, đọc ghi ổ đĩa, băng thông mạng, số tiến trình, thời gian hoạt động. Với hầu hết người dùng VPS, dashboard này là tất cả những gì cần, bạn không phải vẽ gì cả.
Vài mã đáng nhập thêm tùy nhu cầu: bảng theo dõi Docker container, bảng cho Nginx, bảng cho PostgreSQL hay MySQL, tìm theo tên trên kho dashboard công khai của Grafana, mỗi cái đều có mã số để nhập tương tự.
Tự dựng panel: chỉ cần biết ba thao tác
Khi muốn theo dõi thứ riêng của mình, quy trình chỉ gồm: Add visualization → chọn nguồn dữ liệu → dán câu truy vấn PromQL → chọn kiểu biểu đồ và đơn vị. Ví dụ một panel cảnh báo dung lượng, dán câu này và chọn kiểu Gauge, đơn vị Percent (0-100):
node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"} * 100Hai thứ nâng chất lượng dashboard lên hẳn mà ít người dùng tới: biến (Variables), khai báo biến instance lấy từ nhãn của số liệu, rồi dùng {instance="$instance"} trong mọi truy vấn; từ đó một dashboard phục vụ được tất cả VPS của bạn qua một ô chọn ở góc trên. Và ngưỡng màu (Thresholds), đặt vàng ở 20%, đỏ ở 10% để chỉ liếc mắt là biết tình trạng, không phải đọc số.
Nếu bạn cũng đang gom log theo bài Loki + Promtail, hãy thêm luôn một panel log ngay dưới biểu đồ chỉ số: thấy gai CPU thì kéo mắt xuống đọc log đúng khung giờ đó, thói quen chẩn đoán nhanh nhất mà không cần mở thêm công cụ nào.
Cảnh báo trong Grafana: khi nào dùng thay Alertmanager
Grafana có hệ cảnh báo riêng, đặt ngay trên panel: chọn tab Alert, đặt điều kiện, chọn kênh nhận (email, Telegram, Slack, webhook). So với Alertmanager của Prometheus thì Grafana dễ hơn nhiều vì cấu hình bằng giao diện, xem trước được, và quản lý tập trung mọi cảnh báo ở một chỗ kể cả khi bạn có nhiều nguồn dữ liệu khác nhau.
Chọn thế nào cho gọn: nếu bạn chỉ có Prometheus và thích viết file cấu hình lưu vào Git, dùng Alertmanager, luật nằm trong mã nguồn, dễ soát lại lịch sử thay đổi. Nếu bạn muốn thao tác nhanh bằng giao diện và có nhiều nguồn dữ liệu, dùng cảnh báo của Grafana. Đừng làm cả hai cho cùng một chỉ số: hai hệ cùng báo một sự cố là cách nhanh nhất khiến cả đội tắt thông báo.
Dù chọn đường nào, giữ nguyên tắc từ bài Prometheus: ít luật, ngưỡng đặt sớm, và mỗi cảnh báo phải kèm việc cần làm, cảnh báo mà người nhận không biết phải xử lý sao thì chỉ tạo lo lắng chứ không tạo hành động.
Bảo mật và vận hành: bốn việc không được bỏ
1. Đừng phơi cổng 3000 ra internet. Đặt Grafana sau Nginx hoặc Caddy có HTTPS và tên miền, hoặc chỉ cho truy cập qua mạng riêng như Tailscale. Bảng theo dõi lộ ra ngoài là bản đồ chi tiết hệ thống của bạn cho người khác đọc.
2. Tắt đăng ký tự do và ẩn danh bằng biến môi trường như ví dụ ở trên; tạo tài khoản riêng cho từng người thay vì dùng chung admin.
3. Sao lưu. Dashboard và cấu hình nằm trong ổ dữ liệu của Grafana, đưa nó vào lịch sao lưu chung theo bài backup VPS. Mẹo hay: xuất dashboard ra JSON và cất trong Git, vừa là bản sao vừa xem được lịch sử chỉnh sửa.
4. Đừng để dashboard phình vô tội vạ. Mỗi panel là một truy vấn chạy lại mỗi lần mở trang; một dashboard 60 panel với khoảng thời gian 30 ngày có thể làm Prometheus è cổ. Giữ dashboard chính gọn dưới 20 panel, phần chi tiết tách sang trang riêng chỉ mở khi cần điều tra.
Bốn việc bảo mật không được bỏ
| Việc | Vì sao bắt buộc |
|---|---|
| Đổi mật khẩu quản trị mặc định ngay | Mật khẩu mặc định ai cũng biết, và công cụ dò tự động tìm ra rất nhanh |
| Đặt sau lớp phân luồng có chứng chỉ bảo mật | Đăng nhập qua kết nối không mã hóa là lộ mật khẩu |
| Không mở cổng ra internet nếu chỉ dùng nội bộ | Bảng điều khiển giám sát lộ thông tin hạ tầng của bạn |
| Tắt đăng ký người dùng tự do | Không tắt thì ai cũng tạo được tài khoản |
Điểm cần hiểu: bảng điều khiển giám sát hiển thị tên máy, cấu hình, dịch vụ đang chạy và các chỉ số nội bộ. Với người muốn tấn công, đây là bản đồ hạ tầng của bạn.
Kiểm sau khi dựng
# 1. Dich vu da chay chuadocker compose pssystemctl status grafana-server 2>/dev/null # 2. Cong nao dang mo ra ngoaiss -ltnp | grep -v 127.0.0.1 # 3. Chung chi bao mat da cap chuacurl -sI https://giamsat.tenmien.vn | head -5 # 4. Nguon du lieu co ket noi duoc khong# Trong giao dien: Connections, Data sources, bam Save and test # 5. Dung luong: du lieu giam sat phinh dandf -h && docker system dfdu -sh /var/lib/grafana 2>/dev/null # 6. Sao luu: co so du lieu cau hinh va cac dashboard# Xuat dashboard ra file JSON va luu vao kho ma nguonViệc thứ sáu đáng làm ngay từ đầu: xuất các dashboard ra tệp và lưu trong kho mã nguồn. Khi máy hỏng, bạn dựng lại toàn bộ trong vài phút thay vì vẽ lại từ đầu.
Ba thao tác dùng nhiều nhất
- Nhập dashboard có sẵn theo mã số thay vì tự vẽ. Với các chỉ số máy chủ tiêu chuẩn, đã có sẵn dashboard tốt, chỉ cần nhập và chọn nguồn dữ liệu.
- Đổi khoảng thời gian và tự động làm mới, hai nút dùng nhiều nhất khi có sự cố.
- Thêm biến chọn máy chủ, để một dashboard dùng cho nhiều máy thay vì mỗi máy một bản.
Về cảnh báo
Nguyên tắc quan trọng nhất khi đặt cảnh báo: cảnh báo nào không dẫn tới hành động thì tắt đi. Hệ thống bắn ba mươi cảnh báo mỗi ngày là hệ thống mà mọi người đã học cách bỏ qua, và lúc có sự cố thật thì không ai để ý. Xem ngưỡng gợi ý ở bài về giám sát và cảnh báo.
Câu hỏi thường gặp
Grafana có dùng được mà không cần Prometheus không?
Được, Grafana nối được với nhiều nguồn: MySQL, PostgreSQL, Elasticsearch, Loki, InfluxDB, thậm chí file CSV. Nhưng với giám sát hạ tầng VPS thì cặp Prometheus và Node Exporter vẫn là lựa chọn phổ biến và có sẵn dashboard dựng sẵn nhiều nhất.
Dashboard 1860 hiện trống hoặc báo No data thì sao?
Hầu như luôn do ba nguyên nhân: chọn nhầm nguồn dữ liệu lúc nhập, Node Exporter chưa chạy hoặc Prometheus chưa lấy được số liệu, hoặc nhãn job trong cấu hình khác với nhãn dashboard mong đợi. Mở trang Targets của Prometheus kiểm tra trạng thái trước, phần lớn lỗi lộ ra ngay ở đó.
Grafana nặng không, VPS nhỏ chạy được không?
Rất nhẹ, vài trăm MB RAM là đủ cho nhu cầu cá nhân và đội nhỏ, tải chủ yếu dồn về nguồn dữ liệu phía sau. VPS 2 vCPU và 4GB RAM chạy thoải mái cả Prometheus lẫn Grafana cùng vài dịch vụ khác.
Có bản trả phí không, bản miễn phí thiếu gì?
Bản Grafana OSS miễn phí đủ cho hầu hết nhu cầu gồm dashboard, biến, cảnh báo và nhiều nguồn dữ liệu. Bản thương mại thêm các tính năng thiên về tổ chức lớn như báo cáo định kỳ, phân quyền chi tiết và hỗ trợ chính thức.
