Dựa trên log request và response mà bạn đã cung cấp, bạn có thể viết một file template cho Elasticsearch để ánh xạ các trường trong log nhằm tối ưu hóa việc tìm kiếm trên Kibana. Dưới đây là một ví dụ về file template phù hợp để trích xuất các thông tin hữu ích như clientIp, clientMessageId, method, path, duration, logType, và các thông tin khác.
File template cho Elasticsearch:
{ "index_patterns": ["logstash-*"], "template": { "settings": { "number_of_shards": 1, "number_of_replicas": 1, "refresh_interval": "5s" }, "mappings": { "properties": { "@timestamp": { "type": "date" }, "instant.epochSecond": { "type": "long" }, "instant.nanoOfSecond": { "type": "long" }, "thread": { "type": "keyword" }, "level": { "type": "keyword" }, "loggerName": { "type": "keyword" }, "message": { "type": "text" }, "contextMap.traceId": { "type": "keyword", "null_value": "null" }, "contextMap.spanId": { "type": "keyword", "null_value": "null" }, "contextMap.clientIp": { "type": "ip" }, "contextMap.clientMessageId": { "type": "keyword" }, "contextMap.clientTime": { "type": "date", "format": "strict_date_optional_time||epoch_millis" }, "contextMap.duration": { "type": "long" }, "contextMap.methodName": { "type": "keyword" }, "contextMap.path": { "type": "keyword" }, "contextMap.stackTrace": { "type": "text" }, "threadId": { "type": "integer" }, "threadPriority": { "type": "integer" }, "logType": { "type": "keyword" }, "application": { "type": "keyword" }, "localIp": { "type": "ip" } } } }
}
Giải thích các trường trong template: @timestamp: Trường ngày tháng để ghi nhận thời gian của log. Elasticsearch sẽ tự động nhận biết kiểu dữ liệu này là date.
instant.epochSecond và instant.nanoOfSecond: Dữ liệu thời gian dưới dạng epoch, dùng để lưu lại thời gian log được ghi nhận một cách chi tiết đến nano giây.
contextMap.clientIp: Trường IP của client. Được ánh xạ dưới dạng ip, để Elasticsearch hiểu rằng đây là một địa chỉ IP và giúp tối ưu hóa cho việc tìm kiếm theo IP.
contextMap.clientMessageId: ID của tin nhắn client, dùng để xác định các yêu cầu và phản hồi tương ứng. Được ánh xạ dưới dạng keyword để tìm kiếm nhanh mà không cần phân tích cú pháp.
contextMap.clientTime: Thời gian client gửi yêu cầu, ánh xạ với kiểu date và sử dụng định dạng thời gian ISO8601.
contextMap.duration: Thời gian xử lý yêu cầu (ms). Được ánh xạ dưới dạng long để lưu trữ các giá trị số nguyên lớn.
contextMap.path: Đường dẫn API mà yêu cầu hướng tới. Sử dụng kiểu keyword để tìm kiếm nhanh mà không cần phân tích.
contextMap.stackTrace: Dữ liệu stack trace trong trường hợp có lỗi, được ánh xạ dưới dạng text để phân tích nội dung chi tiết của log lỗi.
logType: Loại log, có thể là REQUEST hoặc RESPONSE. Được ánh xạ với keyword để phục vụ cho việc lọc và tìm kiếm.