[ELK] Tìm hiểu dịch vụ Logstash trong hệ thống ELK Stack Logging

Tìm hiểu dịch vụ Logstash trong hệ thống ELK Stack LoggingCuongquach.com | Ở bài viết này chúng ta sẽ không đi chi tiết về cách cài đặt Logstash và cách cấu hình Logstash xử lý các event log được nhận từ các nguồn log gửi tới. Mà chỉ đi qua tổng quan về hoạt động và cấu trúc Logstash, một dịch vụ quan trọng trong hệ thống ELK Stack cho hoạt động quản lý log tập trung. (Bài viết nằm trong Series về ELK Stack Logging)

tổng quan về logstash trong ELK

Có thể bạn quan tâm chủ đề khác
Lộ trình nghiên cứu học DevOps/Frontend/Backend 2018
Top chứng chỉ Linux quốc tế mà Quản trị viên nên có
Các mẹo tăng tốc độ thực thi trên Ansible

1. Logstash là gì ?

Trang chủhttps://www.elastic.co/products/logstash

kiến trúc logstash

Logstash là một chương trình mã nguồn mở, nằm trong hệ sinh thái của bộ sản phẩm ELK Stack, với nhiệm vụ rất quan trọng bao gồm ba giai đoạn trong chuỗi xử lý sự kiện log (pipeline) tương ứng ba module:

  • INPUT: tiếp nhận/thu thập dữ liệu sự kiện log ở dạng thô từ các nguồn khác nhau như file, redis, rabbitmq, beats, syslog,….
  • FILTER: Sau khi tiếp nhận dữ liệu sẽ tiến hành thao tác dữ liệu sự kiện log (như thêm, xoá, thay thế,.. nội dung log) theo cấu hình của quản trị viên để xây dựng lại cấu trúc dữ liệu log event theo mong muốn.
  • OUTPUT: Sau cùng sẽ thực hiện chuyển tiếp dữ liệu sự kiện log về các dịch vụ khác như Elasticsearch tiếp nhận lưu trữ log hoặc hiển thị log,..

2. Workflow xử lý pipeline

logstash pipeline

Ở bước INPUT, Logstash sẽ được cấu hình lựa chọn hình thức tiếp nhận log event hoặc đi lấy dữ liệu log ở dịch remote theo nhu cầu. Sau khi lấy được log event thì , khâu INPUT sẽ ghi dữ liệu event xuống hàng đợi tập trung ở bộ nhớ RAM hoặc trên ổ cứng.

Mỗi pipeline worker thread sẽ tiếp tục lấy một loạt sự kiện đang nằm trong hàng đợi này để xử lý FILTER giúp tái cấu trúc dữ liệu log sẽ được gửi đi ở phần OUTPUT. Số lượng sự kiện được xử lý một loạt và số lượng pipeline worker thread có thể được cấu hình tinh chỉnh tối ưu hơn, nội dung này có thể đề cập ở phần khác.

Mặc định Logstash sử dụng hàng đợi nằm trong bộ nhớ RAM giữa các giai đoạn (input -> filterfilter -> output) để làm bộ đệm lưu trữ dữ liệu event trước khi xử lý. Nếu mà chương trình dịch vụ Logstash của bạn vì một lý do nào đó bị dừng hoạt động giữa chừng, thì các dữ liệu event đang nằm trong buffer sẽ bị mất.

Input

Bạn sẽ sử dụng phần cấu hình block ‘INPUT’ để quy định cơ chế nhận/lấy log vào chương trình Logstash. Một số Input plugin phổ biến thường được sử dụng để nhận/lấy log như :

  • file: đọc dữ liệu từ file trên filesystem, giống lệnh ‘tail -f’ trên UNIX.
  • syslog: chương trình Logstash sẽ lắng nghe trên port 514 để tiếp nhận dữ liệu syslog.
  • redis: đọc dữ liệu log từ redis server, sử dụng cả 2 cơ chế redis channel và redis lists.
  • beats: xử lý các dữ liệu thông tin được gửi từ chương trình Beats (một sản phẩm nổi tiếng trong hệ thống ELK)

Logstash có hỗ trợ khá nhiều loại plugin input khác nhau giúp bạn linh động trong việc nhận nguồn dữ liệu log. Có thể xem tại đây : LINK

Filter

Bạn có thể kết hợp filter với các điều kiện so sánh nhằm thực hiện 1 tác vụ hành động (action) khi một sự kiện thoả mãn khớp với các tiêu chí do bạn được ra. Một số filter plugin hữu ích như :

  • grok: Nếu bạn gặp một dữ liệu sự kiện log với cấu trúc văn bản không phổ biến hoặc là phức tạp, thì Grok hiện là plugin filter tốt nhất để phân tích cú pháp dữ liệu log không được cấu trúc văn bản thành một thứ có cấu trúc và có thể truy vấn được.
  • mutate: thực hiện sự thay đổi trên thông tin sự kiện log như: đổi tên, xoá, thay thế, tinh chỉnh các trường (field) thông tin của sự kiện log.
  • drop: dừng xử lý sự kiện ngay lập tức, ví dụ các ‘debug event’.
  • clone: tạo một bản copy của sự kiện.
  • geoip: thêm thông tin về vị trí địa lý của địa chỉ IP (thường để hiển thị biểu đồ trên Kibana)

Outputs

Output là bước cuối cùng trong chuỗi các bước xử lý của Logstash. Một sự kiện có thể đưa qua nhiều output khác nhau, tiếp đây là các Output plugin hay sử dụng.

  • elasticsearch: gửi dữ liệu sự kiện đến hệ thống Elasticsearch. Tất nhiên đầu cuối của hệ thống logging ELK thường là Elasticsearch giúp bạn lưu trữ log, tìm kiếm log, …
  • file: nếu bạn chả cần bất kì sự lưu trữ log cho việc tìm kiếm, hiển thị,… thì có thể lưu ra file trên hệ thống.
  • graphite: gửi dữ liệu tới graphite, một trong những tool mã nguồn mở hỗ trợ việc lưu trữ và tạo biểu đồ metric.
  • statsd: gửi dữ liệu tới dịch vụ ‘statsd’.

Bạn có thể tham khảo thêm các Output plugin tại đây : LINK

3. Cấu trúc thư mục của Logstash

Hiện trong chuỗi các bài viết về hệ thống Logging ELK, mình thường cài đặt Logstash trên CentOS 7 từ file rpm . Nên chúng ta sẽ cùng điểm qua cấu trúc thư mục mặc định của Logstash khi được cài đặt từ file .rpm (RHEL/CentOS) hoặc .deb (Ubuntu/Debian).

Loại Miêu tả Đường dẫn folder Thông số
home /usr/share/logstash
bin /usr/share/logstash/bin
settings /etc/logstash
conf /etc/logstash/conf.d/*.conf
logs file log của chương trình logstash /var/log/logstash/ path.logs
plugins /usr/share/logstash/plugins path.plugins
data /var/lib/logstash

4. File cấu hình Logstash

Logstash có 2 loại file cấu hình : pipeline config file dùng để định nghĩa quá trình xử lý log pipeline ; setting file dùng để cấu hình các thông số liên quan đến hoạt động và khởi động của Logstash.

4.1 Pipeline configuration file

Thư mục chứa cấu hình xử lý pipeline bởi Logstash nằm ở thư mục : /etc/logstash/conf.d/ . Mặc định Logstash sẽ chỉ load cấu hình của các file có đuôi extension là ‘.conf

Chúng ta sẽ đi chi tiết phần cấu hình pipeline logstash ở bài khác. Nhưng bạn có thể biết sơ qua đây là cấu trúc cấu hình cơ bản của 1 pipeline logstash xử lý sự kiện data.

input {
    stdin {}
    file {}
    ...
}

filter {
    grok {}
    date {}
    geoip {}
    ...
}

output {
   elasticsearch {}
   email {}
   ...
}

4.2 File tinh chỉnh dịch vụ Logstash

Các file cấu hình của dịch vụ Logstash nằm ở thư mục : /etc/logstash/ . Dưới đây là vài file cơ bản quan trọng khi cấu hình chạy Logstash.

  • logstash.yml : file này chứa các cấu hình chung dành cho dịch vụ Logstash.
  • pipelines.yml : file này cấu hình thư mục chạy pipeline, số lượng pipeline chạy đồng thời, hình thức chạy pipeline,..
  • jvm.options : chứa cấu hình Java Virtual Machine (JVM). Sử dụng file này để thay đổi các thông số liên quan đến heap space, thường quan trọng trong việc tối ưu hoá dịch vụ logstash.

4.3 Log của Logstash

Nếu bạn cài Logstash theo ‘.rpm‘ hoặc ‘.deb‘ đã được đóng gói, thì file log của dịch vụ Logstash nằm ở : /var/log/logstash/

Nếu bạn chỉ download logstash source và chạy thì nó nằm ở thư mục tương ứng biến môi trường: $LS_HOME/logs/

Logstash sử dụng framework “Log4j 2” để định dạng cấu trúc log và xử lý log của riêng dịch vụ Logstash. Logstash hỗ trợ một số tính năng liên quan log như : Log API, slow-log config, log4j 2 config,…

Tổng kết

Vậy là bạn đã đi qua tổng quan về Logstash và sơ lược cách Logstash hoạt động trong hệ thống ELK Stack Logging rồi. Những phần sau chúng ta sẽ tiếp tục đi chuyên sâu về Logstash nhé.

Nguồn: https://cuongquach.com/

Previous article[Ebook] Tài liệu lập trình Android (3 Modules) – ĐH KHTN
Next articleGoogle chịu mức phạt kỷ lục 5 tỷ USD do độc quyền Android
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !