Để trích xuất trường clientMessageId từ chuỗi JSON trong Logstash bằng cách sử dụng filter grok, bạn có thể thêm mẫu (pattern) grok mới vào cấu trúc hiện tại của bạn. Dưới đây là cách thực hiện:
Cấu trúc cập nhật với grok để trích xuất clientMessageId
filter { grok { match => { "message" => ".*?,\"thread\":\"%{DATA:thread}\",\"level\":\"%{DATA:level}\",\"loggerName\":\"%{DATA:loggerName}\",\"message\":\"%{GREEDYDATA:messageLog}\",\"endOfBatch\".*?,\"clientMessageId\":\"%{DATA:clientMessageId}\"" } }
}
Giải thích về mẫu grok: .?: Được sử dụng để cho phép bất kỳ ký tự nào trước phần cần trích xuất. .? có nghĩa là không tham lam (non-greedy), vì vậy nó sẽ dừng lại ngay khi tìm thấy mẫu tiếp theo. "clientMessageId":"%{DATA:clientMessageId}": Phần này được thêm vào để trích xuất giá trị của clientMessageId. %{DATA:clientMessageId} sẽ lấy giá trị tương ứng và gán nó vào trường clientMessageId. Ví dụ hoàn chỉnh của filter grok
filter { # Loại bỏ ký tự không mong muốn trong message mutate { gsub => ["message", "\u001b|\n", ""] } # Phân tích và trích xuất thông tin từ message grok { match => { "message" => ".*?,\"thread\":\"%{DATA:thread}\",\"level\":\"%{DATA:level}\",\"loggerName\":\"%{DATA:loggerName}\",\"message\":\"%{GREEDYDATA:messageLog}\",\"clientMessageId\":\"%{DATA:clientMessageId}\",\"endOfBatch\"" } } # Chuyển đổi trường timestamp thành @timestamp date { match => [ "timestamp", "ISO8601" ] timezone => "+07:00" remove_field => [ "timestamp" ] target => "@timestamp" } # Phân tích dữ liệu JSON từ trường body json { source => "body" target => "body_json" } # Lưu trữ ngày tháng vào trường indexDay ruby { code => "event.set('indexDay', event.get('[@timestamp]').time.localtime('+07:00').strftime('%Y%m%d'))" }
} odec => rubydebug }
}
Lưu ý Đảm bảo rằng chuỗi đầu vào của bạn luôn có định dạng JSON như đã mô tả, vì grok phụ thuộc vào việc khớp đúng với mẫu đã định nghĩa. Bạn có thể điều chỉnh các mẫu khác nếu cần thiết để phù hợp với định dạng cụ thể của dữ liệu bạn đang xử lý. Nếu bạn cần thêm thông tin hoặc có câu hỏi khác, hãy cho mình biết!