+1

Tìm kiếm bằng KQL Elasticsearch

Để lấy trường clientMessageId từ log JSON mà bạn đã cung cấp, bạn có thể sử dụng grok hoặc json filter trong Logstash hoặc thực hiện truy vấn trực tiếp trên Kibana nếu dữ liệu đã được đẩy vào Elasticsearch. Dưới đây là hai cách phổ biến để trích xuất giá trị của trường clientMessageId.

  1. Sử dụng Grok Filter trong Logstash Bạn có thể sử dụng grok để trích xuất clientMessageId từ trường message. Đầu tiên, bạn cần định nghĩa pattern sao cho phù hợp với log của bạn.

Cấu hình Grok: Trong file logstash.conf, bạn có thể cấu hình bộ lọc như sau:

filter {
  grok {
    match => {
      "message" => 'clientMessageId":"%{NUMBER:clientMessageId}"'
    }
  }
}
filter {
  json {
    source => "message"
    target => "json_data"  # Lưu các trường JSON vào "json_data"
  }
  
  grok {
    match => {
      "[json_data][logType]" => "%{DATA:logType}"
      "[json_data][clientMessageId]" => "%{DATA:clientMessageId}"
    }
  }
}

Trong đó:

clientMessageId: Sẽ lấy ra chuỗi số sau "clientMessageId":. %{NUMBER:clientMessageId}: Đây là phần để lấy ra giá trị số nguyên của clientMessageId. 2. Sử dụng JSON Filter trong Logstash Vì log của bạn có cấu trúc JSON, bạn cũng có thể sử dụng json filter để tự động phân tích cú pháp và trích xuất các trường từ JSON.

Cấu hình JSON Filter: Trong file logstash.conf, sử dụng bộ lọc json như sau:

filter {
  json {
    source => "message"
  }
}

Bộ lọc này sẽ tự động trích xuất tất cả các trường từ log JSON, bao gồm cả trường clientMessageId. Sau khi phân tích cú pháp, bạn có thể trực tiếp truy cập vào clientMessageId trong các phần sau của pipeline hoặc gửi thẳng đến Elasticsearch.

  1. Tìm kiếm trên Kibana (KQL) Nếu log đã được đẩy vào Elasticsearch và bạn muốn tìm kiếm clientMessageId trực tiếp trên Kibana, bạn có thể sử dụng KQL (Kibana Query Language).

Ví dụ, để tìm tất cả các log có clientMessageId cụ thể, bạn có thể sử dụng truy vấn KQL như sau:

kql contextMap.clientMessageId: "12321424124" Nếu bạn chỉ muốn tìm các log mà trường clientMessageId tồn tại:

kql Copy code contextMap.clientMessageId: * 4. Sử dụng Dev Tools để kiểm tra trên Kibana Bạn cũng có thể chạy một truy vấn đơn giản bằng Elasticsearch Query DSL thông qua Dev Tools của Kibana để tìm kiếm log với clientMessageId. Ví dụ:

GET /your_index/_search
{
  "query": {
    "match": {
      "contextMap.clientMessageId": "12321424124"
    }
  }
}

Tóm tắt: Grok Filter: Sử dụng nếu log của bạn chưa có cấu trúc JSON rõ ràng. JSON Filter: Sử dụng để tự động phân tích cú pháp log JSON. KQL trên Kibana: Tìm kiếm trực tiếp trên Kibana nếu dữ liệu đã được đẩy vào Elasticsearch.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí