0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Hướng Dẫn Cấu Hình Logstash Để Trích Xuất Và Viết Tắt Các Trường Dữ Liệu Cho Truy Vấn KQL

Đăng vào 3 tuần trước

• 6 phút đọc

Chủ đề:

Logstash

Giới thiệu

Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách cấu hình Logstash để trích xuất các trường dữ liệu cần thiết từ log và viết tắt chúng. Việc này giúp bạn dễ dàng hơn trong việc thực hiện truy vấn bằng ngôn ngữ KQL (Kibana Query Language).

Cấu hình Logstash

Dưới đây là cấu hình mẫu cho Logstash:

Phần Filter

json Copy
filter {
    # Sử dụng grok để trích xuất các trường từ log
    grok {
        match => {
            "message" => ""
                {"instant":{"epochSecond":%{NUMBER:epoch_sec},"nanoOfSecond":%{NUMBER:nano_sec},"thread":"%{DATA:thread}","level":"%{WORD:level}","loggerName":"%{DATA:logger_name}","message":"%{GREEDYDATA:log_message}","endOfBatch":%{GREEDYDATA:end_of_batch},"loggerFqcn":"%{DATA:logger_fqcn}","contextMap":{"traceId":"%{DATA:trace_id}","spanId":"%{DATA:span_id}","className":"%{DATA:class_name}","clientIp":"%{IP:client_ip}","clientMessageId":"%{DATA:client_message_id}","clientTime":"%{TIMESTAMP_ISO8601:client_time}","duration":%{NUMBER:duration},"methodName":"%{DATA:method_name}","path":"%{DATA:path}","stackTrace":"%{GREEDYDATA:stack_trace}"},"threadId":%{NUMBER:thread_id},"threadPriority":%{NUMBER:thread_priority},"logType":"%{WORD:log_type}","application":"%{DATA:application}","localIp":"%{IP:local_ip}"}
                ""
            }
    }

    # Tạo các trường viết tắt
    mutate {
        add_field => {
            "ts" => "%{epoch_sec}"
            "ip" => "%{client_ip}"
            "msgId" => "%{client_message_id}"
            "duration" => "%{duration}"
            "method" => "%{method_name}"
            "path" => "%{path}"
            "app" => "%{application}"
            "localIp" => "%{local_ip}"
            "logType" => "%{log_type}"
        }
        remove_field => ["instant", "thread", "level", "logger_name", "message", "endOfBatch", "logger_fqcn", "contextMap", "threadId", "threadPriority"]
    }
}

Giải thích Cấu hình

  1. Input: Logstash sẽ đọc dữ liệu từ một file JSON. Hãy nhớ thay đổi đường dẫn "/path/to/your/logfile.log" thành đường dẫn thực tế của file log bạn sử dụng.

  2. Filter: Phần này sử dụng grok để phân tích log và trích xuất thông tin cần thiết. Sau đó, chúng ta sử dụng mutate để tạo các trường mới viết tắt, giúp tiết kiệm không gian lưu trữ và dễ dàng quản lý thông tin.

Output

Dữ liệu sẽ được ghi vào Elasticsearch với tên index có định dạng ngày tháng. Ngoài ra, Logstash cũng sẽ xuất dữ liệu ra stdout để bạn có thể kiểm tra.

Cấu hình Logstash với Grok

Nếu bạn muốn sử dụng grok để phân tích log trước khi lấy ra các trường cần thiết, cấu hình dưới đây có thể được sử dụng:

Phần Filter

json Copy
filter {
    # Sử dụng grok để trích xuất các trường từ log
    grok {
        match => {
            "message" => "..."
            }
    }

    # Tạo các trường viết tắt
    mutate {
        add_field => {
            "ts" => "%{epoch_sec}"
            "ip" => "%{client_ip}"
            "msgId" => "%{client_message_id}"
            "duration" => "%{duration}"
            "method" => "%{method_name}"
            "path" => "%{path}"
            "app" => "%{application}"
            "localIp" => "%{local_ip}"
            "logType" => "%{log_type}"
        }
        remove_field => ["instant", "thread", "level", "logger_name", "message", "endOfBatch", "logger_fqcn", "contextMap", "threadId", "threadPriority"]
    }
}

Template JSON cho Log

json Copy
{
  "template": {
    "mappings": {
      "properties": {
        "ts": {
          "type": "date",
          "format": "epoch_second"
        },
        "ip": {
          "type": "ip"
        },
        "msgId": {
          "type": "keyword"
        },
        "duration": {
          "type": "integer"
        },
        "method": {
          "type": "keyword"
        },
        "path": {
          "type": "keyword"
        },
        "app": {
          "type": "keyword"
        },
        "localIp": {
          "type": "ip"
        },
        "logType": {
          "type": "keyword"
        },
        "loggerName": {
          "type": "keyword"
        },
        "level": {
          "type": "keyword"
        },
        "clientTime": {
          "type": "date",
          "format": "strict_date_optional_time||epoch_millis"
        },
        "stackTrace": {
          "type": "text"
        }
      }
    }
  }
}

Giải thích Template JSON

  • mappings: Phần này định nghĩa các trường và kiểu dữ liệu mà bạn sẽ gửi lên Elasticsearch. Mỗi trường được xác định rõ ràng để đảm bảo Elasticsearch có thể hiểu và phân tích đúng cách.
  • ts: Thời gian log dưới dạng epoch_second.
  • ip: Địa chỉ IP của client.
  • msgId: ID message dưới dạng keyword.
  • duration: Thời gian xử lý dưới dạng integer.
  • method: Phương thức HTTP dưới dạng keyword.
  • path: Đường dẫn API dưới dạng keyword.
  • app: Tên ứng dụng dưới dạng keyword.
  • localIp: Địa chỉ IP cục bộ dưới dạng ip.
  • logType: Loại log với các giá trị REQUEST/RESPONSE dưới dạng keyword.
  • loggerNamelevel: Thông tin về logger và mức độ log.
  • clientTime: Thời gian từ client với định dạng hỗ trợ nhiều kiểu dữ liệu và stackTrace: Kiểu text cho thông tin lỗi.

Bài viết này cung cấp cho bạn những kiến thức cần thiết để tối ưu hóa việc xử lý log trong hệ thống của bạn. Hãy thực hiện theo từng bước và tùy chỉnh cấu hình cho phù hợp với nhu cầu cụ thể của bạn.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào