Tổng quan

Trang này tóm lược kiến trúc tổng thể của G‑BlackHole: cách các thành phần như Agent, Forwarder cùng các mô-đun giám sát, thu thập, biến đổi và chuyển phát dữ liệu phối hợp với nhau; đồng thời mô tả cách hệ thống tích hợp với các dịch vụ bên ngoài.

Thành phần chính

  • Registry: Điểm điều phối trung tâm (API/MQTT) lưu thông tin cấu hình, đăng ký thiết bị/tác nhân và phát hành lệnh điều khiển.
  • Agent(s): Chạy trên máy/điểm cuối, bao gồm:
    • Supervisor: Giám sát vòng đời tiến trình, tải cấu hình từ Registry, kích hoạt/khởi động collectors và shippers.
    • Collectors: Thu thập dữ liệu từ nhiều nguồn: Files, Windows Events, APM, Rsyslog, Kafka, MQTT… theo chế độ sự kiện hoặc định kỳ.
    • Shippers: Đóng gói và gửi dữ liệu ra ngoài (TCP/UDP, MQTT, HTTP…) đến Forwarder hoặc trực tiếp đến đích cấu hình.
  • Forwarder: Lớp trung gian tiếp nhận, biến đổi và chuyển phát:
    • Supervisor: Quản lý vòng đời các dịch vụ thu/cấp phát dữ liệu.
    • Selectors: Các điểm vào dữ liệu: Rsyslog Server, Kafka Consumer, MQTT Client.
    • Transformers: Chuẩn hoá/biến đổi/enrich sự kiện trước khi chuyển phát.
    • Shippers: Gửi ra MQTT Broker, HTTP Proxy Server hoặc các đích khác (BlackHole, Kafka, v.v.).
  • External Services / Sinks: MQTT Broker, BlackHole, Kafka Broker, hoặc dịch vụ HTTP bên ngoài.

Luồng dữ liệu điển hình

  1. Collectors trên Agent đọc dữ liệu theo cơ chế sự kiện hoặc định kỳ và đẩy cho Shipper nội bộ.
  2. Shipper của Agent gửi sự kiện qua các kênh: TCP/UDP, subscribe/consume (MQTT/Kafka), hoặc chuyển thẳng tới Forwarder.
  3. Forwarder tiếp nhận qua Rsyslog Server/Kafka Consumer/MQTT Client, sau đó chuyển qua Transformers để chuẩn hoá.
  4. Shipper của Forwarder chuyển kết quả tới điểm đích: MQTT Broker, HTTP Proxy Server, hoặc dịch vụ BlackHole/Kafka bên ngoài.
  5. Registry trao đổi điều khiển/cấu hình với Agent và Forwarder qua API hoặc MQTT.

Gợi ý triển khai

  • Ưu tiên gửi dữ liệu từ Agent tới Forwarder khi cần chuẩn hoá/tích hợp nhiều nguồn đích; có thể gửi trực tiếp tới đích khi pipeline đơn giản.
  • Dùng MQTT làm kênh pub/sub cho cấu hình động và phản hồi trạng thái; Kafka thích hợp cho thông lượng cao và lưu vết lâu dài.
  • Transformers nên tách rule theo loại sự kiện để dễ mở rộng và kiểm thử.