Mẹo và thủ thuật để chuyển đổi dữ liệu phi cấu trúc từ nhật ký sang ELK Stack bằng GROK trong LogStash

Cấu trúc dữ liệu phi cấu trúc với GROK

Nếu bạn đang sử dụng ngăn xếp Elastic (ELK) và quan tâm đến việc ánh xạ nhật ký Logstash tùy chỉnh vào Elasticsearch, thì bài đăng này là dành cho bạn.

Mẹo và thủ thuật để chuyển đổi dữ liệu phi cấu trúc từ nhật ký sang ELK Stack bằng GROK trong LogStash

Ngăn xếp ELK là từ viết tắt của ba dự án nguồn mở: Elaticsearch, Logstash và Kibana. Họ cùng nhau tạo thành một nền tảng quản lý nhật ký.

  • Elasticsearch là một hệ thống tìm kiếm và phân tích.
  • Logstash là một đường dẫn xử lý dữ liệu phía máy chủ, đồng thời nhập dữ liệu từ nhiều nguồn, biến đổi dữ liệu và sau đó gửi nó đến một “kho lưu trữ” chẳng hạn như Elaticsearch.
  • Kibana cho phép người dùng trực quan hóa dữ liệu bằng biểu đồ và đồ thị trong Elaticsearch.

Beats đến sau và là một người gửi dữ liệu nhẹ. Sự ra đời của Beats đã biến Elk Stack thành Elastic Stack, nhưng đó không phải là vấn đề.

Bài viết này nói về Grok, một tính năng trong Logstash có thể chuyển đổi nhật ký của bạn trước khi chúng được gửi đến kho lưu trữ. Vì mục đích của chúng ta, tôi sẽ chỉ nói về việc xử lý dữ liệu từ Logstash vào Elaticsearch.

Mẹo và thủ thuật để chuyển đổi dữ liệu phi cấu trúc từ nhật ký sang ELK Stack bằng GROK trong LogStash

Grok là một bộ lọc bên trong Logstash được sử dụng để phân tích dữ liệu phi cấu trúc thành nội dung có cấu trúc và có thể truy vấn được. Nó nằm trên biểu thức chính quy (regex) và sử dụng các mẫu văn bản để khớp các chuỗi trong tệp nhật ký.

Như chúng ta sẽ thấy trong các phần sau, việc sử dụng Grok tạo ra sự khác biệt lớn khi nói đến quản lý nhật ký hiệu quả.

Không có Grok, dữ liệu nhật ký của bạn sẽ không có cấu trúc

Mẹo và thủ thuật để chuyển đổi dữ liệu phi cấu trúc từ nhật ký sang ELK Stack bằng GROK trong LogStash

Không có Grok, khi nhật ký được gửi từ Logstash đến Elaticsearch và được hiển thị trong Kibana, chúng chỉ xuất hiện trong giá trị thông báo.

Việc truy vấn thông tin có ý nghĩa trong tình huống này rất khó vì tất cả dữ liệu nhật ký được lưu trữ trong một khóa duy nhất. Sẽ tốt hơn nếu các thông điệp tường trình được tổ chức tốt hơn.

Dữ liệu phi cấu trúc từ nhật ký

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

Nếu bạn nhìn kỹ vào dữ liệu thô, bạn sẽ thấy rằng nó thực sự bao gồm các phần khác nhau, mỗi phần cách nhau một khoảng trắng.

Đối với các nhà phát triển có kinh nghiệm hơn, bạn có thể đoán được ý nghĩa của từng phần và thông điệp tường trình đó là gì từ lệnh gọi API. Việc trình bày từng mục được nêu dưới đây.

Chế độ xem có cấu trúc của dữ liệu của chúng tôi

  • ​ localhost == môi trường
  • ​ Phương thức GET ==
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == phản hồi_trạng thái
  • ​ 46 mili giây == thời gian phản hồi
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Như chúng ta thấy trong dữ liệu có cấu trúc, có một thứ tự đối với các nhật ký phi cấu trúc. Bước tiếp theo là xử lý phần mềm dữ liệu thô. Đây là nơi Grok tỏa sáng.

Mẫu Grok

Các mẫu Grok tích hợp

Logstash đi kèm hơn 100 mẫu dựng sẵn để cấu trúc dữ liệu phi cấu trúc. Bạn chắc chắn nên tận dụng lợi thế này bất cứ khi nào có thể đối với các nhật ký hệ thống chung như apache, linux, haproxy, aws, v.v.

Tuy nhiên, điều gì sẽ xảy ra khi bạn có nhật ký tùy chỉnh như trong ví dụ trên? Bạn phải xây dựng mẫu Grok của riêng mình.

Mẫu Grok tùy chỉnh

Bạn phải cố gắng xây dựng mẫu Grok của riêng mình. tôi đã sử dụng Trình gỡ lỗi Grok и Mẫu Grok.

Lưu ý rằng cú pháp mẫu Grok như sau: %{SYNTAX:SEMANTIC}

Điều đầu tiên tôi cố gắng làm là vào tab Khám phá trong trình gỡ lỗi Grok. Tôi nghĩ sẽ thật tuyệt nếu công cụ này có thể tự động tạo mẫu Grok, nhưng nó không quá hữu ích vì nó chỉ tìm thấy hai kết quả phù hợp.

Mẹo và thủ thuật để chuyển đổi dữ liệu phi cấu trúc từ nhật ký sang ELK Stack bằng GROK trong LogStash

Sử dụng khám phá này, tôi bắt đầu tạo mẫu của riêng mình trong trình gỡ lỗi Grok bằng cách sử dụng cú pháp tìm thấy trên trang Elastic Github.

Mẹo và thủ thuật để chuyển đổi dữ liệu phi cấu trúc từ nhật ký sang ELK Stack bằng GROK trong LogStash

Sau khi thử nghiệm các cú pháp khác nhau, cuối cùng tôi đã có thể cấu trúc dữ liệu nhật ký theo cách mình muốn.

Mẹo và thủ thuật để chuyển đổi dữ liệu phi cấu trúc từ nhật ký sang ELK Stack bằng GROK trong LogStash

Liên kết gỡ lỗi Grok https://grokdebug.herokuapp.com/

Văn bản gốc:

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

Mẫu:

%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}

Chuyện gì đã xảy ra cuối cùng

{
  "environment": [
    [
      "localhost"
    ]
  ],
  "method": [
    [
      "GET"
    ]
  ],
  "url": [
    [
      "/v2/applink/5c2f4bb3e9fda1234edc64d"
    ]
  ],
  "response_status": [
    [
      "400"
    ]
  ],
  "BASE10NUM": [
    [
      "400"
    ]
  ],
  "response_time": [
    [
      "46ms"
    ]
  ],
  "user_id": [
    [
      "5bc6e716b5d6cb35fc9687c0"
    ]
  ]
}

Với mẫu Grok và dữ liệu được ánh xạ trong tay, bước cuối cùng là thêm nó vào Logstash.

Cập nhật tệp cấu hình Logstash.conf

Trên máy chủ nơi bạn đã cài đặt ngăn xếp ELK, hãy chuyển đến cấu hình Logstash:

sudo vi /etc/logstash/conf.d/logstash.conf

Dán các thay đổi.

input { 
  file {
    path => "/your_logs/*.log"
  }
}
filter{
  grok {
    match => { "message" => "%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}"}
  }
}
output {
  elasticsearch {
    hosts => [ "localhost:9200" ]
  }
}

Sau khi lưu các thay đổi của bạn, hãy khởi động lại Logstash và kiểm tra trạng thái của nó để đảm bảo nó vẫn hoạt động.

sudo service logstash restart
sudo service logstash status

Cuối cùng, để đảm bảo những thay đổi có hiệu lực, Hãy nhớ cập nhật chỉ mục Elaticsearch của bạn cho Logstash ở Kibana!

Mẹo và thủ thuật để chuyển đổi dữ liệu phi cấu trúc từ nhật ký sang ELK Stack bằng GROK trong LogStash

Với Grok, dữ liệu nhật ký của bạn được cấu trúc!

Mẹo và thủ thuật để chuyển đổi dữ liệu phi cấu trúc từ nhật ký sang ELK Stack bằng GROK trong LogStash

Như chúng ta có thể thấy trong hình trên, Grok có khả năng tự động khớp dữ liệu nhật ký với Elaticsearch. Điều này giúp việc quản lý nhật ký và truy vấn thông tin nhanh chóng dễ dàng hơn. Thay vì tìm hiểu kỹ các tệp nhật ký để gỡ lỗi, bạn có thể chỉ cần lọc theo những gì bạn đang tìm kiếm, chẳng hạn như môi trường hoặc url.

Hãy thử biểu thức Grok! Nếu bạn có cách khác để thực hiện việc này hoặc có bất kỳ vấn đề nào với các ví dụ trên, chỉ cần viết bình luận bên dưới để cho tôi biết.

Cảm ơn bạn đã đọc—và vui lòng theo dõi tôi tại đây trên Medium để có thêm các bài viết thú vị về công nghệ phần mềm!

Tài nguyên

https://www.elastic.co/blog/do-you-grok-grok
https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
https://grokdebug.herokuapp.com/

PS Liên kết đến nguồn

Kênh Telegram của Elasticsearch

Nguồn: www.habr.com

Thêm một lời nhận xét