Giới Thiệu
Trong bài viết này, chúng ta sẽ tìm hiểu cách tạo một template cho Logstash nhằm giúp ánh xạ các trường trong log đến Elasticsearch. Điều này không chỉ giúp bạn tổ chức các log một cách hiệu quả mà còn tối ưu hóa khả năng tìm kiếm và phân tích trên Kibana.
Template cho Elasticsearch
Dựa trên cấu trúc của log request và response mà bạn đã cung cấp, dưới đây là một ví dụ về file template mà bạn có thể sử dụng:
json
{
"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 quan trọng để ghi nhận thời gian log. Elasticsearch sẽ tự động nhận ra kiểu dữ liệu này là date, giúp bạn dễ dàng theo dõi thời gian.
-
instant.epochSecond và instant.nanoOfSecond: Các trường này chứa dữ liệu thời gian dưới dạng epoch, cho phép lưu lại thời gian ghi nhận log với độ chính xác đến nano giây.
-
contextMap.clientIp: Trường này chứa IP của client, được ánh xạ dưới dạng ip. Elasticsearch sẽ tối ưu hóa việc tìm kiếm theo địa chỉ IP.
-
contextMap.clientMessageId: Đây là ID của thông điệp từ client, giúp xác định dễ dàng các yêu cầu và phản hồi tương ứng. Nó được ánh xạ dạng keyword để tăng tốc độ tìm kiếm.
-
contextMap.clientTime: Thời gian mà client gửi yêu cầu, với định dạng ISO8601, giúp nhận diện chính xác thời điểm gửi yêu cầu.
-
contextMap.duration: Thời gian xử lý yêu cầu (đo bằng milliseconds). Trường này sử dụng kiểu 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 keyword để tăng tốc độ tìm kiếm mà không cần phân tích thêm.
-
contextMap.stackTrace: Dữ liệu stack trace cho các trường hợp xảy ra lỗi, ánh xạ dưới dạng text để điều tra và phân tích chi tiết các lỗi.
-
logType: Loại log (REQUEST hoặc RESPONSE), giúp phân loại log và hỗ trợ trong việc lọc tìm kiếm.
Kết Luận
Việc tạo và cấu hình template cho Elasticsearch là một bước quan trọng trong quy trình quản lý log. Template này giúp bạn dễ dàng hơn trong việc tìm kiếm và phân tích dữ liệu trên Kibana.
Hãy thử nghiệm với template ở trên để thấy được sự khác biệt trong quá trình theo dõi và phân tích log của bạn.
source: viblo