I. Giới thiệu tổng quan.
Sau công đoạn đẩy log, việc khai thác dữ liệu thông qua các ngôn ngữ truy vấn là kỹ năng cốt lõi. Bài thực hành này tập trung vào việc áp dụng các cú pháp Query DSL, DQL, PPL để lọc log hệ thống và trực quan hóa các dữ liệu phức tạp bằng Vega trên Dashboard.
Hình 1: Luồng xử lý log từ thu thập đến hiển thị trên Dashboard.Thành phần thực hiện:
Phân biệt và làm chủ các tầng truy vấn:
Giải pháp kỹ thuật
Trong quá trình thực hiện, mình nhận thấy OpenSearch cung cấp 4 cấp độ truy vấn khác nhau:
GET /wazuh-alerts/_search
{
"query": {
"bool": {
"must": [{ "match": { "rule.description": "failed" } }],
"filter": [
{ "range": { "rule.level": { "gte": 10 } } },
{ "term": { "data.srcip": "192.168.1.1" } }
]
}
}
}
Lưu ý: Dùng filter thay vì must cho các trường IP hay ID sẽ giúp OpenSearch chạy nhanh hơn vì nó không cần tính toán số điểm (score) cho kết quả.
Ví dụ: source=web-logs | where status > 400 | stats count() by clientip Cách này mình hay dùng để thống kê nhanh các IP đang tấn công vào hệ thống ngay tại giao diện Discover.
Hình 3: Truy vấn PPL để lọc và thống kê log theo điều kiện.
Hình 4: Biểu đồ Heatmap tùy biến bằng Vega-Lite.
Tài liệu tham khảo:
Query DSL Reference: https://opensearch.org/docs/latest/query-dsl/
PPL Manual: https://opensearch.org/docs/latest/observing-logs/ppl/index/
Vega-Lite Docs: https://vega.github.io/vega-lite/docs/
DQL Guide: https://opensearch.org/docs/latest/dashboards/dql/
Sau công đoạn đẩy log, việc khai thác dữ liệu thông qua các ngôn ngữ truy vấn là kỹ năng cốt lõi. Bài thực hành này tập trung vào việc áp dụng các cú pháp Query DSL, DQL, PPL để lọc log hệ thống và trực quan hóa các dữ liệu phức tạp bằng Vega trên Dashboard.
Hình 1: Luồng xử lý log từ thu thập đến hiển thị trên Dashboard.
- Môi trường: OpenSearch Dashboards(Console/ Dev Tools).
- Dữ liệu mẫu: Log truy cập Web, Log bảo mật từ Wazuh.
Phân biệt và làm chủ các tầng truy vấn:
- Khi nào cần dùng JSON (Query DSL) cho các tác vụ tự động như Alerting?
- Khi nào dùng PPL (Piped) để xử lý nhanh kiểu Linux và giải quyết bài toán vẽ các biểu đồ tùy biến cao mà Dashboard mặc định không làm được qua Vega?
Giải pháp kỹ thuật
Trong quá trình thực hiện, mình nhận thấy OpenSearch cung cấp 4 cấp độ truy vấn khác nhau:
- DQL (Dashboards Query Language): Dùng để lọc nhanh trên thanh tìm kiếm.
- Query DSL (Domain Specific Language): Ngôn ngữ chuẩn của hệ thống, dựa trên cấu trúc JSON.
- PPL (Piped Processing Language): Lối tư duy theo đường ống.
- Vega: Công cụ vẽ biểu đồ chuyên sâu bằng mã khai báo.
1. Query DSL - Sức mạnh cốt lõi
Đây là phần khó nhất nhưng quan trọng nhất để tạo Alert.
Hình 2: Thực thi Query DSL để lọc log bảo mật trong Dev Tools.
- Cú pháp bool kết hợp: Mình thường dùng cấu trúc này để lọc log SSH bị fail.
GET /wazuh-alerts/_search
{
"query": {
"bool": {
"must": [{ "match": { "rule.description": "failed" } }],
"filter": [
{ "range": { "rule.level": { "gte": 10 } } },
{ "term": { "data.srcip": "192.168.1.1" } }
]
}
}
}
Lưu ý: Dùng filter thay vì must cho các trường IP hay ID sẽ giúp OpenSearch chạy nhanh hơn vì nó không cần tính toán số điểm (score) cho kết quả.
2. PPL (Piped Processing Language) - Tiện lợi cho dân Sysadmin
PPL cực kỳ dễ dùng nếu bạn đã quen với lệnh grep hay sort trong Linux.Ví dụ: source=web-logs | where status > 400 | stats count() by clientip Cách này mình hay dùng để thống kê nhanh các IP đang tấn công vào hệ thống ngay tại giao diện Discover.
Hình 3: Truy vấn PPL để lọc và thống kê log theo điều kiện.
3. Trực quan hóa với Vega
Vega không dành cho số đông vì nó khá phức tạp. Tuy nhiên, nếu Dashboard mặc định không thể vẽ được bản đồ nhiệt (Heatmap) hoặc các biểu đồ tương tác đặc thù, mình buộc phải dùng Vega-Lite để định nghĩa cấu trúc đồ họa.
Hình 4: Biểu đồ Heatmap tùy biến bằng Vega-Lite.
4. Ứng dụng tạo Alert
Mình nhúng các câu Query DSL vào mục Monitor trong OpenSearch. Khi câu query trả về kết quả vượt ngưỡng (Threshold), hệ thống sẽ kích hoạt trigger gửi thông báo về Telegram.
Hình 5.1: Cấu hình cảnh báo khi phát hiện log bất thường.
Hình 5.2: Cấu hình cảnh báo khi phát hiện log bất thường.
Hình 5.2: Cấu hình cảnh báo khi phát hiện log bất thường.
III. Kết Luận
Qua bài lab, mình rút ra được kinh nghiệm: DQL chỉ dùng để tìm kiếm nhanh, PPL cực mạnh khi cần thống kê dữ liệu tức thời, còn Query DSL là bắt buộc nếu muốn cấu hình Alerting chuyên sâu. Riêng Vega là một kỹ năng cộng thêm rất đáng giá nếu bạn muốn Dashboard của mình trông chuyên nghiệp và khác biệt.Tài liệu tham khảo:
Query DSL Reference: https://opensearch.org/docs/latest/query-dsl/
PPL Manual: https://opensearch.org/docs/latest/observing-logs/ppl/index/
Vega-Lite Docs: https://vega.github.io/vega-lite/docs/
DQL Guide: https://opensearch.org/docs/latest/dashboards/dql/