I. Giới thiệu tổng quan
Trong kiến trúc giám sát tập trung hiện đại, việc xây dựng một "đường ống" dẫn dữ liệu (Data Pipeline) ổn định là ưu tiên hàng đầu. Nội dung bài thực hành này tập trung vào việc nghiên cứu các giao thức truyền tin truyền thống như Syslog, kết hợp với các bộ thu gom hiện đại (Beats, Fluent Bit, Vector) nhằm đồng bộ hóa log từ đa nguồn về OpenSearch.
Hình 1: Luồng thu thập log tổng thể về OpenSearch.Thành phần thực hiện:
Thực tế triển khai thường nảy sinh xung đột khi dữ liệu nguồn không đồng nhất về định dạng (Raw log, JSON, Syslog). Bài viết sẽ giải quyết bài toán:
1. Giải pháp kỹ thuật
Mình chia quy trình ingest log thành 4 nhóm chiến thuật chính dựa trên đặc thù tài nguyên:
1.1. Giao thức Syslog (UDP/TCP 514)
Đây là cách tiếp cận "không cần agent" (agent-less) cho các thiết bị cũ.
Hình 2: Thu thập log qua Syslog (UDP/TCP 514).1.2. Triển khai Agents dòng Beats
Dòng Beats (Elastic) vẫn là tiêu chuẩn vàng về độ ổn định.
Cấu hình "xương sống" trong filebeat.yml:
# Định nghĩa đầu ra trực tiếp về OpenSearch
output.elasticsearch:
hosts: ["https://10.21.1.100:9200"] # Trỏ về IP Cluster của bạn
index: "system-audit-%{+yyyy.MM.dd}"
username: "admin"
password: "your_password"
ssl.verification_mode: "none"
Hình 3: Filebeat/Winlogbeat thu thập và gửi log.
1.3. Fluent Bit & Vector - Bài toán hiệu năng
Nếu server của bạn "hẻo" (RAM dưới 2GB), đừng dùng Beats. Hãy chuyển sang Fluent Bit. Nó nhẹ hơn đáng kể và hỗ trợ tốt các plugin đầu ra cho OpenSearch. Vector lại là lựa chọn tuyệt vời nếu bạn muốn lọc dữ liệu (Filter) ngay tại nguồn để tiết kiệm dung lượng lưu trữ cho ổ cứng.
Hình 4: Pipeline log tối ưu với Fluent Bit/Vector.
Hình 5: Đẩy log vào OpenSearch qua REST API.
Ví dụ lệnh đẩy log bằng CURL:
Bash
# Đẩy log thủ công để kiểm tra kết nối Indexer
curl -XPOST "https://localhost:9200/web-access/_doc/" -u admin:admin --insecure -H "Content-Type: application/json" -d '
{
"timestamp": "2026-04-26",
"event_type": "ssh_login_failed",
"source_ip": "192.168.10.5"
}'
Hình 6: Hiển thị log trên OpenSearch Dashboards.
Trong kiến trúc giám sát tập trung hiện đại, việc xây dựng một "đường ống" dẫn dữ liệu (Data Pipeline) ổn định là ưu tiên hàng đầu. Nội dung bài thực hành này tập trung vào việc nghiên cứu các giao thức truyền tin truyền thống như Syslog, kết hợp với các bộ thu gom hiện đại (Beats, Fluent Bit, Vector) nhằm đồng bộ hóa log từ đa nguồn về OpenSearch.
Hình 1: Luồng thu thập log tổng thể về OpenSearch.
- Hệ thống OpenSearch & Dashboards( triển khai trên Docker).
- Các Agent vận chuyển dữ liệu: Filebeat, Winlogbeat, Fluent Bit, Wazuh Agent.
- Môi trường nguồn: Ubuntu Server, Windows Event Logs và thiết bị mạng giả lập.
Thực tế triển khai thường nảy sinh xung đột khi dữ liệu nguồn không đồng nhất về định dạng (Raw log, JSON, Syslog). Bài viết sẽ giải quyết bài toán:
- Lựa chọn giao thức UDP hay TCP cho port 514 để cân bằng giữa tốc độ và độ tin cậy?
- Làm thế nào để đẩy log từ các ứng dụng tụ phát triển thông qua REST API mà không làm quá tải Indexer?
1. Giải pháp kỹ thuật
Mình chia quy trình ingest log thành 4 nhóm chiến thuật chính dựa trên đặc thù tài nguyên:
- Tầng hạ tầng: Thu nhập Syslog từ Router/Firewall qua port 514.
- Tầng Host OS: Cài đạt Filebeat để "tail" log file trên Linux và Winlogbeat để hốt Event Logs trên Windows.
- Tầng tối ưu hóa: Sử dụng Fluent Bit (C) hoặc Vector (Rust) cho các môi trường có RAM thấp.
- Tầng bảo mật: Tận dụng Wazuh để thu thập log an ninh chuyên sâu.
1.1. Giao thức Syslog (UDP/TCP 514)
Đây là cách tiếp cận "không cần agent" (agent-less) cho các thiết bị cũ.
- Lưu ý thực tế: Khi cấu hình, mình khuyên các bạn nên ưu tiên TCP nếu băng thông mạng cho phép. UDP rất nhanh nhưng trong môi trường lab có độ trễ cao, hiện tượng mất gói (packet loss) sẽ khiến log bị đứt đoạn, cực kỳ khó debug.
Hình 2: Thu thập log qua Syslog (UDP/TCP 514).
Dòng Beats (Elastic) vẫn là tiêu chuẩn vàng về độ ổn định.
Cấu hình "xương sống" trong filebeat.yml:
# Định nghĩa đầu ra trực tiếp về OpenSearch
output.elasticsearch:
hosts: ["https://10.21.1.100:9200"] # Trỏ về IP Cluster của bạn
index: "system-audit-%{+yyyy.MM.dd}"
username: "admin"
password: "your_password"
ssl.verification_mode: "none"
Hình 3: Filebeat/Winlogbeat thu thập và gửi log.
1.3. Fluent Bit & Vector - Bài toán hiệu năng
Nếu server của bạn "hẻo" (RAM dưới 2GB), đừng dùng Beats. Hãy chuyển sang Fluent Bit. Nó nhẹ hơn đáng kể và hỗ trợ tốt các plugin đầu ra cho OpenSearch. Vector lại là lựa chọn tuyệt vời nếu bạn muốn lọc dữ liệu (Filter) ngay tại nguồn để tiết kiệm dung lượng lưu trữ cho ổ cứng.
Hình 4: Pipeline log tối ưu với Fluent Bit/Vector.
1.4. Kỹ thuật Ingest qua REST API
Đây là "vũ khí" cho các bạn Dev. OpenSearch cung cấp Endpoint _bulk cực kỳ mạnh mẽ để đẩy log hàng loạt.
Hình 5: Đẩy log vào OpenSearch qua REST API.
Ví dụ lệnh đẩy log bằng CURL:
Bash
# Đẩy log thủ công để kiểm tra kết nối Indexer
curl -XPOST "https://localhost:9200/web-access/_doc/" -u admin:admin --insecure -H "Content-Type: application/json" -d '
{
"timestamp": "2026-04-26",
"event_type": "ssh_login_failed",
"source_ip": "192.168.10.5"
}'
AI Roleplay - Góc nhìn chuyên gia
Chuyên gia Security Operations: "Một lỗi chết người mà các bạn mới làm lab hay mắc phải là đẩy log 'thô' (raw) mà không qua xử lý. Hãy luôn định nghĩa Mapping trước khi đẩy dữ liệu. Nếu bạn gán sai kiểu dữ liệu cho field IP thành text, bạn sẽ không bao giờ thực hiện được các thao tác tìm kiếm theo dải mạng (CIDR) trên Dashboard đâu!"III. Kết Luận
Làm chủ được luồng dữ liệu (Data Ingestion) là bạn đã nắm giữ 50% sức mạnh của hệ thống giám sát. Qua bài lab, ta thấy Beats phù hợp cho sự ổn định lâu dài, Fluent Bit dành cho các hệ thống tối ưu tài nguyên, còn REST API là cầu nối linh hoạt cho mọi loại ứng dụng. Bài học lớn nhất là phải luôn cân nhắc giữa độ trễ của mạng và tính toàn vẹn của log khi chọn giao thức truyền tin.
Hình 6: Hiển thị log trên OpenSearch Dashboards.
Tài Liệu Tham Khảo
- OpenSearch Documentation: https://opensearch.org/docs/latest/
- Elastic Beats Guide: https://www.elastic.co/guide/en/beats/filebeat/current/index.html
- Fluent Bit Manual: https://docs.fluentbit.io/manual/
- Wazuh Indexer Integration: https://documentation.wazuh.com/current/
- Vector Data Pipelines: https://vector.dev/docs/