Header Ads Widget

Ticker

6/recent/ticker-posts

Tâm sự việc sử dụng Fluent-bit và Graylog trên hạ tầng Kubernetes

Keyword: Confessions of use Fluent-bit and Graylog on Kubernetes Infrastructure.

Thời gian đúng là trôi qua quá nhanh, bản thân mình giờ đây đã già và tăng lên vài kg sau cái dịp tết năm mới 2025 này, sẵn tiện đây mình xin phép chúc anh em nhiều sức khoẻ nhé, ok thì hôm nay chúng ta sẽ cùng nhau tìm hiểu về Fluent-bit và Graylog này trên infra có resource nhỏ.

Graylog là gì? nghe từ log ở đây chắc mọi người cũng biết nó dùng để làm gì rồi đúng không nào, đúng như những gì anh em suy nghĩ nó dùng để xem log, thường thì anh em ta hay dùng đến là ELK để thực hiện việc xem log và lấy log vậy thì tụi này có những điểm khác biệt gì nhau?

Tiêu chí Graylog ✅ ELK (Elasticsearch + Logstash + Kibana) ❌
Kiến trúc Gọn gàng, tập trung (Graylog Server xử lý log, lưu vào Elasticsearch). Cồng kềnh, phải cấu hình từng phần riêng lẻ (Elasticsearch, Logstash, Kibana).
Cài đặt & Cấu hình Dễ cài đặt, giao diện quản lý pipeline trực tiếp. Phức tạp, phải tự cấu hình Logstash và Kibana.
Xử lý log Nhanh, có pipeline kéo thả, dễ quản lý. Logstash mạnh nhưng dễ bị quá tải khi log lớn.
Tìm kiếm log Giao diện thân thiện, bộ lọc tìm kiếm mạnh. Kibana hỗ trợ tìm kiếm nhưng phức tạp hơn.
Trực quan hóa Hạn chế, chủ yếu là danh sách log. Kibana có dashboard mạnh mẽ, biểu đồ đẹp.
Hiệu suất Xử lý log real-time nhanh hơn nhờ message queue. Logstash có thể gây nghẽn nếu dữ liệu lớn.
Khả năng mở rộng Dễ mở rộng nhưng phụ thuộc vào Graylog Server. Có thể mở rộng từng phần nhưng phức tạp.
Giá thành Miễn phí bản Community, bản Enterprise có phí. Elasticsearch bản Basic miễn phí, X-Pack mất phí.
Tích hợp Hỗ trợ SIEM, ít plugin hơn ELK. Hệ sinh thái Elastic rộng, nhiều plugin hỗ trợ.

 

Tóm gọn:

  • Dùng Graylog nếu muốn cấu hình dễ, tìm kiếm log nhanh, hiệu suất cao.
  • Dùng ELK nếu cần trực quan hóa log mạnh, mở rộng linh hoạt, nhiều plugin.

Ở đây bản thân mình sẽ không nói về cách cài đặt Graylog bởi lẽ mình tin rằng các bạn ở đây sẽ không xa lạ hay khó khăn gì trong quá trình install với helm hoặc manually, vậy chúng ta sẽ có gì trên đây, mình sẽ note lại một số thứ mình làm với Graylog cũng như mình kể lại với các bạn những cái mình làm với Graylog (tâm sự mỏng xíu á mà 😁...), cái duyên khi mình sử dụng Graylog là khi mình đi onsite ở một công ty về bảo hiểm (mình sẽ không tiện nói tên ở đây) bản thân mình lúc đó vẫn đề cao ELK hơn, cũng như là tâm lý vẫn luôn đặt ELK lên hàng đầu, xong sau khi thời gian onsite kết khúc mình có quay về công ty hiện tại của mình để làm một Project của Internal lúc này anh SA có yêu cầu mình dựng Graylog, mình lại muốn dựng ELK thế là mình cải nhau với ảnh và thực hiện dựng ELK nhưng cái vấn đề ở đây là nhiệm vụ của họ các developer cần là xem log và chả có gì lớn lao cả, mà infra hiện tại của Internal lại nhỏ, cũng như để tiết kiệm tiền nhiều nhất có thể, nên việc để có một con server cấu hình mạnh để cài ELK quả thật là khó với họ, mình nói vậy không có nghĩa là mình nói Graylog sẽ dùng được với server yếu mà là nó có thể xây dựng với hạ tầng yếu hơn so với ELK bởi lẽ số lượng thành phần của ELK nhiều hơn và phức tạp hơn Graylog khá nhiều, cũng như là nhiều vấn đề khác mà mình đã từng tìm hiểu.

Vì vậy quyết định cuối cùng là mình cũng đành lòng chuyển sang Graylog và cũng như sau khi sử dụng mình cảm thấy rằng, Graylog cũng không tệ lắm hehe, việc dùng một tools để push log đến Graylog thì với mọi người mình không biết rằng họ sẽ dùng gì hay làm sao, có thể là họ code thẳng việc bắn log đến trực tiếp Graylog luôn nhưng với mình để gọi là giảm dung lượng resource nhiều nhất có thể, có thể lấy đầy đủ log mình cần, cũng như tiết kiệm chi phí thì mình đã chọn một thằng get log khá nhẹ đó là fluent-bit để dùng nó kết hợp với Graylog và phải công nhận là nó khá hợp như bún đậu mắm tôm vậy.

Mình sẽ show cấu hình input, output và filter của fluent-bit ở đây để cho anh em cùng tâm sự xem ổn không nhé, cũng như mình sẽ lưu trữ lại để sau này mình có thể dùng lại hihi

Input:
[INPUT]
          Name tail
          Path /var/log/containers/*.log
          Exclude_Path /var/log/containers/kube-system*.log
          multiline.parser docker, cri
          Tag kube.*
          Mem_Buf_Limit 10MB
          Skip_Long_Lines On
          Refresh_Interval 5
          Rotate_Wait 60
          Ignore_Older 1d
          read_from_head false
Filter:
[FILTER]
          Name kubernetes
          Match kube.*
          Merge_Log On
          Keep_Log Off
          K8S-Logging.Parser On
          K8S-Logging.Exclude On
      
      [FILTER]
          Name grep
          Match kube.*
          Regex kubernetes['pod_name'] ^(abc|def|ibn|xyz)-.*
      
      [FILTER]
          Name grep
          Match kube.*
          Exclude kubernetes['container_name'] ^(.*-sidecar$|init-container$|test-.*|fluentbit)$
Output:
[OUTPUT]
          Name gelf
          Match kube.*
          Host graylog-udp.monitoring.svc.cluster.local
          Port 12201
          Mode udp
          Gelf_Short_Message_Key log
          Gelf_Host_Key host
          Gelf_Timestamp_Key time
          Retry_Limit False  
Ok trên là config quan trọng của Fluent-bit của mình, mình sẽ lựa chọn các pod có name đầu là "abc | def |ibn | xyz" cũng như sẽ không lấy log của những pod như thế nào thì config tại trường filter và output thì sẽ gửi vào đâu ở đây là Graylog với port 12201 cũng như input như trên.

Post a Comment

0 Comments