ทำความรู้จักกับ Fluent Bit

ทำความรู้จักกับ Fluent Bit

Fluent Bit คือ Agent ตัวเล็ก ๆ ตัวนึงที่ทำหน้าที่สำหรับเป็นตัว Log Forwarder (ที่เรียกแบบนี้เพราะเราติดตั้งเพื่อกระทำกับ Log นะครับ จริง ๆถ้าจะเรียกให้เข้ากับความเป็น Fluent ควรเรียกว่าเป็น Data Forwarder เพราะ Fluentd เค้าเคลมตัวเองเป็น Data Collector ไม่ใช่ Log Collector ครับ )

Fluentd VS Fluent Bit

          ที่ทำหัวข้อนี้ขึ้นมาเพื่อทำให้คนที่ยังไม่รู้เผื่อเข้ามาอ่านจะได้เข้าใจว่ามันต่างกันยังไงนะครับ ซึ่งจริง ๆ แล้วมันก็คือ Software ตัวลูกของ Fluentd นั่นเองครับ คือผมเขียนจากความเข้าใจของผมนะครับดังนั้นถ้าอยากได้ความชัวร์ให้ไปอ่านเพิ่มเติมได้ที่นี่ มาเริ่มกันเลยดีกว่าตัว Fluentd นั้นทำหน้าที่หลัก ๆ อยู่ 3 อย่างคือ เป็น Log Collector, Processor และ Aggregator และตัว Fluent Bit นี้จะทำหน้าที่เหมือนกับ Fluentd ครับเพียงแต่ไม่มีความสามารถในการทำ Aggregator นั่นเองเปรียบเทียบความสามารถได้จากตารางด้านล่างครับ หรือถ้าอยากได้ข้อมูลเปรียบเทียบเพิ่มเติมคลิกที่นี่


FluentdFluent Bit
ScopeContainers / ServersContainers / Servers
LanguageC & RubyC
Memory~40MB~450KB
PerformanceHigh PerformanceHigh Performance
DependenciesBuilt as a Ruby Gem, it requires a certain number of gems.Zero dependencies, unless some special plugin requires them.
PluginsMore than 650 plugins availableAround 35 plugins available
LicenseApache License v2.0Apache License v2.0
จากตารางข้างบนจะสังเกตได้ว่า Scope การทำงานนั้นเหมือนกันเลยนะครับ เพียงแต่ความสามารถในการทำงานไม่เท่ากันแต่ไม่ใช่แค่นั้น Fluent Bit ยังกินทรัพยากรเครื่องแทบจะเรียกได้ว่าน้อยกว่า Fluentd 100 เท่าได้เลย แต่ก็ต้องแลกมากับการรองรับ Plugin ที่น้อยกว่านั่นเองครับ

ติดตั้งและปรับแต่ง Fluent Bit

          อย่างที่บทความก่อน ๆ ได้เขียนไว้นะครับเราใช้ Ubuntu 18.04 ในการติดตั้งดังนั้นวิธีในลิงค์นี้จะเป็นลิงค์สำหรับติดตั้งบน Ubuntu เท่านั้นหากท่านใดต้องการวิธีติดตั้งใน Linux Distro อื่น ๆ หรือบนระบบปฏิบัติการอื่น ๆ เชิญคลิกที่นี่ เพื่อเข้าไปอ่านข้อมูลเพิ่มเติมได้เลยครับ

เพิ่ม GPG Key ด้วยคำสั่ง
$ wget -qO - https://packages.fluentbit.io/fluentbit.key | sudo apt-key add -
จากนั้นให้เพิ่ม repository ของ Fluent Bit ไว้ที่ท้ายไฟล์ sources.list นะครับ
$ sudo vim /etc/apt/sources.list
ที่บรรทัดสุดท้ายให้เพิ่มบรรทัดใหม่แล้วพิมพ์
deb https://packages.fluentbit.io/ubuntu/bionic bionic main
ต่อท้ายแล้วเซฟแล้วออกได้เลยครับ

$ sudo apt update -y
$ sudo apt install td-agent-bit -y
 
หลักจากติดตั้งเสร็จแล้วให้พิมพ์
$ sudo systemctl enable td-agent-bit.service
$ sudo systemctl start td-agent-bit.service
$ sudo systemctl status td-agent-bit.service

ผลลัพธ์ควรได้แบบนี้
● td-agent-bit.service - TD Agent Bit
   Loaded: loaded (/lib/systemd/system/td-agent-bit.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2019-02-21 14:16:30 +07; 1h 57min ago
 Main PID: 16524 (td-agent-bit)
    Tasks: 2 (limit: 9472)
   CGroup: /system.slice/td-agent-bit.service
           └─16524 /opt/td-agent-bit/bin/td-agent-bit -c //etc/td-agent-bit/td-agent-bit.conf

...

ถ้าได้ตามนี้ถือว่าการติดตั้งเสร็จสิ้นครับเราจะมาดำเนินการต่อในส่วนของการปรับแต่ง Fluent Bit ให้สามารถทำงานได้กันครับ

          เราจะมาเริ่มกันที่รูปแบบของไฟล์ config ที่เราจะต้องเข้าไปยุ่งกันก่อนนะครับ ที่ต้องเข้ามายุ่งเนี่ยก็เพราะว่าเจ้าไฟล์นี้มันมีจะสร้างปัญหาให้เราได้พอสมควรเวลาเรามีการแก้ไข (ซึ่งปกติก็ต้องแก้ไขอยู่แล้ว) หรือมีการปรับแต่งค่าในไฟล์ ถ้าหากทำไม่ถูก format รับรองคุณอาจจะหงุดหงิดแน่นอน เรามาเริ่มกันที่ concept แล้วกันนะครับเค้าบอกว่ารูปแบบการแก้ไขค่า config ไฟล์นั้นมี concept อยู่ 3 อย่างดังนี้

  1. Section ซึ่งจะเริ่มต้นด้วยเครื่องหมาย [ ] เสมอถ้าหากว่าเราพบเจอเครื่องหมาย [ ] ให้นึกไว้เลยครับคำที่อยู่ในนี้คือ section นั่นเอง ซึ่งในส่วนของ section นั้นจะมีหลัก ๆ อยู่ 4+1 ประเภทครับ ที่บอกว่า 4+1 เพราะไอที่บวกมาหนึ่งนี่เป็นฟีเจอร์เพิ่มเติมแค่นั้นครับ โดยมี 4 อย่างดังนี้
    1. Service
    2. Input
    3. Filter
    4. Output
    ส่วนอีกหนึ่งประเภทคือ Include File นั่นเองใช้สำหรับเวลาที่เรามีการปรับแต่งค่าของ config file แยกไว้หลาย ๆ ไฟล์แล้วจะเอามารวมกัน (ในบางกรณีมีการรับ log มาจากอุปกรณ์ที่หลากหลาย หรือต้องการ forward ไปหลาย ๆ ที่อาจจะมีการปรับแต่งที่ซับซ้อนจึงใช้การแยกไฟล์ config ออกเป็นส่วนแล้วนำมารวมกันในไฟล์หลักนั่นเอง)เป็นไฟล์เดียวก็แนะนำให้เอามารวมกันไว้ภายใต้ section นี้ได้เลย ส่วนตัวอย่างก็ด้านล่างเลยครับ

    [SERVICE]  <<  นี่คือบรรทัดที่บ่งบอกว่าเริ่มต้น Section นั้น ๆ
        # Flush
        # =====
        # Set an interval of seconds before to flush records to a destination
        Flush        5  <<  นี่คือส่วนที่เป็น Entries หรือ Key / Value
    1234  <<  นี่คือส่วนของ Indent ในที่นี้จะสังเกตเห็นว่า Indent = 4 ซึ่ง Indent คือช่องว่าง นั่นหมายความว่าแต่ละส่วนต้องเว้นวรรคทีละ 4 ช่องว่างนั่นเองแต่ผมพิมพ์ 1234 ไว้ให้เห็นชัด ๆ แค่นั้นเองครับ
        # Daemon
        # ======
        # Instruct Fluent Bit to run in foreground or background mode.
        Daemon       Off
    
        # Log_Level
        # =========
        # Set the verbosity level of the service, values can be:
        #
        # - error
        # - warning
        # - info
        # - debug
        # - trace
        #
        # By default 'info' is set, that means it includes 'error' and 'warning'.
        Log_Level    info
    
        # Parsers_File
        # ============
        # Specify an optional 'Parsers' configuration file
        Parsers_File parsers.conf
        Plugins_File plugins.conf
    
  2. Entries ซึ่งจะปรากฏให้เห็นในรูปของ Key/ Value นั่นเอง ดูรายละเอียดได้จากตัวอย่างข้างบน
  3. Indent Configuration Mode ซึ่งจะเป็นการเว้นช่องไฟเพื่อแยกแยะระหว่างการตั้งค่าที่เป็นรายละเอียดย่อยลงไปภายใต้การปรับแต่งนั้น ๆ ที่กำลังดำเนินการอยู่ครับ ในส่วนนี้จะเหมือนกับ indent ในภาษา Python ใครที่เขียนโปรแกรมมาคงเข้าใจดีนะครับ จากตัวอย่างข้างบนผมอธิบายไว้ให้แล้วครับ
          เราจะมาลงไปทีละส่วนนะครับโดยเริ่มจากส่วนของ Section ซึ่งจะมีรายละเอียดการตั้งค่า หรือปรับแต่งตามนี้โดยผมจะแนะนำไปทีละส่วนเลยนะครับและถ้าหากต้องการข้อมูลเพิ่มเติมในส่วนนี้คลิกที่นี่ครับ

  • Service เป็นส่วนที่ใช้ในการกำหนด Global Properties ของ service ซึ่งมีตัวแปรภายใต้ section นี้หลายตัว
  • Input ใช้สำหรับกำหนด source ของข้อมูลที่จะรับเข้ามา (ในส่วนนี้จะคล้ายกับ input plugin ของ fluentd ครับ) ซึ่งจะทำให้เราสามารถแบ่งแยก source ที่ส่งข้อมูลเข้ามาได้ครับซึ่งในแต่ละ input สามารถเพิ่ม configuration key ของเราเองลงไปด้วยได้นะครับซึ่งมีอยู่ 2 Key ที่เพิ่มได้(จากที่อ่านมานะครับ) คือ Name ซึ่งเป็นตัวบอกให้ fluent bit ทราบว่าเราจะใช้ plugin ไหนซึ่งจะบอกว่า name = plugin name ก็ได้ครับและอีกตัวคือ Tag ซึ่งจะเป็นป้ายแปะไว้ที่ข้อมูลทุก record ที่วิ่งผ่าน input name ข้างต้นเพื่อบอกให้ Agent ตัวอื่น หรือ Fluentd Server ทราบว่าข้อมูลจาก event หรือ record นี้มาจากแหล่งข้อมูลใด
  • Filter ใช้สำหรับคัดกรอง event หรือ record คล้าย ๆ กับ filter plugin ของ fluentd ครับ และเช่นกันเราสามารถเพิ่ม key ของเราเข้าไปได้ครับ แต่ในส่วนนี้จะมี key อยู่ 3 key ดังนี้ครับ key แรกคือ Name ใช้สำหรับระบุชื่อ filter plugin ที่ใช้ครับ Key ต่อมาคือ Match ใช้สำหรับตรวจสอบ pattern ที่ถูกส่งเข้ามาว่าตรงกับที่ต้องการหรือไม่ ซึ่งในส่วนนี้การตรวจสอบจะเป็นแบบ case sensitive นะครับ และรองรับการใช้เครื่องหมาย asterisk หรือ * ที่บ้านเราเรียกว่าดอกจันทน์นั่นเอง และ Key สุดท้ายคือ Match_Regex ใช้สำหรับตรวจสอบ pattern ที่รับเข้ามาด้วย regular expression นั่นเองครับ
  • Output ใช้สำหรับกำหนดจุดหมายปลายทางให้กับ event ที่รับเข้ามาครับว่าหลังจาก Match แล้วจะให้ทำอะไรครับในส่วนนี้มี Key อยู่ 3 Key เช่นเดียวกับ Filter แต่จะไม่สามารถเพิ่ม Key อื่น ๆ เข้าไปได้ หรือเราไม่สามารถเพิ่ม Key เองได้ครับ
  • Include ซึ่งเป็นส่วนเสริมที่ใช้สำหรับรวบรวม configuration file ที่มีมากกว่าหนึ่งไฟล์มาอยู่ในไฟล์เดียวกันใช้งานง่าย ๆ 
@INCLUDE somefile.conf  <<  ใช้ในกรณีที่ config file อยู่ใน path เดียวกัน
@INCLUDE cisco.*.conf  <<  ใช้ในกรณีที่มีอุปกรณ์ประเภทเดียวกันหลายตัว แล้วต้องการแยกไฟล์ config ออกจึงใช้การรูปแบบการ match ที่เรียกว่า wildcard match
@INCLUDE *.conf  <<  ไม่ควรใช้แบบนี้เนื่องจากจะทำให้เกิดความผิดพลาดได้ง่ายครับ
...
จริง ๆ ยังมีการ config อีกแบบคือการใช้ตัวแปรเข้ามาร่วมครับเช่น
@SET my_input=cpu
@SET my_output=stdout

[SERVICE]
    Flush 1

[INPUT]
    Name ${my_input}

[OUTPUT]
    Name ${my_output}
...


ซึ่งเราจะใช้ @SET Key=Value ในการสร้างและ assign ค่าลงไปในตัวแปรนั้น ๆ และใช้ ${Variable_Name} ในการอ้างถึงตัวแปรนั้น ๆ นั่นเอง

หากต้องการศึกษาข้อมูลเพิ่มเติมคลิกที่นี่


No comments:

Post a Comment

วิธีการติดตั้ง และตั้งค่า Apache2 พร้อมเปิดใช้งาน HTTPS ด้วยวิธี Self-Sign บน Ubuntu 18.04.1 LTS

ดีจร้า วันนี้ช่วงเช้าว่างเลยมาเขียนบทความเพิ่มเติมเกี่ยวกับการติดตั้ง และตั้งค่า Apache2 ให้สามารถใช้งานผ่าน HTTPS ได้กันมาเริ่มกันเลยครับ ...