เลือกใช้ Fluentd หรือ Fluent Bit ดี?

Fluend vs Fluent Bit

TLDR;

Fluent Bit กับ Fluentd แทบจะเหมือนกัน, Fluent Bit ครอบคลุมการใช้งานทั่วไปและมีขนาดเบากว่ามาก แต่ถ้าใช้งานท่ายาก Fluentd จะครบเครื่องกว่า

Fluentd is an open source data collector, which lets you unify the data collection and consumption for a better use and understanding of data.

fluentd.org

Fluent Bit is a super fast, lightweight, and highly scalable logging and metrics processor and forwarder. It is the preferred choice for cloud and containerized environments.

fluentbit.io

จากข้างต้นจะเห็นได้ว่า Fluentd และ Fluent Bit มีความคล้ายคลึงกันมาก

ทั้ง Fluentd และ Fluent Bit สามารถทำงานเป็น aggregator และ forwarder ได้ทั้งคู่ด้วยตัวของมันเอง

ด้วย Fluent Bit (2014) ถูกสร้างขึ้นบนพื้นฐานต่าง ๆ ของ Fluentd (2011) ทั้ง architecture และ general design ทำให้ได้รับแนวคิดที่ดีที่สุดจาก Fluentd

และปัจจุบัน (2022) issues ต่าง ๆ ที่เคยเป็นจุดด้อยของ Fluent Bit ก็ได้รับแก้ไขไปเป็นจำนวนมากแล้ว

หรือพูดง่าย ๆ คือ

Fluent Bit ครอบคลุมการใช้งานทั่วไปและมีขนาดเบากว่ามาก แต่ถ้าใช้งานท่ายาก Fluentd จะครบเครื่องกว่า

:dove:

ทั้งนี้ทั้งนั้น การเลือกใช้ขึ้นอยู่กับความเหมาะสมและ trade-offs ต่าง ๆ

ตารางเปรียบเทียบในด้านต่าง ๆ

Fluentd มี plugins เยอะมากกก

Reference: Fluentd & Fluent Bit - Fluent Bit: Official Manual

4 Likes

น่าสนใจครับ กำชังจะชองเอามาฟีด web log เข้า elasticSearch อยู่เลย

พอมีประสบการณ์ไหมครับ ถ้านับความเร็ว หรือปริมาณข้อมูลแบบไหนที่เป็น cut point ว่าใช้ fluent bit เถอะ fluentd ไม่ไหวแล้ว

จุด cut point น่าสนใจมากครับ ส่วนนี้ผมยังใหม่อยู่ ขอรอฟังจากผู้มีประสบการณ์ด้วยคนครับ :sweat_smile:

อีกหนึ่งจุดที่น่าสนใจคือใน document ของ Amazon EKS เรื่อง Send logs to CloudWatch Logs แนะนำให้ใช้ Fluent Bit เนื่องจากมีประสิทธิภาพมากกว่าและอาจจะไม่ support Fluentd ในอนาคตแล้วครับ

We strongly recommend that you migrate to use FluentBit with Container Insights whenever possible. Using FluentBit as the log forwarder for Container Insights provides significant performance gains.

1 Like

แอบแท็กพี่เหน่ง @Nengchakun เผื่อเคยลองเทียบกันระหว่าง Fluentd กับ Fluent Bit ครับ :smile:

เล่าที่ทำคร่าวๆ ครับ

  1. input เป็น log files จาก containers ที่ deploy บน k8s
  2. parser เป็น pre-defined log ต่างๆ เช่น nginx, ambassador, envoy, json และ custom เอง
  3. output เป็น kafka

ตอนแรกเคยพิจารณา fluent bit คับ แต่เจอว่าตอนนั้นยังทำ custom parser ด้วย regex ไม่ได้ เลยกลายเป็นถูกบังคับต้องใช้ fluentd เท่านั้น

ตอนนี้ พอได้มารีวิวคร่าวๆ พบว่า function พื้นฐานเหมือนจะเพียงพอต่องานที่พี่ต้องทำแล้ว น่าสนใจมาก ที่จะเอามาใช้งาน เพื่อลด resource เพราะเจอเคส memory บวมเรื่อยๆ เพราะหลักๆ มันเป็น ruby แต่ถ้าใช้ c อาจจะช่วยให้ mem ลด

แต่สิ่งที่น่ากลัวคือ ตอน debug คับ พี่ว่า debug ด้วย ruby ที่เป็น interpreter เบาแรงกว่า c ครับ พอดีพี่มี custom gem ปรับไปด้วย

อีก 1 ประเด็นคือท่า scaling ของ fluentbit ทำยังไง? อันนี้ยังหา doc ไม่เจอคับ
เล่าในมุม fluentd ละกัน คือมันมีระบบ supervisor แตกเป็น process หลายๆ process ใน process หลักอีกที เลยทำให้มี parallel processing ได้

พี่ว่าพี่ต้องเอาไปลอง พี่อยากรู้ว่าถ้า fluent bit ขายว่าเล็ก และ High Performance และมันจะพอกับงาน scale ที่พี่ทำไหม ไว้ลองแล้วจะเอามาเล่าให้ฟังคับ

สรุป ไม่มี cut point ให้ครับ 5555
แต่ถ้าเอา idea พี่นะ ให้เริ่มที่ fluentbit ไปเลย function พื้นฐาน ดูแทบจะตอบโจทย์แทบจะทุกโจทย์แล้ว
ถ้าปัญหาเยอะ แล้วไม่มี concern เรื่อง memory ค่อยย้ายไป fluentd

2 Likes