Quay lại danh sách
Tin tức công nghệ

Xây dựng Hệ thống Phân tích Log Thời gian thực cho Hệ thống Web Traffic Cao bằng Vector, Kafka và ClickHouse trên 2 VPS

3 tháng 6, 2026

1. Đặt vấn đề: Thách thức phân tích log ở quy mô Traffic lớn

Đối với các hệ thống web có lưu lượng truy cập cao (High Traffic), lượng log sinh ra mỗi giây từ Nginx, Apache hoặc Application Server là cực kỳ khổng lồ. Việc giám sát và phân tích nguồn dữ liệu này theo thời gian thực (real-time) đóng vai trò sống còn trong việc phát hiện sự cố, ngăn chặn tấn công DDoS và tối ưu hóa trải nghiệm người dùng.

Tuy nhiên, các giải pháp truyền thống như ELK Stack (Elasticsearch, Logstash, Kibana) thường đòi hỏi tài nguyên phần cứng rất lớn (đặc biệt là RAM và CPU) để duy trì hiệu năng. Khi ngân sách hạn chế và bạn chỉ có trong tay 2 máy chủ ảo (VPS), việc cấu hình một hệ sinh thái cồng kềnh là điều bất khả thi. Đó là lý do bộ ba công nghệ thế hệ mới: Vector, Apache Kafka và ClickHouse trở thành giải pháp cứu cánh hoàn hảo.

2. Tại sao chọn Vector, Kafka và ClickHouse?

Để giải quyết bài toán hiệu năng trên hạ tầng tài nguyên giới hạn, chúng ta cần những công cụ được tối ưu hóa chuyên biệt cho từng công đoạn trong Pipeline dữ liệu:

  • Vector (Log Shipper): Được viết bằng ngôn ngữ Rust, Vector cực kỳ nhẹ, tiêu tốn rất ít RAM và CPU so với Logstash hay Fluentd. Nó chịu trách nhiệm thu thập, lọc và chuyển tiếp log từ Web Server một cách nhanh chóng.
  • Apache Kafka (Message Broker): Đóng vai trò là vùng đệm (buffer) chống tràn dữ liệu. Khi traffic tăng đột biến (peak traffic), Kafka sẽ lưu trữ log tạm thời, đảm bảo hệ thống phía sau không bị quá tải hoặc mất mát dữ liệu (backpressure management).
  • ClickHouse (Column-oriented DBMS): Là cơ sở dữ liệu dạng cột chuyên dụng cho phân tích (OLAP). ClickHouse có tốc độ nén dữ liệu cực cao và khả năng truy vấn hàng tỷ dòng log chỉ trong vài mili-giây, vượt trội hoàn toàn so với Elasticsearch về mặt chi phí tài nguyên.

3. Thiết kế kiến trúc tối ưu trên Hạ tầng 2 VPS

Với giới hạn 2 VPS, chúng ta cần phân bổ tài nguyên một cách chiến lược để đảm bảo tính sẵn sàng cao và không gây ảnh hưởng đến hiệu năng của ứng dụng chính. Mô hình phân bổ cụ thể như sau:

VPS 1: Nơi tiếp nhận Traffic và Xử lý Log bước đầu

Máy chủ này chứa các thành phần đối mặt trực tiếp với người dùng và thu thập dữ liệu gốc:

  • Web Server (Nginx/App): Nơi phát sinh log truy cập (Access Log).
  • Vector Agent: Chạy ngầm để đọc file log từ Nginx, phân tách (parse) dữ liệu thành cấu trúc JSON và đẩy trực tiếp vào Kafka.
  • Apache Kafka & Zookeeper: Đóng vai trò tiếp nhận và lưu trữ log tạm thời vào các Topic.

VPS 2: Lưu trữ và Phân tích Dữ liệu (Analytics Engine)

Máy chủ này tách biệt hoàn toàn để phục vụ cho các tác vụ nặng về xử lý dữ liệu và truy vấn:

  • Vector Aggregator (hoặc ClickHouse Kafka Engine): Đóng vai trò tiêu thụ (consume) dữ liệu từ Kafka trên VPS 1, thực hiện chuyển đổi cấu trúc cuối cùng và ghi vào ClickHouse.
  • ClickHouse Server: Lưu trữ dữ liệu log đã được tối ưu hóa cấu trúc theo dạng cột.
  • Grafana / ClickHouse Tabix: Giao diện trực quan hóa dữ liệu (Dashboard) giúp quản trị viên theo dõi các chỉ số trực quan.
Lưu ý bảo mật: Các kết nối giữa VPS 1 và VPS 2 (như Vector đến Kafka, hoặc Kafka đến ClickHouse) cần được cấu hình qua mạng nội bộ (Private Network) hoặc được mã hóa TLS để đảm bảo an toàn dữ liệu.

4. Hướng dẫn Triển khai Chi tiết

Bước 1: Cấu hình Nginx ghi Log dưới dạng JSON

Để Vector có thể parse log một cách hiệu quả nhất mà không tốn chi phí CPU cho các biểu thức chính quy (Regex) phức tạp, chúng ta nên cấu hình Nginx xuất log trực tiếp thành định dạng JSON. Thêm đoạn cấu hình sau vào file nginx.conf:

log_format nginx_json escape=json '{
  "time": "$time_iso8601",
  "remote_addr": "$remote_addr",
  "request_method": "$request_method",
  "request_uri": "$request_uri",
  "status": "$status",
  "body_bytes_sent": "$body_bytes_sent",
  "http_referrer": "$http_referer",
  "http_user_agent": "$http_user_agent",
  "request_time": "$request_time"
}';

access_log /var/log/nginx/access_json.log nginx_json;

Bước 2: Cấu hình Vector Agent trên VPS 1

Tạo file cấu hình vector.toml để định nghĩa nguồn log vào (Source) và đích đến là Kafka (Sink):

[sources.nginx_logs]
type = "file"
include = ["/var/log/nginx/access_json.log"]

[transforms.parse_json]
type = "remap"
inputs = ["nginx_logs"]
source = ""." = json!(.message)"

[sinks.kafka_output]
type = "kafka"
inputs = ["parse_json"]
bootstrap_servers = "localhost:9092"
topic = "web-traffic-logs"
compression = "gzip"
encoding.codec = "json"

Bước 3: Thiết lập Table trong ClickHouse trên VPS 2

Đầu tiên, tạo bảng chính để lưu trữ dữ liệu log lâu dài với cơ chế MergeTree - một trong những Engine mạnh nhất của ClickHouse:

CREATE TABLE default.web_logs (
    time DateTime,
    remote_addr String,
    request_method String,
    request_uri String,
    status UInt16,
    body_bytes_sent UInt64,
    http_referrer String,
    http_user_agent String,
    request_time Float32
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(time)
ORDER BY (status, request_method, time);

Để tự động hóa việc lấy dữ liệu từ Kafka về ClickHouse, bạn có thể sử dụng Engine = Kafka kết hợp với một Materialized View để chuyển hướng dữ liệu liên tục vào bảng web_logs chính.

5. Tối ưu hóa Hiệu năng và Giám sát Hệ thống

Khi vận hành thực tế trên hạ tầng giới hạn 2 VPS, bạn cần lưu ý các kỹ thuật tối ưu nâng cao sau:

  1. Cấu hình Batch Size phù hợp: ClickHouse hoạt động tốt nhất khi dữ liệu được ghi theo từng khối lớn (Insert in Large Batches) thay vì ghi từng dòng một. Hãy cấu hình Vector hoặc ClickHouse Kafka Engine gom hàng 10,000 đến 50,000 dòng log trước khi thực hiện lệnh ghi xuống đĩa.
  2. Quản lý chính sách lưu trữ (TTL): Ổ cứng VPS có giới hạn. Hãy thiết lập chính sách tự động xóa log cũ (ví dụ: chỉ giữ lại log trong vòng 30 ngày) bằng lệnh: ALTER TABLE web_logs MODIFY TTL time + INTERVAL 30 DAY;.
  3. Tận dụng Index của ClickHouse: Cấu hình khóa ORDER BY dựa trên các trường bạn thường xuyên truy vấn nhất (ví dụ: status, request_uri) để tăng tốc độ tìm kiếm lỗi.

6. Lời kết

Xây dựng một hệ thống phân tích log thời gian thực cho lượng traffic lớn không đồng nghĩa với việc phải tiêu tốn hàng ngàn USD cho hạ tầng đám mây cồng kềnh. Sự kết hợp giữa Vector, Kafka và ClickHouse tạo nên một Pipeline cực kỳ tinh gọn, mạnh mẽ và hiệu quả, giúp bạn làm chủ hoàn toàn dữ liệu của mình ngay cả trên những hạ tầng khiêm tốn như 2 VPS. Hãy bắt tay vào triển khai ngay hôm nay để nâng cao năng lực quản trị hệ thống của doanh nghiệp bạn!

Xây dựng Hệ thống Phân tích Log Thời gian thực cho Hệ thống Web Traffic Cao bằng Vector, Kafka và ClickHouse trên 2 VPS | DPTCloud