Access Hub Collector
Đồng bộ từ mã nguồn lúc 10:57, 03/10/2026
Skip to content

Kiến trúc ​

5 phút đọcCập nhật 02/10/2026access-hub-collector, docs/01-architecture.md

Sơ đồ tổng thể ​

                          +------------------------------------------------+
                          |                 Access Hub (Laravel)           |
                          |  Control plane: kiểm kê, tenant, luật, UI,     |
                          |  thông báo, audit, IaC, MySQL (RW tách riêng)  |
                          +-----^--------------------------^---------------+
        sự kiện, seen, enroll,  |                          | đồng bộ luật, registry,
        inventory (API v1)      |                          | truy vấn, purge (internal API)
                          +-----+--------------------------+---------------+
                          |                  Collector                     |
                          |  role ingest | role worker | role admin        |
                          +--+-----------+------+------------+-------------+
                             |           |      |            |
                       Redis (state)   Bus   VictoriaMetrics  Outbox (sự kiện chờ gửi)
                             ^
   HTTPS (443), chỉ đi ra    |
+----------+  +----------+  +----------+
| Agent    |  | Agent    |  | Agent    |   ... hàng nghìn máy Linux và Windows
+----------+  +----------+  +----------+

Vai trò tiến trình của collector ​

Cùng một binary collector, chọn vai trò bằng cờ --roles=ingest,worker,admin (mặc định all cho dev). Mỗi vai trò scale độc lập.

Vai tròViệc làmTính chất
ingestNhận HTTP từ agent: enroll (proxy sang Access Hub), metrics, config, inventory, renew. Xác thực token qua registry, kiểm tra giới hạn, đẩy lên bus, cập nhật last_seenKhông trạng thái, scale ngang sau load balancer
workerĐọc bus, ghi TSDB theo lô, đánh giá luật, phát hiện mất tín hiệu, tạo sự kiện, gửi về Access Hub qua outboxCó trạng thái trong bộ nhớ theo shard, snapshot vào Redis
adminAPI nội bộ cho Access Hub: đẩy thay đổi registry, nạp lại luật, truy vấn số liệu, xóa dữ liệu tenant, trạng thái collectorChỉ mở trong mạng nội bộ

Luồng dữ liệu chính ​

1. Enroll (đăng ký agent mới) ​

  1. Admin tạo License trong Access Hub (gắn công ty, có thể gắn sẵn một Server, có hạn, số lần dùng).
  2. Cài agent với token đó. Agent gọi POST /agent/v1/enroll tới collector.
  3. Collector chuyển tiếp (proxy) sang POST /api/v1/monitoring/collector/enroll của Access Hub. Access Hub kiểm tra token, ghép hoặc tạo Server, tạo bản ghi agent, sinh agent token.
  4. Collector nhận agent_id, company_id, server_id, agent_token, nạp vào registry Redis, trả agent_id, agent_token, config về agent. Token chỉ hiện đúng một lần.

2. Nhận số liệu (đường nóng) ​

  1. Agent gửi POST /agent/v1/metrics (protobuf, nén) mỗi chu kỳ (mặc định 30 giây, có jitter).
  2. ingest băm token, tra registry Redis (miss thì hỏi Access Hub một lần, có cache âm), lấy company_id, server_id.
  3. Kiểm tra giới hạn: kích thước, số series, cửa sổ thời gian, tốc độ theo agent.
  4. Gắn nhãn company_id, server_id (bỏ mọi nhãn cùng tên agent gửi lên), đẩy vào bus theo shard hash(server_id) mod N.
  5. Ghi last_seen vào Redis, trả 200 kèm server_time, config_etag.
  6. worker gom lô, ghi TSDB bằng Prometheus remote-write, đồng thời đánh giá luật.

3. Cảnh báo ​

  1. Access Hub là nơi tạo và sửa luật. Collector kéo luật (since version) và cache.
  2. worker đánh giá luật trên luồng mẫu, giữ trạng thái pending/firing trong bộ nhớ, snapshot Redis.
  3. Mất tín hiệu: bộ quét theo dõi last_seen, phát sự kiện agent.down sau max(3 x interval, 90s).
  4. Sự kiện (mở, đóng, mất tín hiệu, phục hồi) vào outbox bền vững, rồi gửi lô tới POST /api/v1/monitoring/collector/events (idempotent theo event_id).
  5. Access Hub tạo monitoring_alert, kích hoạt thông báo, webhook, chuông Reverb, audit.

4. Truy vấn từ giao diện ​

Người dùng mở tab sức khỏe máy chủ. Access Hub kiểm tra quyền và công ty, rồi gọi API truy vấn của collector (/internal/v1/query/...) với company_id và server_id cố định. Collector tự chèn bộ lọc nhãn, không nhận PromQL thô từ ngoài.

5. Xóa dữ liệu ​

Khi công ty bị xóa vĩnh viễn hoặc máy chủ bị xóa vĩnh viễn, Access Hub gọi DELETE /internal/v1/tenants/{company_id}/data (hoặc theo server_id). Collector xóa series tương ứng trong TSDB, dọn Redis, thu hồi agent.

Ranh giới tin cậy ​

Ranh giớiTin cậyKiểm soát
Agent -> CollectorKhông tin nội dungToken, giới hạn, danh tính từ registry, kiểm tra đầu vào
Collector -> Access HubTin có điều kiệnBearer token của user dịch vụ, quyền monitoring.collector, TLS
Access Hub -> Collector (admin)Tin có điều kiệnToken admin riêng, mạng nội bộ, TLS
Collector -> TSDB, Redis, BusTinMạng nội bộ, xác thực dịch vụ, TLS khi ra khỏi node

Công nghệ ​

LớpLựa chọnLý do ngắnQuyết định
Ngôn ngữ agent và collectorGoBinary tĩnh, chéo nền tảng, hiệu năng, thư viện hệ thống tốtADR 0003
Giao thứcHTTPS + protobuf, nén zstd/gzipQua proxy và tường lửa dễ, gọn, dễ cân tảiADR 0002
Mô hình thu thậpAgent đẩy (push)Chỉ kết nối đi ra, không giữ thông tin đăng nhập vào máy chủADR 0001
TSDBVictoriaMetrics: single node cho dev và on-prem nhỏ, cụm cho hệ thống Cloud (ghi bằng JSON import)Gọn, nén tốt, dễ vận hành, thay thế đượcADR 0005, 0014, 0015, 0017
Trạng thái nóngRedis (hoặc Valkey)last_seen, registry cache, snapshot, rate limit
BusIn-process (GĐ 1), NATS JetStream (GĐ 3)Trừu tượng hóa bằng interface BusADR 0009
Trạng thái, cấu hình, cảnh báoMySQL của Access HubNguồn sự thật, nhỏ, không phải chuỗi thời gianADR 0004

Topology triển khai ​

  • Dev: một tiến trình --roles=all + Redis + VictoriaMetrics trong Docker Compose, Access Hub thật hoặc mock.
  • Production nhỏ (đến khoảng 2.000 máy): 2 node collector all sau load balancer, 1 Redis có replica, 1 VictoriaMetrics.
  • Production lớn (5.000 đến 10.000+ máy): ingest, worker, admin tách riêng, NATS JetStream 3 node, Redis HA, VictoriaMetrics cluster (hệ thống Cloud, ADR 0017; không chia instance theo tenant), rollup cụm riêng.
  • Nhiều vùng hoặc nhiều tenant lớn: nhiều collector độc lập, Access Hub gán collector cho từng agent (bảng monitoring_collectors), agent nhận collector_url trong cấu hình và có thể được chuyển sang collector khác.

Chi tiết kích thước và HA ở 08-scaling-ha.

Trang này có giúp được bạn không?
Sửa trang này

Nội dung đồng bộ từ kho mã access-hub-collector lúc 10:57, 03/10/2026. Khi tài liệu và mã khác nhau, mã thắng.