Logstash là gì? Tổng quan về công cụ thu thập và xử lý log mạnh mẽ

Giới thiệu

Trong bài viết trước, chúng ta đã tìm hiểu về Filebeat, một agent thu thập nhật ký phổ biến. Hôm nay, chúng ta sẽ khám phá Logstash, một công cụ mạnh mẽ trực tiếp nhận dữ liệu từ Filebeat, sau đó xử lý và chuyển đến Elasticsearch. Logstash đóng vai trò quan trọng trong việc xây dựng một hệ thống ELK (Elasticsearch, Logstash, Kibana) hoàn chỉnh.

1. Logstash là gì?

Logstash là một công cụ mã nguồn mở, được sử dụng để thu thập, xử lý và chuyển tiếp dữ liệu nhật ký theo thời gian thực. Nó có khả năng hợp nhất dữ liệu từ nhiều nguồn khác nhau, chuẩn hóa dữ liệu để xử lý tiếp theo, loại bỏ dữ liệu không cần thiết và đồng nhất hóa tất cả dữ liệu này để phân tích và hiển thị trên biểu đồ.

Logstash bao gồm ba thành phần chính, tương ứng với ba giai đoạn xử lý dữ liệu: Input (Đầu vào), Filter (Bộ lọc) và Output (Đầu ra).

  • Input: Logstash có thể nhận dữ liệu từ nhiều nguồn khác nhau như TCP/UDP, tập tin, Syslog, Microsoft Windows Event Logs, STDIN và nhiều nguồn khác. Điều này cho phép thu thập nhật ký từ các ứng dụng trong môi trường của bạn và chuyển chúng đến Logstash.

    Alt text: Sơ đồ các nguồn dữ liệu đầu vào (Input) của Logstash

  • Filter: Khi các bản ghi đến máy chủ Logstash, một loạt các bộ lọc cho phép bạn chỉnh sửa và chuyển đổi các sự kiện này. Bạn có thể trích xuất thông tin cần thiết từ các bản ghi.

  • Output: Logstash hỗ trợ nhiều đích đầu ra, bao gồm TCP/UDP, email, tập tin, HTTP, Nagios và nhiều dịch vụ mạng khác. Bạn có thể tích hợp Logstash với các công cụ tính toán số liệu (metric), công cụ cảnh báo, biểu đồ và công nghệ lưu trữ, hoặc xây dựng một công cụ tùy chỉnh cho môi trường làm việc của mình.

2. Logstash hoạt động như thế nào?

Logstash hoạt động theo một quy trình ba giai đoạn: Input -> Filter -> Output. Đầu vào tạo ra các sự kiện, bộ lọc sửa đổi chúng và đầu ra chuyển chúng đến đích mong muốn. Các đầu vào và đầu ra hỗ trợ codec, cho phép bạn mã hóa hoặc giải mã dữ liệu khi nó đi vào hoặc ra khỏi quy trình mà không cần sử dụng bộ lọc riêng biệt.

2.1. Input (Đầu vào)

Chúng ta sử dụng Input để đưa dữ liệu vào Logstash. Một số đầu vào phổ biến bao gồm:

  • File: Đọc dữ liệu từ một tệp trên hệ thống, tương tự như lệnh tail -0F trong UNIX.

    Alt text: Cấu hình Input File trong Logstash

  • Syslog: Lắng nghe trên cổng 514 để nhận các thông báo nhật ký hệ thống và phân tích cú pháp theo định dạng RFC3164.

  • Redis: Đọc dữ liệu từ máy chủ Redis, sử dụng cả kênh Redis và danh sách Redis. Redis thường được sử dụng như một “broker” trong mô hình Logstash tập trung, nơi nó hàng đợi các sự kiện Logstash từ các “shippers” từ xa.

  • Beats: Xử lý các sự kiện được gửi bởi Beats (ví dụ: Filebeat).

2.2. Filter (Bộ lọc)

Filter là thành phần xử lý trung gian trong quy trình Logstash. Bạn có thể kết hợp các bộ lọc với các điều kiện để thực hiện một hành động trên một sự kiện nếu nó đáp ứng các tiêu chí nhất định. Một số bộ lọc hữu ích bao gồm:

  • Grok: Phân tích cú pháp và cấu trúc văn bản tùy ý – chỉnh sửa định dạng log từ client gửi về. Grok là một trong những cách tốt nhất để phân tích cú pháp dữ liệu nhật ký không có cấu trúc thành một định dạng có cấu trúc và có thể truy vấn được. Với hơn 120 mẫu tích hợp sẵn, bạn có thể dễ dàng tìm thấy một mẫu phù hợp với nhu cầu của mình.

    Alt text: Cấu hình Filter Grok trong Logstash

  • Mutate: Thực hiện các phép biến đổi chung trên các trường sự kiện. Bạn có thể đổi tên, xóa, thay thế và sửa đổi các trường trong sự kiện của mình.

  • Drop: Loại bỏ hoàn toàn sự kiện (ví dụ: các sự kiện debug).

  • Clone: Tạo bản sao của sự kiện, có thể thêm hoặc xóa các trường.

  • Geoip: Thêm thông tin về vị trí địa lý của địa chỉ IP (cũng hiển thị biểu đồ tuyệt vời trong Kibana).

2.3. Output (Đầu ra)

Các đầu ra là giai đoạn cuối cùng của quy trình Logstash. Một sự kiện có thể đi qua nhiều đầu ra, nhưng một khi tất cả quá trình xử lý đầu ra đã hoàn tất, sự kiện sẽ kết thúc việc thực thi của nó. Một số đầu ra thường được sử dụng bao gồm:

  • Elasticsearch: Gửi dữ liệu sự kiện đến Elasticsearch. Nếu bạn có kế hoạch lưu trữ dữ liệu ở định dạng hiệu quả, tiện lợi và dễ dàng truy vấn, Elasticsearch là một lựa chọn tuyệt vời.

    Alt text: Cấu hình Output Elasticsearch trong Logstash

  • File: Ghi dữ liệu sự kiện vào một tệp trên bộ nhớ.

  • Graphite: Gửi dữ liệu sự kiện đến Graphite, một công cụ nguồn mở phổ biến để lưu trữ và vẽ đồ thị số liệu.

  • Statsd: Gửi dữ liệu sự kiện đến Statsd, một dịch vụ lắng nghe và thống kê.

3. Ví dụ cấu hình Input, Filter, Output

(Trong bài viết gốc có đề cập đến ví dụ, tuy nhiên, không cung cấp chi tiết cấu hình. Để tăng tính hữu ích, chúng ta sẽ bổ sung ví dụ minh họa)

Dưới đây là ví dụ về cấu hình Logstash cơ bản, thu thập log từ file, lọc bằng Grok để phân tích cấu trúc và xuất ra Elasticsearch:

input {
  file {
    path => "/var/log/myapp.log"
    start_position => "beginning"
  }
}

filter {
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{DATA:class} - %{GREEDYDATA:message}" }
  }
  date {
    match => [ "timestamp", "ISO8601" ]
    target => "@timestamp"
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "myapp-%{+YYYY.MM.dd}"
  }
}
  • Input (file): Đọc file /var/log/myapp.log từ đầu file.
  • Filter (grok): Phân tích dòng log theo mẫu: TIMESTAMP_ISO8601, LOGLEVEL, DATA, GREEDYDATA và gán vào các trường tương ứng. Sau đó, sử dụng filter date để chuyển đổi trường timestamp thành kiểu dữ liệu ngày tháng và gán vào trường @timestamp.
  • Output (elasticsearch): Đẩy dữ liệu đã lọc vào Elasticsearch với index có định dạng myapp-YYYY.MM.dd.

Tổng kết

Trong bài viết này, chúng ta đã tìm hiểu về Logstash, một công cụ thu thập và xử lý nhật ký mạnh mẽ, là một phần không thể thiếu của ELK Stack. Logstash giúp bạn thu thập, xử lý và chuyển đổi dữ liệu từ nhiều nguồn khác nhau, giúp bạn dễ dàng phân tích và giám sát hệ thống của mình.

Ở bài viết tiếp theo, chúng ta sẽ tìm hiểu về cách thiết lập biểu đồ trên Kibana để trực quan hóa các sự kiện được thu thập từ client.

Thực hiện bởi sentayho.com.vn