SIEM/Log Management Hướng dẫn sử dụng, tạo dashboard, viz trên Opensearch Dashboard

Phần 1: Giới thiệu tổng quan


1.1. OpenSearch Dashboards là gì?


Trong quản trị hệ thống và bảo mật, việc đối mặt với hàng triệu dòng log thô (raw logs) dạng văn bản từ các thiết bị mạng, máy chủ hay ứng dụng là điều diễn ra hàng ngày. Đọc hiểu và tìm kiếm bất thường trong đống dữ liệu khổng lồ đó bằng mắt thường là một nhiệm vụ bất khả thi. Đó là lúc OpenSearch Dashboards phát huy tác dụng.
OpenSearch Dashboards là một giao diện người dùng (User Interface) trực quan, mã nguồn mở, được thiết kế để làm việc trực tiếp với nền tảng OpenSearch. Nó đóng vai trò là "cửa sổ" giúp nhìn vào kho dữ liệu của mình.
Thay vì phải đọc những dòng log JSON thô từ Firewall hay các cảnh báo hệ thống từ vCenter, OpenSearch Dashboards cho phép bạn:
  • Trực quan hóa dữ liệu (Visualize): Biến dữ liệu thô thành các biểu đồ cột, tròn, đường, hoặc các bảng số liệu sinh động.
  • Khám phá dữ liệu (Discover): Tìm kiếm, lọc và phân tích log theo thời gian thực để phục vụ quá trình xử lý sự cố (troubleshooting) hoặc điều tra nguyên nhân gốc rễ.
  • Giám sát tập trung (Monitor): Xây dựng một màn hình giám sát duy nhất cho toàn bộ hệ thống NOC/SOC, giúp đội ngũ vận hành nắm bắt tình trạng hạ tầng chỉ trong nháy mắt.

1.2. Quy trình cơ bản để xây dựng một Dashboard hoàn chỉnh


Để đi từ những dữ liệu thô ban đầu đến một bảng điều khiển giám sát hoàn chỉnh, cần nắm được quy trình 4 bước cơ bản sau:
  • Bước 1: Đẩy dữ liệu vào OpenSearch (Data Collection): Trước khi có thể vẽ biểu đồ, bạn cần có dữ liệu. Dữ liệu này (có thể là Syslog, cảnh báo bảo mật, hoặc các chỉ số giám sát hệ thống mạng) sẽ được thu thập thông qua các công cụ gửi log (như Vector, Logstash, hoặc Wazuh) và lưu trữ thành các "Index" trong cơ sở dữ liệu OpenSearch.
  • Bước 2: Tạo Index Pattern (Định nghĩa nguồn dữ liệu): OpenSearch Dashboards không tự động biết bạn muốn vẽ biểu đồ từ tập dữ liệu nào. Bạn cần tạo một Index Pattern để nói cho Dashboards biết như: Index có tên bắt đầu bằng logs-network-* hoặc alerts-*. Đây là cây cầu nối giữa giao diện hiển thị và cơ sở dữ liệu.
  • Bước 3: Xây dựng Visualization (Tạo từng biểu đồ đơn lẻ): Đây là bước bạn sẽ sử dụng công cụ trực quan hóa (như hình minh họa với các tùy chọn Metric, Pie, Vertical Bar...). Bạn sẽ trả lời các câu hỏi như: Bạn muốn hiển thị thông tin gì? (Ví dụ: Số lượng session VPN, top các IP nguồn, biểu đồ CPU/RAM...). Mỗi biểu đồ tạo ra được gọi là một "Visualization" và sẽ được lưu lại.
  • Bước 4: Tổng hợp thành Dashboard (Lắp ráp bảng điều khiển): Sau khi đã có nhiều Visualization, bạn sẽ tạo một Dashboard mới. Tại đây, bạn chỉ việc kéo - thả, thay đổi kích thước và sắp xếp các Visualization này vào một màn hình duy nhất sao cho khoa học và dễ theo dõi nhất.

Phần 2: Chuẩn bị và Khám phá dữ liệu (Discover)


Trước khi bắt tay vào thiết kế các biểu đồ (Visualization), chúng ta cần thực hiện hai bước chuẩn bị quan trọng: Định nghĩa nguồn dữ liệu cho OpenSearch Dashboards hiểu và kiểm tra xem dữ liệu thô đã được ghi nhận đúng cấu trúc hay chưa.

2.1. Tạo Index Pattern (Định nghĩa nguồn dữ liệu)


OpenSearch lưu trữ dữ liệu dưới dạng các Index theo ngày để tối ưu hiệu năng tìm kiếm. Để vẽ được biểu đồ từ các Index này, bạn cần tạo một Index Pattern đóng vai trò gom nhóm các Index có cùng định dạng lại với nhau.
Các bước thực hiện:
1. Từ giao diện chính của OpenSearch Dashboards, mở menu điều hướng bên trái (biểu tượng 3 dấu gạch ngang) -> Chọn Dashboard Management -> Chọn Index Patterns.
1782202016452.png

2. Nhấn nút Create index pattern.
18174_94a433c40a40b59f3c85905fa074c12c.png

3. Tại ô Index pattern name, nhập tiền tố định danh khớp với các Index hiện có của bạn kèm theo dấu sao (*).
  • Ví dụ: Nếu hệ thống của bạn lưu log theo cấu trúc phân tầng như logs-domain-dataset-customer-site-2026.06.23, hãy nhập vào: logs-domain-dataset-customer-site-*. Dấu * đại diện cho việc khớp với tất cả các Index được sinh ra theo ngày.
  • Hệ thống sẽ hiển thị thông báo bên dưới nếu tìm thấy các Index khớp với Pattern bạn vừa nhập. Nhấn Next step.
1782202201116.png

4. Tại mục Time field, chọn trường thời gian chính của log (thường mặc định là @timestamp). Đây là trường cực kỳ quan trọng để OpenSearch lọc dữ liệu theo các khoảng thời gian (như 15 phút qua, 24 giờ qua).
1782202302433.png

5. Nhấn Create index pattern để hoàn tất.
1782202337619.png

2.2. Sử dụng tính năng Discover để khám phá dữ liệu


Sau khi đã có Index Pattern, bạn cần truy cập vào tab Discover để kiểm tra lại dữ liệu thô. Đây là bước đệm giúp bạn hiểu rõ các trường dữ liệu (fields) của mình đang hiển thị như thế nào trước khi đem chúng đi vẽ biểu đồ.
Các bước thao tác trên giao diện Discover:
1. Mở menu điều hướng bên trái -> Chọn Discover.
1782202823079.png

2. Ở góc trên cùng bên trái, nhấn vào menu thả xuống để chọn đúng Index Pattern vừa tạo ở bước trước.
1782202910736.png

3. Cấu hình bộ lọc thời gian (Time Filter): Ở góc trên cùng bên phải, bạn có thể chọn khoảng thời gian muốn xem log (ví dụ: Last 15 minutes, Last 24 hours, hoặc chọn một khoảng cố định Absolute).
1782202984154.png

4. Thêm các trường cần quan sát vào bảng (Selected Fields):
  • Mặc định, OpenSearch sẽ hiển thị toàn bộ log dưới dạng một khối văn bản hoặc JSON khá rối mắt.
  • Để dễ nhìn hơn, hãy nhìn sang cột Available fields bên trái. Hãy tìm các trường quan trọng (ví dụ: source.ip, destination.port, event.action, hoặc severity).
  • Rê chuột vào trường đó và nhấn nút dấu cộng (+ / Add) để đưa trường đó thành một cột riêng biệt trong bảng hiển thị chính.
1782203218341.png

1782203239663.png

5. Tìm kiếm nhanh bằng KQL (Kibana Query Language):
  • Thanh tìm kiếm ở trên cùng cho phép bạn lọc nhanh dữ liệu bằng cú pháp KQL rất đơn giản theo dạng Trường_dữ_liệu : "Giá_trị".
  • Ví dụ: Nếu bạn muốn lọc các log đăng nhập thất bại, bạn có thể gõ event.action : "failed". Hoặc nếu muốn tìm log từ một IP cụ thể, gõ source.ip : "192.168.1.50". Sau đó nhấn Refresh hoặc Enter.
Thực hiện query các tags.job của window_exporter:
1782203414779.png

Phần 3: Hướng dẫn tạo các Visualization cơ bản


Vào VIsualize -> Create visualization

Metric (Chỉ số tổng quan)


Mục đích: Hiển thị một con số duy nhất.
Ví dụ: Tạo Metric đếm tổng số lượng Log.
1782204308677.png

Chọn index pattern cần giám sát:
1782204477488.png

Vào giao diện chỉnh sửa viz:
1782215302735.png

Khu vực 1: Kết quả trực quan
  • Chức năng: Đây là nơi hiển thị kết quả cuối cùng của viz.
  • Ý nghĩa: Con số này giúp đội ngũ vận hành biết ngay quy mô hoặc trạng thái của hệ thống mà không cần phải phân tích phức tạp.
Khu vực 2: Thời gian
Time Filter (Bộ lọc thời gian): Thấy mục Last 15 minutes. Điều này xác định "khung thời gian" của biểu đồ: Hệ thống đã ghi nhận hơn 2.5 triệu điểm dữ liệu chỉ trong vòng 15 phút vừa qua.
Khu vực 3: Thanh search
Tại đây, bạn có thể nhập thêm các câu lệnh lọc nếu chỉ muốn đếm một loại dữ liệu cụ thể (ví dụ: chỉ đếm các luồng traffic bị rớt).
Khu vực 4: Tên index pattern đang dùng để hiển thị viz
Khu vực 5: Aggregation (Phương thức tính toán)
Đang được chọn là Count. Đây là lệnh yêu cầu hệ thống đếm tổng số dòng dữ liệu (logs/metrics) được sinh ra. Ngoài đếm tổng (Count), bạn có thể xổ danh sách này xuống để chọn tính Trung bình (Average), lớn nhất (Max) hoặc đếm các giá trị không trùng lặp (Unique Count), ...
Custom label (Nhãn tùy chỉnh): Thay vì để chữ "Count" chung chung ở vùng trung tâm, bạn có thể gõ vào đây những cụm từ rõ nghĩa hơn, ví dụ: "Tổng Metric HCM", "Số lượng sự kiện", v.v. để Dashboard nhìn chuyên nghiệp hơn. Khi gõ xong và nhấn Update, nhãn mới sẽ lập tức áp dụng cho con số ở giữa.
Khu vực 6: Phân nhóm dữ liệu (Buckets)
Cách hoạt động: Mặc định, biểu đồ Metric chỉ hiện 1 con số tổng duy nhất. Nhưng nếu bạn nhấn vào nút + Add ở phần Buckets (chọn Split group), bạn có thể bóc tách con số khổng lồ đó thành nhiều con số nhỏ hơn hiển thị cạnh nhau. Ví dụ:
1782215630738.png

Pie Chart (Biểu đồ tròn)


Biểu đồ tròn rất phù hợp để thể hiện tỷ lệ phần trăm hoặc cơ cấu thành phần. Ví dụ: Tỷ lệ metrics lưu vào của các job prometheus.
1782216069835.png

Theo ví dụ: sẽ dùng count để đếm số lượng log mà các job chiếm trong vòng thời gian của time picker; Bucket tách nhiều slices dựa trên tags.job để đếm các logs dựa trên field tags.job.
=> Dựa vào đó tính % và hiển thị dạng pies.

1782216007645.png

Vertical Bar (Biểu đồ cột dọc)


Biểu đồ cột dùng để so sánh các giá trị với nhau. Rất hữu ích để tìm ra "Top" các đối tượng hoặc xem dung lượng, tỷ lệ % các thuộc tính quan trọng, ví dụ: Top 10 IP nguồn tấn công nhiều nhất, hoặc Top các thiết bị sinh nhiều log nhất.
Trường hợp monitor top 5 tỷ lệ CPU cao nhất:
Ở thanh search để lọc ra các logs chứa tỷ lệ cpu. Lệnh query: "name: host_cpu_usage_ratio"
Ở phần Metrics: dùng top hit để lấy giá trị mới nhất của các log đảm bảo real time.
1782216970136.png

Phần Buckets: dùng Split charts để tách các cột giá trị tựa trưng cho giá trị tỷ lệ CPU của từng node.
1782217094663.png

Hạn chế là không có các hàm tính để ví dụ 0.2 * 100 = 20% thì viz không hỗ trợ

Line Chart (Biểu đồ đường)


Line Chart được sử dụng để theo dõi sự biến động của dữ liệu theo trục thời gian (Time Series). Nó giúp bạn phát hiện các mốc thời gian hệ thống bị tăng tải bất thường (spike) hoặc lưu lượng mạng rớt đột ngột.
Ví dụ: giám sát LƯU LƯỢNG MẠNG ĐẦU VÀO TỪNG CỔNG (INBOUND TRAFFIC)
Ở phần thanh search: query lấy mỗi các log liên quan đến traffic cần dùng. Câu query: name: "firewall:port_traffic_in:mbps"
Ở phần metrics: chọn Top hit để lấy giá trị mới nhất trong các khoảng thời gian interval để hiển thị giá trị trên biểu đồ.
1782218114987.png

Ở phần bucket: cần 1 split series để tách các port và 1 X-axis để lấy thời gian cho trục Ox
+ Split series: để chia các port bên bản chú thích.
1782218176284.png

+ X-axis: chọn date histogram và chọn @timestamp để lấy giá trị đo thời gian. Nên chọn interval auto để time range lớn interval không quá nhỏ vì nếu interval nhỏ trong range time lớn thì hiển thị sẽ rất lâu
1782218286686.png

Kết quả:

1782217897200.png

Data Table (Bảng dữ liệu)


Không phải lúc nào biểu đồ cũng bao quát hết thông tin. Data Table giúp bạn tạo ra một bảng liệt kê chi tiết các sự kiện quan trọng để dễ đọc hơn.
Ví dụ tạo bảng mapping IP và device name để quản trị viên dễ đối chiếu:
1782218594668.png
 

Đính kèm

  • 1782202079942.png
    1782202079942.png
    108.2 KB · Lượt xem: 0
  • 1782203397494.png
    1782203397494.png
    273 KB · Lượt xem: 0
  • 1782204428263.png
    1782204428263.png
    56.7 KB · Lượt xem: 0
  • 1782215000558.png
    1782215000558.png
    88.9 KB · Lượt xem: 0
  • 1782215973393.png
    1782215973393.png
    146.9 KB · Lượt xem: 0
  • 1782216882282.png
    1782216882282.png
    117.2 KB · Lượt xem: 0
  • 1782218272519.png
    1782218272519.png
    42 KB · Lượt xem: 0
Back
Top