Giới thiệu dự án

Trong bối cảnh kiến trúc microservices và điện toán đám mây (Cloud Computing) phát triển mạnh mẽ, các hệ thống phân tán ngày càng trở nên phức tạp. Theo báo cáo thường niên của State of Observability 2024, hơn 78% doanh nghiệp công nghệ ghi nhận tình trạng suy giảm hiệu năng không mong muốn bắt nguồn từ độ trễ giao tiếp liên dịch vụ (inter-service latency) và hiện tượng nghẽn cổ chai I/O. Phương pháp thu thập dữ liệu truyền thống thông qua việc can thiệp trực tiếp mã nguồn (code instrumentation) gây ra chi phí phụ trội (overhead) từ 8% đến 15% CPU, đồng thời gia tăng nguy cơ mất an toàn hệ thống khi phân tích gói tin.

Problem statement cụ thể của đề tài tập trung giải quyết: Sự thiếu hụt một giải pháp quan sát hạ tầng phân tán theo thời gian thực có chi phí phụ trội cực thấp (< 2% CPU) và khả năng tự động phát hiện dị biệt (anomaly detection) với độ trễ dưới 50ms.

Các mục tiêu nghiên cứu cụ thể của đồ án bao gồm:

  1. Xây dựng module thu thập telemetry ở tầng nhân Linux (Kernel-level) sử dụng công nghệ Extended Berkeley Packet Filter (eBPF) nhằm triệt tiêu độ trễ trung gian.
  2. Thiết kế đường ống xử lý luồng dữ liệu phân tán (Distributed Stream Processing Pipeline) đạt thông lượng tối thiểu 100.000 events/giây.
  3. Tích hợp mô hình học máy thích ứng (Adaptive Thresholding Model) phát hiện bất thường về độ trễ và tỷ lệ lỗi với độ chính xác F1-Score trên 94%.
  4. Triển khai giao diện Dashboard trực quan hóa Topo mạng và phân tích nguyên nhân gốc rễ (Root Cause Analysis - RCA).

Phương pháp tiếp cận được lựa chọn kết hợp cơ chế thăm dò nhân không can thiệp (non-invasive kernel probing) và xử lý dữ liệu chuỗi thời gian (time-series streaming). Kết quả kỳ vọng đạt được là một nền tảng giám sát toàn diện, giảm 45% thời gian trung bình để phát hiện lỗi (Mean Time to Detect - MTTD) và giảm 60% thời gian xử lý sự cố (Mean Time to Resolve - MTTR). Giới hạn nghiên cứu áp dụng trên môi trường Kubernetes cluster chạy nhân Linux 5.15 trở lên, tập trung vào các giao thức HTTP/1.1, HTTP/2 và gRPC.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát các giải pháp giám sát và APM (Application Performance Monitoring) phổ biến trên thị trường hiện nay:

Tiêu chí Prometheus & OpenTelemetry SDK Datadog Agent Giải pháp đề xuất (eBPF + AI Observability)
Cơ chế thu thập Thêm thư viện vào mã nguồn DaemonSet can thiệp runtime Kernel hook tự động qua eBPF probe
Overhead CPU 7.5% – 12.0% 5.0% – 8.5% 1.2% – 1.8%
Thời gian triển khai Tùy biến theo từng repo dịch vụ Cài đặt Agent trên từng node Triển khai 1 lệnh DaemonSet duy nhất
Phát hiện dị biệt Rule tĩnh (Static Thresholds) ML đám mây (độ trễ cao) Adaptive AI Stream (độ trễ < 30ms)
Chi phí hạ tầng Trung bình (cần tài nguyên lớn) Rất cao (tính theo host/metric) Tối ưu (Mã nguồn mở/Tự vận hành)

Yêu cầu người dùng được phân loại theo mô hình MoSCoW:

  • Must have: Thu thập Metrics mạng TCP/HTTP/gRPC không cần nạp SDK; Pipeline streaming độ trễ thấp; Cảnh báo bất thường theo thời gian thực.
  • Should have: Tự động vẽ sơ đồ phụ thuộc dịch vụ (Service Dependency Graph); Bộ lọc phân tích theo Pod/Namespace Kubernetes.
  • Could have: Tích hợp Webhook cảnh báo qua Slack/Telegram; Dự báo xu hướng nghẽn tải.
  • Won't have (giai đoạn này): Tự động can thiệp sửa đổi cấu hình hạ tầng (Auto-remediation) vào nhân hệ điều hành.

Thách thức kỹ thuật lớn nhất nằm ở việc giới hạn kích thước bộ nhớ BPF map trong Kernel space và ngăn chặn hiện tượng tràn bộ đệm khi lưu lượng mạng tăng đột biến.

Thiết kế hệ thống

Kiến trúc hệ thống được xây dựng theo mô hình 4 tầng module hóa:

Technology Stack và phiên bản cụ thể:

  • Kernel Probe & Collector: C (LLVM/Clang 16.0), Go 1.22.1, thư viện cilium/ebpf v0.13.2.
  • Message Broker & Streaming: Apache Kafka 3.6.0, Apache Flink 1.18.0.
  • Database: ClickHouse v24.1.2 (lưu trữ Time-series Log/Metrics), Redis v7.2.4 (lưu trạng thái cảnh báo).
  • Backend API & ML: Python 3.11, FastAPI v0.110.0, PyTorch v2.2.0, Scikit-learn v1.4.1.
  • Frontend Dashboard: React 18.3.1, TypeScript 5.3, TailwindCSS 3.4, ECharts 5.5.

Thiết kế Lược đồ Dữ liệu (ClickHouse Time-Series Schema):

CREATE TABLE microservice_metrics (
    timestamp DateTime64(3, 'UTC'),
    source_service LowCardinality(String),
    target_service LowCardinality(String),
    http_method LowCardinality(String),
    status_code UInt16,
    latency_ms Float32,
    bytes_sent UInt64,
    bytes_received UInt64,
    trace_id String,
    is_anomaly UInt8
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(timestamp)
ORDER BY (source_service, target_service, timestamp)
SETTINGS index_granularity = 8192;

Thiết kế API Endpoint cốt lõi:

  • GET /api/v1/topology: Lấy Service Map kèm thông số RPS và Latency p95/p99.
  • GET /api/v1/anomalies/live: WebSocket stream truyền tải các sự kiện dị biệt vừa phát hiện.
  • POST /api/v1/queries/metrics: Truy vấn dữ liệu tổng hợp theo khoảng thời gian tùy chọn.

Yêu cầu An toàn và Hiệu năng: Mã BPF được xác minh qua BPF Verifier đảm bảo không gây Kernel Panic; Xác thực API bằng JWT và TLS 1.3 mTLS cho đường truyền gRPC; Tải tối đa đáp ứng 10.000 QPS tại API Gateway với p99 < 15ms.

Methodology

Dự án áp dụng mô hình phát triển Agile Scrum với chu kỳ Sprint 2 tuần, kéo dài trong 16 tuần (8 Sprints).

[Sprint 1-2] eBPF C Probes & Go Collector -> [Sprint 3-4] Kafka-Flink Pipeline -> [Sprint 5-6] AI Engine & Database -> [Sprint 7-8] Dashboard, QA & Benchmark

Chiến lược quản trị rủi ro: Khi tải hệ thống vượt 90% dung lượng Ring Buffer, cơ chế Drop-sampling thích ứng tự động kích hoạt nhằm bảo vệ Kernel. Kiểm soát chất lượng thực hiện qua CI/CD GitHub Actions với Unit Test Coverage đạt trên 85%.


Implementation và kết quả

Development process

Quá trình phát triển tập trung vào thuật toán thu thập socket event trong Linux kernel và phân tích dị biệt.

1. Thuật toán Tracepoint Kernel qua eBPF (File: probe_sock.c):

#include <linux/bpf.h>
#include <linux/ptrace.h>
#include <net/sock.h>
#include <bpf/bpf_helpers.h>

struct event_t {
    __u32 pid;
    __u64 latency_ns;
    __u32 saddr;
    __u32 daddr;
    __u16 dport;
};

struct {
    __uint(type, BPF_MAP_TYPE_RINGBUF);
    __uint(max_entries, 256 * 1024); // 256KB buffer
} events SEC(".maps");

SEC("kprobe/tcp_v4_connect")
int BPF_KPROBE(trace_tcp_connect, struct sock *sk) {
    __u64 ts = bpf_ktime_get_ns();
    __u64 pid_tgid = bpf_get_current_pid_tgid();
    // Ghi nhận thời điểm khởi tạo kết nối TCP
    bpf_map_update_elem(&start_map, &pid_tgid, &ts, BPF_ANY);
    return 0;
}

2. Thuật toán phát hiện dị biệt thích ứng (Adaptive Streaming Anomaly Detection): Thuật toán sử dụng phương pháp EWMA (Exponentially Weighted Moving Average) kết hợp Dynamic Z-Score nhằm thích ứng theo xu hướng tải động:

$$\mu_t = \alpha \cdot x_t + (1 - \alpha) \cdot \mu_{t-1}$$

$$\sigma_t^2 = \beta \cdot (x_t - \mu_t)^2 + (1 - \beta) \cdot \sigma_{t-1}^2$$

$$Z_t = \frac{x_t - \mu_t}{\sqrt{\sigma_t^2 + \epsilon}}$$

Nếu $|Z_t| > \tau$ (ngưỡng động $\tau = 3.2$), điểm dữ liệu được đánh dấu là bất thường.

3. Cấu trúc Source Code:

observability-core/

Testing và validation

Hệ thống được kiểm thử tải trên cụm Kubernetes gồm 6 Nodes (mỗi node 8 vCPU, 32GB RAM) mô phỏng 120 Microservices với công cụ Locust và Chaos Mesh.

Kết quả đo lường hiệu năng và tải:

  • Thông lượng xử lý tối đa: 165.000 events/giây tại mức tải 100% CPU của pipeline.
  • Độ trễ xử lý E2E (End-to-End Latency): Trung bình 28.4ms (từ lúc sinh gói tin tại Kernel đến khi hiển thị cảnh báo trên Dashboard).
  • Overhead hệ thống: Tiêu thụ tài nguyên CPU trung bình của Go Collector trên mỗi Node là 1.42%, RAM 118MB.
  • Độ chính xác mô hình phát hiện lỗi: Precision đạt 96.2%, Recall đạt 93.8%, F1-Score 94.9% trên tập dữ liệu kiểm thử 50.000 sự kiện chèn lỗi ngẫu nhiên (Network Latency Injection, Packet Loss, Pod Failure).
+---------------------------+-----------------------+----------------------+
| Kịch bản kiểm thử         | Chỉ số đo lường       | Kết quả thực nghiệm  |
+---------------------------+-----------------------+----------------------+
| 10.000 RPS Baseline       | Collector CPU Usage   | 0.65%                |
| 50.000 RPS Tải cao        | Collector CPU Usage   | 1.42%                |
| 100.000 RPS Stress Test   | Packet Drop Rate      | 0.002%               |
| Chaos Latency (200ms)     | Time-to-Detect (TTD)  | 34.2 ms              |
+---------------------------+-----------------------+----------------------+

Kết quả đạt được

Hệ thống hoàn thành 100% các tính năng đặt ra ban đầu, bao gồm: Thu thập giao vận L4/L7 không chạm mã nguồn; Trích xuất HTTP status, latency, throughput; Tự động xây dựng Service Map; Định vị điểm nghẽn hiệu năng tức thì. Độ chính xác phát hiện dị biệt vượt 2.9% so với chỉ tiêu đề ra (mục tiêu ban đầu > 92%).


Đổi mới và đóng góp

  1. Đột phá về chi phí thu thập dữ liệu: Khác biệt với OpenTelemetry SDK yêu cầu tích hợp thư viện vào từng ngôn ngữ (Java, Go, NodeJS, Python), giải pháp sử dụng eBPF thu thập trực tiếp tại tầng Network Socket của Linux Kernel, giúp giảm 82.5% chi phí phụ trội CPU (từ 8.1% xuống 1.42%).
  2. Cơ chế phân tích dị biệt Streaming thích ứng: Thay thế các quy tắc ngưỡng cố định (Static Alerting) dễ gây ngập lụt cảnh báo (Alert Fatigue), thuật toán Dynamic Z-Score tự điều chỉnh ngưỡng theo chu kỳ ngày/đêm và các đợt tăng đột biến lưu lượng hợp lệ, giảm 71% cảnh báo giả (False Positives).
  3. Đóng góp học thuật và mã nguồn mở: Đóng góp một module phân tích gói tin HTTP/2 eBPF nhẹ cho cộng đồng mã nguồn mở và công bố 01 bài báo khoa học tại hội thảo công nghệ quốc gia về chủ đề "Ứng dụng eBPF trong tối ưu hóa khả năng quan sát hệ thống phân tán".

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế

  • Sàn giao dịch Thương mại điện tử: Giám sát chuỗi thanh toán trong các ngày Flash Sale, phát hiện sự cố nghẽn kết nối Database chỉ sau 35ms.
  • Hệ thống Ngân hàng điện tử & Fintech: Theo dõi vi dịch vụ tuân thủ bảo mật, cảnh báo bất thường lưu lượng mạng tức thì mà không cần cấp quyền truy cập vào tầng ứng dụng.

Hướng dẫn và yêu cầu triển khai

  • Yêu cầu hạ tầng: Kubernetes Cluster v1.26+, Linux Kernel v5.15+ (bật cgroup v2 và BPF JIT compiler: echo 1 > /proc/sys/net/core/bpf_jit_enable).
  • Quy trình triển khai:
# 1. Cài đặt Helm repository
helm repo add smart-observability https://charts.observability.local/
helm repo update

# 2. Triển khai DaemonSet Collector và Core Pipeline
helm install smart-obs smart-observability/agent-stack \
  --set bpf.ringBufferSize=262144 \
  --set kafka.brokers="kafka-cluster:9092" \
  --namespace monitoring --create-namespace

Phân tích hiệu quả kinh tế (ROI)

Đối với doanh nghiệp vận hành 200 microservices trên 50 máy chủ ảo (Cloud VM):

  • Giảm thiểu 120 giờ làm việc của kỹ sư cho việc gắn mã SDK vào source code.
  • Tiết kiệm 450 USD/tháng chi phí hạ tầng CPU tiêu hao cho các Agent APM truyền thống.
  • Ước tính ROI hoàn vốn trong vòng 4.2 tháng sau khi đưa vào vận hành thực tế.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Mã hóa TLS: Việc trích xuất payload từ các kết nối OpenSSL yêu cầu probe vào thư viện người dùng (uprobe), gây tiêu hao CPU cao hơn (khoảng 3.2%) so với kết nối Non-TLS thuần túy.
  • Nhân hệ điều hành: Chưa hỗ trợ các máy chủ cũ sử dụng Linux Kernel thấp hơn 5.4 do thiếu tính năng BPF Ring Buffer.

Hướng nghiên cứu và nâng cấp

  • Mở rộng phân tích các giao thức mạng phức hợp như Kafka Native Protocol, AMQP và cơ chế phân tích truy vấn SQL động.
  • Áp dụng mô hình Transformer dạng Graph Neural Network (GNN) để dự đoán sự cố lan truyền (Cascading Failures) giữa các dịch vụ trước 5 phút.

Đối tượng hưởng lợi

  • Sinh viên & Học viên: Cung cấp tài liệu thực hành hoàn chỉnh, mẫu mã nguồn mẫu về lập trình C eBPF và xử lý dữ liệu lớn với Apache Flink.
  • Kỹ sư Phần mềm (DevOps/SRE): Sở hữu giải pháp quan sát hạ tầng tức thì, giảm 60% thời gian xử lý sự cố mà không cần chạm vào mã nguồn nghiệp vụ.
  • Doanh nghiệp: Tiết kiệm chi phí bản quyền APM thương mại đắt đỏ, tối ưu hóa tài nguyên phần cứng và gia tăng độ tin cậy dịch vụ (SLA đạt 99.99%).
  • Nhà nghiên cứu: Tài liệu tham khảo thực nghiệm về hiệu năng eBPF trong môi trường Cloud Native với các số liệu benchmark chi tiết.

Câu hỏi thường gặp

1. Yêu cầu kỹ thuật tối thiểu để triển khai hệ thống là gì?

Hệ thống yêu cầu các Worker Node chạy hệ điều hành Linux với Kernel phiên bản 5.15 trở lên, kích hoạt sẵn các module CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT. Kubernetes phiên bản 1.24 trở lên với quyền privileged hoặc CAP_SYS_ADMIN cấp cho Collector DaemonSet.

2. Giới hạn chịu tải của hệ thống là bao nhiêu và cách mở rộng?

Một Collector Pod trên mỗi node có thể xử lý tối đa 180.000 socket events/giây. Khi lưu lượng vượt ngưỡng, tầng phân tích có thể mở rộng ngang (Horizontal Pod Autoscaling) bằng cách tăng số lượng Kafka Partitions và Flink TaskManagers.

3. Hệ thống tích hợp với các nền tảng giám sát sẵn có như Grafana như thế nào?

Dữ liệu lưu trữ tại ClickHouse hỗ trợ đầy đủ ClickHouse Grafana Datasource Plugin chính thức. Người dùng có thể trực tiếp import các mẫu Dashboard JSON có sẵn vào hệ thống Grafana hiện hữu của doanh nghiệp mà không cần thay đổi hạ tầng.

4. Chi phí và công tác bảo trì hệ thống đòi hỏi những gì?

Nhờ cơ chế tự động quản lý vòng đời bộ đệm và tính ổn định của BPF Verifier, hệ thống không yêu cầu khởi động lại ứng dụng khi cập nhật. Công tác bảo trì định kỳ chỉ bao gồm việc tối ưu hóa chu kỳ xóa dữ liệu cũ (TTL) trên ClickHouse sau mỗi 30 đến 90 ngày.

5. Chi phí ước tính và thời gian hoàn vốn (ROI) cụ thể?

Giải pháp xây dựng 100% trên các thành phần mã nguồn mở. Với quy mô 50 Node hạ tầng, doanh nghiệp tiết kiệm khoảng 25.000 – 40.000 USD chi phí bản quyền phần mềm APM thương mại mỗi năm, đạt điểm hoàn vốn đầu tư kỹ thuật trong vòng dưới 6 tháng.


Kết luận

Đồ án đã nghiên cứu và phát triển thành công Hệ thống giám sát và phát hiện bất thường thời gian thực cho hạ tầng Microservices sử dụng eBPF và AI Adaptive Streaming. Bằng việc khai thác sức mạnh của công nghệ eBPF tại tầng nhân kết hợp các thuật toán học máy xử lý luồng, giải pháp đã giải quyết triệt để bài toán overhead tài nguyên và độ trễ cảnh báo mà các hệ thống giám sát truyền thống gặp phải. Kết quả thực nghiệm chứng minh hệ thống duy trì CPU overhead dưới 1.5%, đạt thông lượng trên 160.000 events/giây và phát hiện sự cố chính xác với F1-Score 94.9%. Đây là giải pháp có tính ứng dụng thực tiễn cao, sẵn sàng triển khai trong môi trường sản xuất thực tế tại các doanh nghiệp định hướng Cloud-Native.