RUNTIME FIELD TRONG ELASTICSEARCH & KIBANA


Giới thiệu và cách hoạt động

Runtime Field là một kiểu field ảo được định nghĩa trong Kibana (Data View). Giá trị của nó không được lưu thành một field vật lý mới trong Elasticsearch mà được tính toán động mỗi khi truy vấn cần sử dụng.

1. Runtime Field là gì?

·       Không được lưu vào index theo dạng field vật lý mới nên không làm tăng dung lượng index theo cách field được index thông thường.

·       Được tính toán bằng script, thường là Painless, khi truy vấn.

·       Có thể dùng để trích xuất, tính toán hoặc biến đổi dữ liệu từ các field có sẵn, ví dụ lấy src_ip từ field message.

·       Tạo nhanh và không cần reindex dữ liệu cũ.

·       Phù hợp khi cần phân tích dữ liệu tạm thời, điều tra log hoặc thử nghiệm logic parse.

2. Cách hoạt động của Runtime Field

Runtime Field không làm thay đổi log gốc. Kibana lưu định nghĩa Runtime Field trong Data View, sau đó khi có truy vấn sử dụng field này, Elasticsearch thực thi script để tính giá trị tại thời điểm truy vấn.

1.     Log hoặc dữ liệu từ thiết bị được đưa vào Logstash hoặc một pipeline ingest.

2.     Logstash đưa document vào Elasticsearch index.

3.     Kibana sử dụng Data View để truy cập index dữ liệu.

4.     Runtime Field, ví dụ src_ip, được định nghĩa trong Data View.

5.     Khi truy vấn cần src_ip, Elasticsearch chạy script và tính giá trị.

6.     Giá trị tính được được trả về cho Discover, Lens hoặc visualization; giá trị này không được ghi ngược vào _source.

3. Ví dụ thực tế – Sophos Firewall Log

Một log Sophos có thể chứa toàn bộ nội dung trong field message như sau:

<14>device_name="HCMHQFW005" ... fw_rule_id="21" fw_rule_name="Monitor to internet" ... src_ip="192.168.10.19" dst_ip="8.8.8.8" protocol="UDP" dst_port=53 ...

Trong trường hợp src_ip chưa được parse thành field riêng, Runtime Field có thể đọc message và tách giá trị 192.168.10.19. Sau đó có thể lọc rule Monitor to internet và thống kê các Source IP đã chạy qua rule.

| |
| |

4. Ưu điểm và nhược điểm

| |
| |

5. Cách tạo Runtime Field trong Kibana

  1.     Vào Stack Management → Data Views.
  2.     Chọn Data View cần sử dụng, ví dụ Sophos với index pattern sophos*.

  1.     Bấm Add field → Create field.

  1.     Đặt tên field, ví dụ src_ip; chọn Type là Keyword.
  2.     Bật Set value và nhập Painless Script để trích xuất giá trị.

def msg = params._source['message'];

if (msg != null) {

String key = 'src_ip="';

int start = msg.indexOf(key);

if (start >= 0) {

start += key.length();

int end = msg.indexOf('"', start);

if (end > start) {

emit(msg.substring(start, end));

}

}

}

  1.     Kiểm tra phần Preview để chắc chắn field trả về đúng dữ liệu.
  2.     Bấm Save để lưu Runtime Field trong Data View.

Lúc này Runtime Field phải xuất hiện trong Discover của kibana