DevOps On-Premise Kiến trúc hệ thống

Giám sát server bằng Beszel: vì sao VAON chuyển khỏi Grafana

Thứ sáu, 18 Th09 2026 12 phút đọc 37 lượt xem

Giám sát server bằng Beszel: vì sao VAON chuyển khỏi Grafana

Tóm tắt: Beszel là công cụ giám sát server mã nguồn mở, gồm hub và agent. VAON chuyển giám sát server nội bộ từ Grafana sang Beszel vì dashboard Grafana nhiều chỉ số nhưng rối, ít người mở hằng ngày. Beszel gom mọi server vào một màn hình, có sẵn chỉ số Docker, cảnh báo và S.M.A.R.T., nhưng không xem được log.

Màn hình tổng quan Beszel: mỗi server một dòng với CPU, RAM, ổ đĩa, load average, mạng; phía trên có cảnh báo dung lượng ổ đĩa

Grafana đã gây khó khăn gì cho đội vận hành của VAON?

Grafana không có lỗi. Vấn đề nằm ở cách đội VAON dùng nó trong một sản phẩm trước đây. Grafana thu được rất nhiều chỉ số và cho phép dựng dashboard gần như không giới hạn, nên số màn hình tăng dần theo từng dự án.

Sau một thời gian, đội gặp ba vấn đề:

  • Mỗi dự án một dashboard riêng, cùng một chỉ số nhưng tên gọi và đơn vị hơi khác nhau.
  • Phần thu thập dữ liệu mỗi người cấu hình một kiểu, thêm một server là phải nhớ lại từng bước.
  • Dashboard có rất nhiều panel, trong khi buổi sáng mọi người chỉ cần biết hai điều: server có sống không, ổ đĩa có còn đủ không.

Vấn đề thứ ba nặng nhất. Nhiều chỉ số không phải là xấu. Cái sai là đội không tách màn hình ai cũng xem mỗi ngày khỏi màn hình dùng để đào nguyên nhân khi có sự cố. Kết quả là dashboard chỉ được mở sau khi sự cố đã xảy ra.

Beszel là gì và hoạt động thế nào?

Beszel là công cụ giám sát server nhẹ, mã nguồn mở theo giấy phép MIT, gồm hai thành phần:

Thành phần Vai trò
Hub Ứng dụng web xây trên PocketBase, hiển thị dashboard và lưu dữ liệu lịch sử
Agent Chạy trên từng server cần giám sát, gửi chỉ số về hub

Hub tự lưu dữ liệu, nên không cần dựng thêm cơ sở dữ liệu chuỗi thời gian như Prometheus hay InfluxDB. Theo tài liệu bảo mật chính thức của Beszel, hub và agent kết nối theo một trong hai chiều:

Cách kết nối Chiều khởi tạo Cổng mặc định
SSH Hub → agent 45876
WebSocket Agent → hub 8090

Kết nối SSH chỉ chấp nhận khoá công khai của hub, không cấp terminal và không nhận lệnh. Vì vậy dù khoá bị lộ, kẻ tấn công cũng không chạy được lệnh trên agent. Với server nằm sau mạng nội bộ mà hub không vào thẳng được, chiều WebSocket (agent chủ động gọi ra) thường dễ mở tường lửa hơn.

Triển khai Beszel cho server nội bộ gồm những bước nào?

Triển khai Beszel chỉ cần Docker Compose trên hub và trên từng server. Quy trình VAON áp dụng:

  1. Dựng hub bằng một file docker-compose.yml với image henrygd/beszel, mở cổng 8090 và gắn thư mục dữ liệu.
  2. Thêm server bằng nút "Add System" trên giao diện hub. Hub sinh sẵn file compose cho agent, gồm khoá công khai (KEY), token (TOKEN) và địa chỉ hub (HUB_URL).
  3. Chạy agent trên server bằng file compose vừa sao chép. Gắn /var/run/docker.sock ở chế độ chỉ đọc để lấy CPU, RAM, mạng theo từng container.
  4. Đặt cảnh báo cho từng server theo dạng "chỉ số nào, vượt ngưỡng bao nhiêu, trong bao lâu".
  5. Đăng ký kênh nhận thông báo trong Settings > Notifications bằng URL theo chuẩn Shoutrrr (Slack, Discord, Telegram, Teams…).

Từ phiên bản 0.12.0, Beszel có universal token, cho phép agent tự kết nối mà không cần khai báo server trước trên hub. Với đội vận hành, thêm một server giờ chỉ còn là "đặt file compose rồi chạy". Việc nhỏ, nhưng đội không còn phải nhớ lại từng bước như trước.

Màn hình Beszel cho đội vận hành thấy gì mỗi ngày?

Màn hình tổng quan Beszel xếp mỗi server thành một dòng: CPU, RAM, ổ đĩa, GPU, load average, mạng, thời gian hoạt động. Ô nào có mức sử dụng tăng cao sẽ chuyển thanh sang màu vàng, nên không cần đọc hết các con số vẫn thấy ngay dòng cần chú ý. Tên dự án trong ảnh chụp đã được che.

Ở ảnh chụp phía trên, mục "Active Alerts" đang báo một server môi trường phát triển có dung lượng ổ đĩa vượt 80% liên tục hơn 10 phút. Đây là quy tắc cảnh báo thật đang chạy, không phải dữ liệu mẫu.

Trang chi tiết một server trong Beszel: biểu đồ CPU, RAM và mức sử dụng theo từng container Docker

Trang chi tiết của từng server hiển thị sẵn biểu đồ theo container Docker. Với Grafana, loại biểu đồ này thường cần cài thêm thành phần thu thập như cAdvisor.

Biểu đồ dung lượng ổ đĩa, I/O ổ đĩa, băng thông, lưu lượng mạng Docker, swap và load average

Trên server trong ảnh, các đỉnh CPU, băng thông và lưu lượng mạng Docker xuất hiện gần như cùng thời điểm. Bộ lọc trên biểu đồ Docker giúp khoanh vùng container gây ra đỉnh đó. Beszel không phải lúc nào cũng đủ để tìm ra nguyên nhân gốc, nhưng đủ để quyết định bước điều tra tiếp theo.

Giám sát S.M.A.R.T. ổ cứng với Beszel cần chuẩn bị gì?

S.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology) là dữ liệu tự chẩn đoán của ổ cứng, dùng để phát hiện ổ sắp hỏng. Đây là một lý do VAON chọn Beszel cho server nội bộ. Server thuê trên cloud hỏng ổ thì nhà cung cấp xử lý; server vật lý nội bộ thì đội phải tự phát hiện và tự thay.

Lưu ý: máy ảo VPS trên cloud dùng ổ ảo nên không có dữ liệu S.M.A.R.T. Tính năng này chỉ có ý nghĩa với server có ổ cứng vật lý.

Theo hướng dẫn S.M.A.R.T. chính thức của Beszel, cần chuẩn bị:

  1. Cài smartmontools trên máy chạy agent (smartctl từ bản 7.0).
  2. Với Docker, đổi image agent sang tag henrygd/beszel-agent:alpine.
  3. Truyền thiết bị ổ đĩa vào container (ví dụ /dev/sda, /dev/nvme0) và cấp quyền SYS_RAWIO cho ổ SATA, SYS_ADMIN cho ổ NVMe.
  4. Với agent chạy bằng systemd, thêm AmbientCapabilities, CapabilityBoundingSetDeviceAllow vào mục [Service].

Thiết bị phải truyền theo tên ổ (sda, nvme0), không theo tên phân vùng (sda1). Cảnh báo S.M.A.R.T. không có ngưỡng tự chỉnh: Beszel tự gửi thông báo khi phát hiện "failure", với điều kiện đã đăng ký ít nhất một kênh thông báo.

Beszel khác Grafana ở điểm nào?

Beszel và Grafana giải quyết hai bài toán khác nhau. Bảng dưới tóm tắt các khác biệt chính khi dùng cho tầng server:

Tiêu chí Beszel Grafana (kèm Prometheus)
Thành phần cần dựng Hub + agent Grafana + Prometheus + exporter
Thêm một server Chép file compose từ hub rồi chạy Cài exporter, sửa cấu hình thu thập
Chỉ số theo container Docker Có sẵn Cần thêm cAdvisor hoặc tương đương
Tuỳ biến dashboard Cố định Gần như không giới hạn
Truy vấn tự do Không có PromQL
Log, chỉ số trong ứng dụng Không Có (qua Loki, exporter của ứng dụng)
S.M.A.R.T. Có sẵn, cảnh báo tự động Cần thêm exporter riêng

Nói ngắn gọn: Beszel trả lời câu hỏi "server có khoẻ không", Grafana trả lời được gần như mọi câu hỏi nếu đội đủ thời gian cấu hình.

Khi nào không nên dùng Beszel?

Beszel không phù hợp khi đội cần quan sát bên trong ứng dụng. Cụ thể:

  • Beszel không xem được log.
  • Beszel không thu chỉ số ứng dụng như số request, độ trễ, độ dài hàng đợi, và không cho thêm chỉ số tự định nghĩa.
  • Dashboard cố định, không có truy vấn tự do như PromQL.
  • Cảnh báo S.M.A.R.T. không chỉnh được điều kiện.

Với sản phẩm cần theo dõi chi tiết hành vi ứng dụng, Prometheus và Grafana vẫn là lựa chọn hợp lý hơn. VAON chọn Beszel cho tầng server và để phần giám sát ứng dụng cho công cụ khác.

Sau khi chuyển sang Beszel, điều gì thay đổi?

Trước khi chuyển, đội VAON lo rằng ít chỉ số hơn sẽ khiến việc truy nguyên sự cố khó hơn. Đến nay, những gì cần biết ở cấp server đều nằm đủ trong Beszel.

Thay đổi lớn nhất là số người mở dashboard. Vì chỉ có một màn hình tổng quan, người không phụ trách hạ tầng cũng mở ra mỗi sáng, thấy thanh vàng là báo ngay cho người phụ trách. Nếu làm lại từ đầu, việc đầu tiên đội sẽ chốt không phải là thu chỉ số nào, mà là ai mở màn hình đó mỗi sáng và thấy màu vàng thì báo cho ai.

Nếu bạn đang cân nhắc cách giám sát hệ thống sau khi đưa vào vận hành, bạn có thể tham khảo dịch vụ phát triển hệ thốngtư vấn chuyển đổi số của VAON, hoặc liên hệ để được tư vấn miễn phí về kiến trúc vận hành hiện tại.

Sẵn sàng chuyển đổi doanh nghiệp?

Hãy thảo luận về cách chúng tôi có thể giúp bạn tận dụng AI và chuyển đổi số.

Câu hỏi thường gặp

Beszel có miễn phí không?
Beszel là phần mềm mã nguồn mở theo giấy phép MIT, dùng miễn phí và tự host được. Chi phí thực tế chỉ là tài nguyên cho hub và agent. Mã nguồn công khai tại GitHub henrygd/beszel, nơi dự án đang có khoảng 25.500 sao (ghi nhận tháng 9/2026).
Beszel có thay thế hoàn toàn Grafana được không?
Không, nếu bạn cần log, chỉ số bên trong ứng dụng hoặc truy vấn tự do. Beszel tập trung vào sức khoẻ server và container Docker: CPU, RAM, ổ đĩa, mạng, nhiệt độ, S.M.A.R.T. Nhiều đội dùng Beszel cho tầng server và giữ Grafana cho tầng ứng dụng.
Server trong mạng nội bộ không mở cổng ra ngoài có giám sát được không?
Được. Agent Beszel có thể chủ động kết nối tới hub qua WebSocket (cổng 8090 mặc định), nên server nội bộ chỉ cần được phép gọi ra ngoài tới hub. Chiều SSH ngược lại yêu cầu hub truy cập được cổng 45876 trên agent.
Vì sao VPS trên cloud không hiện dữ liệu S.M.A.R.T.?
VPS dùng ổ đĩa ảo do nhà cung cấp cấp phát, không cho truy cập trực tiếp ổ vật lý, nên smartctl không đọc được dữ liệu S.M.A.R.T. Tính năng này chỉ dùng được trên server có ổ cứng vật lý, ví dụ server đặt tại văn phòng hoặc thuê chỗ đặt máy.
Beszel gửi cảnh báo qua những kênh nào?
Beszel gửi thông báo qua URL theo chuẩn Shoutrrr, hỗ trợ hơn 20 dịch vụ như Slack, Discord, Telegram, Microsoft Teams, Gotify, Mattermost. Kênh được khai báo trong Settings > Notifications, sau đó bật cảnh báo cho từng server trên bảng danh sách.
Đặng Văn Luân

Người viết

Đặng Văn Luân

CEO

No Code, No Life

Xem tất cả bài viết

Chia sẻ bài viết