Báo cáo đánh giá lựa chọn giải pháp: kho chuỗi thời gian (TSDB) cho nền tảng giám sát
| Trạng thái | BẢN NHÁP, phiên bản 0.1, 2026-09-30 |
| Tài liệu tầng trên | L1 HLD Collector (mục 8, ràng buộc C4 và C5) |
| ADR liên quan | ADR 0005, ADR 0014 (đề xuất): giữ VictoriaMetrics, ADR 0015 (đề xuất): nhập JSON thay cho remote-write |
| Người quyết định | chưa chỉ định. Người dùng dự án đã quyết định tạm thời giữ VictoriaMetrics (2026-09-30) và cài lên để chạy thử |
| Bên thẩm định | chưa chỉ định, chưa có sign-off |
Quy ước: đánh giá dựa trên (a) tài liệu và mã của dự án, ghi kèm nguồn, và (b) hiểu biết chung về các sản phẩm, gắn nhãn chung, chưa kiểm chứng trong dự án. Mục (b) cần kiểm chứng ở spike S3 nếu quyết định được mở lại. Không có số đo hiệu năng nào của các phương án thay thế trong dự án này.
0. Bối cảnh và các giải pháp so sánh
Nhu cầu (ADR 0005, docs/04, docs/08): lưu hàng chục nghìn mẫu mỗi giây, truy vấn theo khoảng thời gian, giữ hàng tháng đến hàng năm với chi phí thấp, cô lập theo công ty. Tải tham chiếu: 10.000 agent ở chu kỳ 30 s là khoảng 333 request/s, khoảng 23.000 mẫu/s, khoảng 2 GB/ngày (docs/08). Suy ra 30 ngày dữ liệu thô cỡ 60 GB ở mức 10.000 agent (phép nhân từ số trên, chưa đo).
| Ký hiệu | Giải pháp | Ghi chú |
|---|---|---|
| GP1 | VictoriaMetrics (single node, hai instance vm-raw và vm-long, vmalert làm rollup; lên cluster khi cần) | Đang chạy ở môi trường dev (ADR 0005, docs/04, docs/09) |
| GP2 | Prometheus kèm Thanos hoặc Mimir | Hệ sinh thái Prometheus |
| GP3 | TimescaleDB (PostgreSQL) | Cơ sở dữ liệu quan hệ có tiện ích chuỗi thời gian |
| GP4 | ClickHouse | Cơ sở dữ liệu cột |
| GP5 | Kho tích hợp sẵn trong collector (lite store) | Chưa tồn tại, chỉ xét như phương án. Người dùng đã nói không xây trừ khi được yêu cầu |
Đã loại từ ADR 0005 ở vòng đầu và không xét lại ở đây: MySQL (tranh chấp với ứng dụng nghiệp vụ, không hợp quy mô), InfluxDB.
1. Bảng đánh giá tính năng
Thang: Đáp ứng, Một phần, Không, CKC (chung, chưa kiểm chứng trong dự án). Mức đáp ứng của GP1 lấy từ tài liệu và mã dự án trừ khi có ghi chú.
| STT | Tính năng | Mô tả | Ưu tiên | GP1 VM | GP2 Prom + Thanos/Mimir | GP3 TimescaleDB | GP4 ClickHouse | GP5 Lite store | Ghi chú |
|---|---|---|---|---|---|---|---|---|---|
| I | Ghi số liệu | Bắt buộc | |||||||
| 1 | Nhận 23.000 mẫu/s (mức 10.000 agent) | NFR-01 | Bắt buộc | Một phần | Đáp ứng (CKC) | Một phần (CKC) | Đáp ứng (CKC) | Không | GP1: nén tốt, ít tài nguyên (ADR 0005), nhưng chưa kiểm thử tải ở quy mô này với VM thật (spike S3, docs/11 X-7, X-9) |
| 2 | Giao thức ghi chuẩn để thay được TSDB | Đổi kho không đổi collector | Cao | Một phần | Đáp ứng | Không | Không | Đáp ứng | ADR 0005 ban đầu chọn remote-write. Thực tế mã dùng nhập JSON của VM (/api/v1/import), gắn với VM. Xem ADR 0015 |
| 3 | Gắn nhãn company_id, server_id do collector | Chống giả mạo tenant | Bắt buộc | Đáp ứng | Đáp ứng | Đáp ứng | Đáp ứng | Đáp ứng | Do collector thực hiện ở lớp ghi (internal/tsdb), không phụ thuộc kho |
| II | Truy vấn | Bắt buộc | |||||||
| 4 | Truy vấn khoảng thời gian, avg/min/max/last | API cố định của collector | Bắt buộc | Đáp ứng | Đáp ứng | Đáp ứng (SQL) | Đáp ứng (SQL) | Một phần | Mã hiện tại sinh truy vấn kiểu PromQL, ép matcher company_id và server_id (internal/tsdb/vm.go) |
| 5 | Không lộ ngôn ngữ truy vấn thô cho Access Hub | Cô lập tenant | Bắt buộc | Đáp ứng | Đáp ứng | Đáp ứng | Đáp ứng | Đáp ứng | Cấm ở tầng collector (CLAUDE.md), độc lập kho |
| 6 | Cô lập tenant bên trong kho | Phân quyền ở kho | Trung bình | Không | Không (CKC) | Có thể (CKC) | Có thể (CKC) | Không | Không phương án nào được dựa vào; cô lập nằm ở collector (NFR-12) |
| III | Lưu trữ dài hạn | Cao | |||||||
| 7 | Retention 30 ngày thô và 400 ngày rollup | Q4 chưa xác nhận | Cao | Một phần | Đáp ứng (Thanos, CKC) | Đáp ứng (CKC) | Đáp ứng (CKC) | Một phần | GP1 bản OSS: một retention mỗi instance, không downsampling. Xử lý bằng hai instance và vmalert (ADR 0005, docs/04) |
| 8 | Downsampling tự động | Rollup nhiều độ phân giải | Trung bình | Không (bản OSS) | Đáp ứng với Thanos (CKC), Mimir không (CKC) | Đáp ứng (continuous aggregates, CKC) | Đáp ứng (materialized view, CKC) | Không | GP1 dùng vmalert recording rules một quy tắc mỗi chỉ số trong catalog |
| 9 | Retention theo từng công ty | Xóa dữ liệu theo tenant | Thấp | Không | Không (CKC) | Có thể (CKC) | Có thể (CKC) | Không | Hiện ghi ở giai đoạn 4 (ADR 0005). Purge theo công ty và theo máy đã có ở admin API (internal/admin) |
| IV | Vận hành | Bắt buộc | |||||||
| 10 | Vận hành đơn giản, ít thành phần | R9 | Cao | Đáp ứng | Không | Một phần | Một phần | Đáp ứng | GP2 cần nhiều thành phần (Thanos hoặc Mimir gồm nhiều dịch vụ, CKC). GP3 thêm công nghệ PostgreSQL trong khi Access Hub dùng MySQL |
| 11 | Mở rộng khi vượt một node | 50.000 agent | Cao | Đáp ứng (VM cluster) | Đáp ứng | Một phần | Đáp ứng | Không | docs/08: 50.000 agent cần VM cluster hoặc nhiều collector. Chưa thử VM cluster |
| 12 | Sao lưu và khôi phục | Cao | Một phần | Một phần | Đáp ứng (CKC) | Đáp ứng (CKC) | Không | Dev: VM chưa có snapshot theo lịch (docs/09) | |
| 13 | Giấy phép mã nguồn mở, không phí bản quyền | Cao | Đáp ứng | Đáp ứng | Một phần (CKC) | Đáp ứng | Đáp ứng | Phần trả phí của GP1 (downsampling, retention theo bộ lọc) không dùng. Giấy phép chính xác từng bản chưa được rà soát trong dự án |
2. Bảng đánh giá kiến trúc hệ thống và ANBM
| Tiêu chí | GP1 VictoriaMetrics | GP2 Prometheus + Thanos/Mimir | GP3 TimescaleDB | GP4 ClickHouse | GP5 Lite store |
|---|---|---|---|---|---|
| Techstack | Đã tích hợp: bộ ghi và truy vấn viết, kiểm thử với VM (dev chạy thật). Nhóm chưa có kinh nghiệm sản xuất với VM (R12 nói về Go, không nói về VM) | Nhiều thành phần, cần thêm kiến thức vận hành, CKC | PostgreSQL mới đối với hệ thống (Access Hub dùng MySQL), CKC | Công nghệ mới, mô hình vận hành riêng, CKC | Phải tự xây và tự bảo trì |
| Mở rộng và tích hợp | Một node đủ cho giai đoạn 1 đến 2. Cluster cho 50.000+ (chưa thử). Tích hợp qua HTTP, không gắn giao thức ghi chuẩn (ADR 0015) | Chuẩn remote-write, mở rộng tốt (CKC) | Mở rộng dọc tốt, ngang phức tạp hơn (CKC) | Mở rộng ngang tốt (CKC) | Không mở rộng vượt vài nghìn agent (đánh giá của tác giả, chưa đo) |
| Kiểm soát vận hành | Tự lưu trữ hoàn toàn, ít cấu hình | Tự lưu trữ, nhiều mảnh ghép | Tự lưu trữ | Tự lưu trữ | Nằm trong tiến trình collector |
| Trải nghiệm admin | Có giao diện và API riêng của VM để chẩn đoán (chưa tích hợp vào Access Hub) | Công cụ phong phú (CKC) | Công cụ SQL quen thuộc | Công cụ SQL | Không có |
| Phân quyền | Không có phân quyền theo tenant. Bảo vệ bằng cách chỉ collector được nói chuyện với VM | Tương tự | Có role SQL (CKC) | Có (CKC) | Không áp dụng |
| Mã hóa kết nối | Dev chạy VM trên loopback không TLS. Sản xuất phải giới hạn mạng hoặc dùng proxy TLS, chưa thiết kế xong (xem báo cáo ANBM, S-06) | Tương tự | TLS được hỗ trợ (CKC) | TLS được hỗ trợ (CKC) | Không áp dụng |
| Kế hoạch sự cố, sao lưu, DRP | Chưa có snapshot theo lịch, chưa có quy trình khôi phục | Chưa có | Chưa có | Chưa có | Chưa có |
| SDLC, pentest | Chưa thực hiện pentest riêng cho lớp lưu trữ. Rà soát bảo mật chung ở báo cáo ANBM | Chưa | Chưa | Chưa | Chưa |
| Tuân thủ và bảo vệ dữ liệu | Chưa có yêu cầu pháp lý nêu ra (OQ-4 của L1). Xóa theo yêu cầu (purge) có ở admin API | Tương tự | Tương tự | Tương tự | Tương tự |
3. Bảng đánh giá chi phí và thời gian triển khai
Không có số tiền hay số ngày công cụ thể trong dự án. Dùng mức định tính, đánh dấu ước lượng của tác giả bản nháp là đề xuất, chưa xác nhận. Chưa có mô hình chi phí hạ tầng theo quy mô (docs/13 ghi nên lập sau spike S2, S3).
| GP1 VM | GP2 Prom + Thanos/Mimir | GP3 TimescaleDB | GP4 ClickHouse | GP5 Lite store | |
|---|---|---|---|---|---|
| Khả năng golive | Nhanh: đã tích hợp và chạy ở dev | Chậm: cần dựng nhiều thành phần và viết lại đường ghi (đề xuất, chưa xác nhận) | Trung bình: viết lại bộ ghi và truy vấn, thêm rollup thủ công (đề xuất, chưa xác nhận) | Trung bình đến chậm (đề xuất, chưa xác nhận) | Chậm: xây từ đầu (đề xuất, chưa xác nhận) |
| Thời gian bàn giao | Đã có, còn kiểm thử tải và sao lưu | Chưa ước lượng | Chưa ước lượng | Chưa ước lượng | Chưa ước lượng |
| Chi phí bản quyền | Không (bản OSS) | Không (bản OSS) | Không hoặc thấp (CKC) | Không (bản OSS) | Không |
| Chi phí triển khai | Thấp: chỉ còn cấu hình sản xuất, TLS, sao lưu | Cao hơn: nhiều thành phần | Trung bình | Trung bình | Cao: phát triển |
| Chi phí vận hành | Thấp đến trung bình: hai instance, đến cluster khi cần | Cao hơn | Trung bình | Trung bình | Thấp ở quy mô nhỏ, cao nếu phải mở rộng |
| Chi phí thiết bị | Khoảng 60 GB thô cho 30 ngày ở 10.000 agent, cộng rollup 400 ngày (chưa đo kích thước rollup) | Tương đương hoặc hơn (CKC) | Thường lớn hơn cho cùng dữ liệu (CKC) | Nén tốt (CKC) | Nhỏ ở quy mô nhỏ |
| TCO | Chưa tính. Thấp nhất trong các phương án nhờ tái sử dụng công việc đã làm (đề xuất, chưa xác nhận) | Chưa tính | Chưa tính | Chưa tính | Chưa tính |
4. Kết luận
Khuyến nghị: giữ GP1 (VictoriaMetrics) ở giai đoạn hiện tại, khớp quyết định của người dùng. Lý do chính: đã tích hợp và chạy được ở dev, vận hành đơn giản nhất, nén tốt, không tốn bản quyền, và hạn chế của bản OSS (không downsampling, retention toàn cục) đã có cách xử lý bằng hai instance cùng vmalert (ADR 0005, docs/04).
Chọn GP2 nếu ưu tiên: chuẩn ghi từ xa mở, khả năng đổi kho tự do và hệ sinh thái công cụ Prometheus, và chấp nhận nhiều thành phần vận hành hơn.
Chọn GP3 nếu ưu tiên: truy vấn SQL, retention và rollup theo từng bảng, và đã có năng lực vận hành PostgreSQL (hiện Access Hub dùng MySQL).
Chọn GP4 nếu ưu tiên: quy mô rất lớn, phân tích tổng hợp phức tạp trên số liệu, chấp nhận thêm một công nghệ mới.
GP5 không khuyến nghị: chưa có nhu cầu chứng minh, chi phí xây và duy trì cao, không mở rộng được.
Điều kiện xem xét lại quyết định:
- Spike S3 (VM OSS,
vmalertở 10.000 máy) cho kết quả không đạt NFR-01. - Retention theo từng công ty trở thành yêu cầu bắt buộc (ADR 0005 xếp giai đoạn 4).
- Cần downsampling nhiều độ phân giải mà hai instance không đáp ứng.
- Vượt 50.000 agent (
docs/08: cần VM cluster, chưa thử). - Giấy phép hoặc chính sách nhà cung cấp VictoriaMetrics thay đổi.
Rủi ro của việc giữ VM (tham chiếu R11, R18, R2):
| Rủi ro | Trạng thái |
|---|---|
| Mã hiện gắn với nhập JSON của VM thay vì remote-write chuẩn, nên đổi kho tốn công hơn ADR 0005 mô tả | Thực tế đã lệch ADR, xem ADR 0015. Giao diện tsdb.Writer và tsdb.Query trong internal/tsdb vẫn cho phép thay bộ ghi |
| Chưa kiểm thử tải VM thật ở quy mô mục tiêu | Mở (spike S3, X-7, X-9) |
| Chưa có sao lưu theo lịch, chưa có TLS đến VM ở thiết kế sản xuất | Mở, xem báo cáo ANBM |
| Chi phí lưu trữ có thể vượt dự kiến | Mở (R18), cần đo dung lượng thực |
Điều cần người quyết định xác nhận: (1) chấp nhận giữ VictoriaMetrics làm quyết định chính thức (ADR 0014, hiện trạng thái "Đề xuất"); (2) có cần đánh giá lại GP2 đến GP4 bằng đo đạc thực tế hay không; (3) ngưỡng quy mô mà tại đó mở lại quyết định.