Trong thế giới công nghệ hiện đại, việc quản lý và phân tích log là yếu tố then chốt để đảm bảo hiệu suất và ổn định của hệ thống. Fluent Bit, một công cụ thu thập và xử lý log mạnh mẽ, cung cấp khả năng **parsing** (phân tích cú pháp) linh hoạt để biến dữ liệu log thô thành thông tin có cấu trúc, dễ dàng phân tích và sử dụng. Bài viết này sẽ đi sâu vào cách sử dụng Fluent Bit parser để tối ưu hóa quy trình xử lý log của bạn, giúp bạn khai thác tối đa giá trị từ dữ liệu log. Từ các parser tích hợp sẵn đến việc tạo **custom parser** phức tạp, chúng ta sẽ cùng nhau khám phá mọi khía cạnh để bạn có thể làm chủ công cụ này một cách hiệu quả.
Log là nguồn thông tin vô giá, cung cấp cái nhìn sâu sắc về hoạt động của hệ thống, tương tác của người dùng và các vấn đề tiềm ẩn. Tuy nhiên, dữ liệu log thô thường không có cấu trúc và khó hiểu đối với cả con người lẫn máy móc. Việc parsing log là bước quan trọng để chuyển đổi dữ liệu thô này thành định dạng có cấu trúc, giúp:
Fluent Bit cung cấp nhiều loại **parser** khác nhau, từ các parser tích hợp sẵn cho các định dạng log phổ biến đến khả năng tạo **custom parser** để xử lý các định dạng đặc biệt. Hãy cùng khám phá các loại parser này.
Fluent Bit đi kèm với nhiều **parser** được cấu hình sẵn cho các định dạng log phổ biến như Apache, Nginx, Docker và Syslog. Điều này giúp bạn dễ dàng bắt đầu xử lý log mà không cần phải tự cấu hình từ đầu. Để sử dụng một **parser** tích hợp sẵn, bạn chỉ cần:
Ví dụ, để **parsing** log Apache, bạn có thể sử dụng cấu hình sau:
pipeline:
inputs:
- name: tail
path: /input/input.log
refresh_interval: 1
parser: apache
read_from_head: true
outputs:
- name: stdout
match: '*'
Cấu hình này sẽ **parsing** các dòng log Apache thành các trường có cấu trúc. Ví dụ, một dòng log Apache như sau:
192.168.2.20 - - [29/Jul/2015:10:27:10 -0300] "GET /cgi-bin/try/ HTTP/1.0" 200 3395
Sẽ được Fluent Bit chuyển đổi thành:
[0] tail.0: [[1438176430.000000000, {}], {"host"=>"192.168.2.20", "user"=>"-", "method"=>"GET", "path"=>"/cgi-bin/try/", "code"=>"200", "size"=>"3395"}]
Các log trải dài trên nhiều dòng, chẳng hạn như stack trace, rất khó xử lý bằng các **parser** đơn giản dựa trên dòng. Multiline parser của Fluent Bit được thiết kế để giải quyết vấn đề này bằng cách cho phép nhóm các dòng log liên quan thành một sự kiện duy nhất. Điều này đặc biệt hữu ích để xử lý log từ các ứng dụng như Java hoặc Python, nơi các lỗi và stack trace có thể trải dài trên nhiều dòng.
Fluent Bit cũng có nhiều **multiline parser** tích hợp sẵn cho các định dạng log phổ biến như Docker, CRI, Go, Python và Java.
Khi làm việc với các định dạng log độc đáo hoặc không phổ biến, các **parser** tích hợp sẵn có thể không đủ. Fluent Bit cho phép bạn xác định **custom parser** bằng cách sử dụng regular expression (Regex). **Custom parser** cung cấp sự linh hoạt để xử lý bất kỳ định dạng log nào mà các tùy chọn tích hợp sẵn không bao gồm.
Ví dụ, xem xét một dòng log tùy chỉnh như sau:
key1=some_text;key2=42;key3=3.14;time=2024-08-28T13:22:04 +0000
Để xử lý định dạng này, bạn có thể tạo một **custom parser** như sau trong file `parsers.conf`:
[PARSER]
Name custom_kv_parser
Format regex
Regex ^key1=(?<key1>[^\\\\;]+);key2=(?<key2>[^\\\\;]+);key3=(?<key3>[^\\\\;]+);time=(?<time>[^;]+)$
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S %z
Types key1:string key2:integer key3:float
Sau đó, bạn có thể cấu hình Fluent Bit để sử dụng **custom parser** này:
pipeline:
inputs:
- name: tail
path: /input/input.log
refresh_interval: 1
parser: custom_kv_parser
read_from_head: true
outputs:
- name: stdout
match: '*'
service:
parsers_file: /custom/parser.conf
Với cấu hình này, Fluent Bit sẽ **parsing** dòng log tùy chỉnh và tạo ra dữ liệu JSON có cấu trúc:
[0] tail.0: [[1724851324.000000000, {}], {"key1"=>"some_text", "key2"=>42, "key3"=>3.140000}]
Fluent Bit hỗ trợ bốn định dạng để **parsing** log: JSON, Regex, Logfmt và LTSV. Việc lựa chọn định dạng phù hợp sẽ giúp bạn tối ưu hóa hiệu quả **parsing**.
Trong Fluent Bit, **parsing** thường xảy ra trước khi lọc. Điều này là do các bộ lọc thường dựa vào dữ liệu có cấu trúc do **parser** tạo ra để đưa ra quyết định về những gì nên bao gồm, sửa đổi hoặc loại trừ khỏi luồng log.
Sau khi **parsing**, bạn có thể áp dụng các bộ lọc để tinh chỉnh log hơn nữa, chẳng hạn như loại bỏ các trường không cần thiết hoặc chỉ tập trung vào các log có mức độ nghiêm trọng cụ thể.
Với khả năng **parsing** của Fluent Bit, bạn có thể chuyển đổi log thành thông tin chi tiết có giá trị để thúc đẩy các quyết định kỹ thuật và kinh doanh. Bằng cách tận dụng các **parser** tích hợp và tùy chỉnh, bạn có thể chuẩn hóa các định dạng log đa dạng, giảm khối lượng dữ liệu và tối ưu hóa quy trình quan sát của mình. Áp dụng các chiến lược này sẽ giúp bạn vượt qua những thách thức chung về ghi log và cho phép giám sát và phân tích hiệu quả hơn. Fluent Bit parser là công cụ không thể thiếu để quản lý log hiệu quả trong môi trường công nghệ hiện đại.
Bài viết liên quan