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 falseFilter:
[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 FalseOk 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.
0 Comments
Vài lời muốn nói:
* Không được nhận xét thô tục bởi mình biết các bạn là những người văn minh.
* Pass giải nén mặt định là itblognote hoặc itblognote.com nếu có Pass khác thì mình sẽ ghim trong bài viết.
* Click vào quảng cáo và chia sẻ bài viết để mình có thêm động lực viết bài nhé.