Logstash - Kiến trúc bên trong

Trong chương này, chúng ta sẽ thảo luận về kiến ​​trúc bên trong và các thành phần khác nhau của Logstash.

Kiến trúc dịch vụ Logstash

Logstash xử lý nhật ký từ các máy chủ và nguồn dữ liệu khác nhau và nó hoạt động như người gửi hàng. Người gửi hàng được sử dụng để thu thập nhật ký và chúng được cài đặt trong mọi nguồn đầu vào. Môi giới nhưRedis, Kafka hoặc là RabbitMQ là bộ đệm để lưu giữ dữ liệu cho người lập chỉ mục, có thể có nhiều hơn một nhà môi giới bị lỗi trong các trường hợp.

Người lập chỉ mục như Luceneđược sử dụng để lập chỉ mục các bản ghi để có hiệu suất tìm kiếm tốt hơn và sau đó đầu ra được lưu trữ trong Elasticsearch hoặc đích đầu ra khác. Dữ liệu trong bộ lưu trữ đầu ra có sẵn cho Kibana và phần mềm trực quan hóa khác.

Kiến trúc bên trong Logstash

Đường ống Logstash bao gồm ba thành phần Input, FiltersOutput. Phần đầu vào chịu trách nhiệm chỉ định và truy cập vào nguồn dữ liệu đầu vào, chẳng hạn như thư mục nhật ký củaApache Tomcat Server.

Ví dụ để giải thích về đường ống Logstash

Tệp cấu hình Logstash chứa thông tin chi tiết về ba thành phần của Logstash. Trong trường hợp này, chúng tôi đang tạo một tên tệp được gọi làLogstash.conf.

Cấu hình sau đây thu thập dữ liệu từ nhật ký đầu vào “inlog.log” và ghi nó vào nhật ký đầu ra “outlog.log” mà không có bất kỳ bộ lọc nào.

Logstash.conf

Tệp cấu hình Logstash chỉ sao chép dữ liệu từ inlog.log tập tin bằng cách sử dụng plugin đầu vào và chuyển dữ liệu nhật ký sang outlog.log tệp bằng cách sử dụng plugin đầu ra.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/inlog.log"
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/outlog.log"
   }
}

Chạy Logstash

Logstash sử dụng –f tùy chọn để chỉ định tệp cấu hình.

C:\logstash\bin> logstash –f logstash.conf

inlog.log

Khối mã sau đây hiển thị dữ liệu nhật ký đầu vào.

Hello tutorialspoint.com

outlog.log

Đầu ra Logstash chứa dữ liệu đầu vào trong trường thông báo. Logstash cũng thêm các trường khác vào đầu ra như Dấu thời gian, Đường dẫn của Nguồn đầu vào, Phiên bản, Máy chủ lưu trữ và Thẻ.

{
   "path":"C:/tpwork/logstash/bin/log/inlog1.log",
   "@timestamp":"2016-12-13T02:28:38.763Z",
   "@version":"1", "host":"Dell-PC",
   "message":" Hello tutorialspoint.com", "tags":[]
}

Như bạn có thể, đầu ra của Logstash chứa nhiều hơn dữ liệu được cung cấp thông qua nhật ký đầu vào. Đầu ra chứa Đường dẫn nguồn, Dấu thời gian, Phiên bản, Tên máy chủ và Thẻ, được sử dụng để biểu thị các thông báo bổ sung như lỗi.

Chúng tôi có thể sử dụng bộ lọc để xử lý dữ liệu và làm cho dữ liệu trở nên hữu ích cho nhu cầu của chúng tôi. Trong ví dụ tiếp theo, chúng tôi đang sử dụng bộ lọc để lấy dữ liệu, bộ lọc này hạn chế đầu ra chỉ có dữ liệu với một động từ như GET hoặc POST theo sau làUnique Resource Identifier.

Logstash.conf

Trong cấu hình Logstash này, chúng tôi thêm một bộ lọc có tên grokđể lọc ra dữ liệu đầu vào. Sự kiện nhật ký đầu vào, khớp với nhật ký đầu vào trình tự mẫu, chỉ có lỗi đến đích đầu ra. Logstash thêm thẻ có tên "_grokparsefailure" trong các sự kiện đầu ra, thẻ này không khớp với trình tự mẫu bộ lọc rãnh.

Logstash cung cấp nhiều mẫu regex dựng sẵn để phân tích cú pháp nhật ký máy chủ phổ biến như Apache. Mẫu được sử dụng ở đây mong đợi một động từ như get, post, v.v., theo sau là một định danh tài nguyên thống nhất.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/inlog2.log"
   }
}
filter {
   grok {
      match => {"message" => "%{WORD:verb} %{URIPATHPARAM:uri}"}
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/outlog2.log"
   }
}

Chạy Logstash

Chúng ta có thể chạy Logstash bằng cách sử dụng lệnh sau.

C:\logstash\bin> logstash –f  Logstash.conf

inlog2.log

Tệp đầu vào của chúng tôi chứa hai sự kiện được phân tách bằng dấu phân cách mặc định, tức là dấu phân cách dòng mới. Sự kiện đầu tiên khớp với mẫu được chỉ định trong GROk và sự kiện thứ hai thì không.

GET /tutorialspoint/Logstash
Input 1234

outlog2.log

Chúng ta có thể thấy rằng sự kiện đầu ra thứ hai chứa thẻ "_grokparsefailure", vì nó không khớp với mẫu bộ lọc Grok. Người dùng cũng có thể xóa các sự kiện chưa khớp này trong đầu ra bằng cách sử dụng‘if’ điều kiện trong plugin đầu ra.

{
   "path":"C:/tpwork/logstash/bin/log/inlog2.log",
   "@timestamp":"2016-12-13T02:47:10.352Z","@version":"1","host":"Dell-PC","verb":"GET",
   "message":"GET /tutorialspoint/logstash", "uri":"/tutorialspoint/logstash", "tags":[]
}
{
   "path":"C:/tpwork/logstash/bin/log/inlog2.log",
   "@timestamp":"2016-12-13T02:48:12.418Z", "@version":"1", "host":"Dell-PC",
   "message":"t 1234\r", "tags":["_grokparsefailure"]
}