0

[Open Source] #43 - Scrutiny: Hệ thống giám sát ổ cứng thông minh và kiến trúc Hub/Spoke với Go & InfluxDB

Trong kỷ nguyên dữ liệu, sức khỏe của ổ cứng (HDD/SSD) chính là sinh mệnh của hệ thống. Tuy nhiên, việc sử dụng các dòng lệnh smartctl truyền thống thường gây khó khăn trong việc theo dõi xu hướng dài hạn. Scrutiny xuất hiện như một giải pháp hiện đại, biến những dòng log khô khan thành một Dashboard trực quan, đi kèm khả năng dự báo hỏng hóc dựa trên dữ liệu thực tế.

Dưới góc độ kỹ thuật, Scrutiny là một minh chứng tuyệt vời cho việc kết hợp giữa Go, InfluxDB và kiến trúc Phân tán (Hub/Spoke) để quản lý hạ tầng lưu trữ ở quy mô lớn.

Github: https://github.com/AnalogJ/scrutiny


🛠️ 1. Nền tảng công nghệ: Sự kết hợp hoàn hảo giữa Hệ thống và Dữ liệu

Scrutiny tận dụng một tập hợp công nghệ (Stack) được tối ưu cho việc thu thập và phân tích chỉ số thời gian thực:

  • Backend (Golang): Lựa chọn Go giúp việc tương tác với các lệnh hệ thống cấp thấp (smartctl) trở nên cực kỳ hiệu quả và chiếm ít tài nguyên.
  • Frontend (Angular 13+ & Tailwind CSS): Sử dụng RxJS để xử lý các luồng dữ liệu bất đồng bộ từ API, mang lại trải nghiệm Dashboard mượt mà.
  • Cơ sở dữ liệu Lai (Hybrid Database):
    • SQLite: Lưu trữ metadata, cấu hình thiết bị và thông tin người dùng.
    • InfluxDB v2: "Trái tim" của hệ thống, lưu trữ dữ liệu chuỗi thời gian (time-series) như nhiệt độ và các thuộc tính S.M.A.R.T để vẽ biểu đồ xu hướng.
  • Notification Engine (Shoutrrr): Tích hợp khả năng gửi thông báo đến hàng chục nền tảng (Discord, Telegram, Slack, Email) chỉ qua cấu hình Webhook đơn giản.

🏗️ 2. Trụ cột kiến trúc: Mô hình Hub/Spoke (Trục và Nan hoa)

Scrutiny được thiết kế để có thể giám sát từ một máy tính cá nhân cho đến hàng trăm máy chủ trong trung tâm dữ liệu:

  • Collector (Spoke - Agent): Là một thành phần cực nhẹ chạy trên mọi server cần giám sát. Nó thực hiện nhiệm vụ "quét" (scan) và "thu thập" (collect) dữ liệu từ ổ cứng, sau đó đẩy (push) về trung tâm.
  • Webapp/API (Hub - Central): Đóng vai trò là bộ não tập trung. Nó tiếp nhận dữ liệu từ tất cả các Collector, thực hiện phân tích, lưu trữ và cung cấp giao diện hiển thị.
  • Omnibus Docker Image: Để tối ưu cho người dùng cá nhân, Scrutiny cung cấp bản đóng gói "tất cả trong một", quản lý đồng thời Web server, InfluxDB và Cron jobs thông qua S6-overlay.

🔄 3. Các kỹ thuật "Pro-level" trong mã nguồn

  1. Failure Prediction (Dựa trên dữ liệu Backblaze): Thay vì chỉ dựa vào các ngưỡng lỗi (thresholds) cứng nhắc của nhà sản xuất, Scrutiny tích hợp dữ liệu thống kê thực tế từ Backblaze (nhà cung cấp lưu trữ đám mây lớn). Kỹ thuật này cho phép cảnh báo sớm các mẫu lỗi phổ biến mà SMART thông thường có thể bỏ qua.

  2. Kỹ thuật Downsampling (Giảm mật độ dữ liệu): Để tránh việc InfluxDB phình to sau nhiều năm hoạt động, Scrutiny tự động gộp các điểm dữ liệu cũ (ví dụ: gộp dữ liệu từng giờ thành trung bình ngày/tuần). Điều này giúp duy trì lịch sử nhiệt độ trọn đời của ổ cứng mà không tốn dung lượng lưu trữ.

  3. Udev Metadata Mapping: Bằng cách ánh xạ /run/udev từ host vào container, Scrutiny có thể định danh chính xác ổ cứng dựa trên Serial Number hoặc WWN, ngay cả khi tên thiết bị (như /dev/sda) bị thay đổi sau khi khởi động lại máy chủ.


📊 4. Workflow: Luồng thu thập và xử lý chỉ số SMART

Sơ đồ trình tự mô tả cách dữ liệu di chuyển từ phần cứng vật lý lên giao diện người dùng:

image.png


⚖️ 5. So sánh chiến lược

Tiêu chí Scrutiny CLI (smartctl) Enterprise (Zabbix/Prometheus)
Giao diện Dashboard Web trực quan Dòng lệnh văn bản Phức tạp, cần cấu hình nhiều
Lưu trữ lịch sử Có (Tối ưu qua InfluxDB) Không có sẵn Có (Rất mạnh)
Dự báo lỗi Dựa trên thực tế Backblaze Dựa trên ngưỡng NSX Thường chỉ theo dõi ngưỡng
Thiết lập Cực nhanh qua Docker Thủ công Phức tạp, tốn tài nguyên

✅ Kết luận: Tại sao Scrutiny là hình mẫu?

Scrutiny là minh chứng cho việc hiện đại hóa các công cụ hệ thống cũ. Dự án không cố gắng thay thế smartmontools, mà xây dựng một lớp kiến trúc thông minh bao quanh nó. Việc sử dụng mô hình Hub/Spoke kết hợp với cơ sở dữ liệu Time-series biến nó thành một công cụ không thể thiếu cho cả người dùng HomeLab lẫn các quản trị viên hệ thống chuyên nghiệp.

Đối với các developer, Scrutiny là một kho tài liệu mẫu về:

  • Cách viết Backend Go tương tác với CLI hệ thống.
  • Cách vận hành InfluxDB để quản lý dữ liệu chuỗi thời gian quy mô lớn.
  • Cách đóng gói Docker phức tạp với S6-overlay.

Hy vọng bản phân tích này mang lại cho bạn những kiến thức hữu ích về quản trị hệ thống và kiến trúc phần mềm. Đừng quên Upvote và Follow mình để đón xem những "kỳ quan" mã nguồn tiếp theo!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí