SIEM/Log Management Tìm hiểu OpenSearch Query DSL, DQL, Vega & PPL (Piped Processing Language)

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.
1777308079533.png

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:
  • 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.
Vấn đề cần giải quyết
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?
II.Triển Khai
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.
Thực hành và ghi chú kỹ thuật

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.
1777308181252.png

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.
JSON
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.

1777308255767.png
1777308255869.png

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.
1777308324524.png

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.
1777308383716.png

Hình 5.1: Cấu hình cảnh báo khi phát hiện log bất thường.
1777308422956.png

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/
 
Back
Top