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 นั่นเองเปรียบเทียบความสามารถได้จากตารางด้านล่างครับ หรือถ้าอยากได้ข้อมูลเปรียบเทียบเพิ่มเติมคลิกที่นี่
Fluentd | Fluent Bit | |
---|---|---|
Scope | Containers / Servers | Containers / Servers |
Language | C & Ruby | C |
Memory | ~40MB | ~450KB |
Performance | High Performance | High Performance |
Dependencies | Built as a Ruby Gem, it requires a certain number of gems. | Zero dependencies, unless some special plugin requires them. |
Plugins | More than 650 plugins available | Around 35 plugins available |
License | Apache License v2.0 | Apache License v2.0 |
ติดตั้งและปรับแต่ง 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 อย่างดังนี้
- Section ซึ่งจะเริ่มต้นด้วยเครื่องหมาย [ ] เสมอถ้าหากว่าเราพบเจอเครื่องหมาย [ ] ให้นึกไว้เลยครับคำที่อยู่ในนี้คือ section นั่นเอง ซึ่งในส่วนของ section นั้นจะมีหลัก ๆ อยู่ 4+1 ประเภทครับ ที่บอกว่า 4+1 เพราะไอที่บวกมาหนึ่งนี่เป็นฟีเจอร์เพิ่มเติมแค่นั้นครับ โดยมี 4 อย่างดังนี้
- Service
- Input
- Filter
- Output
- Entries ซึ่งจะปรากฏให้เห็นในรูปของ Key/ Value นั่นเอง ดูรายละเอียดได้จากตัวอย่างข้างบน
- Indent Configuration Mode ซึ่งจะเป็นการเว้นช่องไฟเพื่อแยกแยะระหว่างการตั้งค่าที่เป็นรายละเอียดย่อยลงไปภายใต้การปรับแต่งนั้น ๆ ที่กำลังดำเนินการอยู่ครับ ในส่วนนี้จะเหมือนกับ indent ในภาษา Python ใครที่เขียนโปรแกรมมาคงเข้าใจดีนะครับ จากตัวอย่างข้างบนผมอธิบายไว้ให้แล้วครับ
ส่วนอีกหนึ่งประเภทคือ 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
เราจะมาลงไปทีละส่วนนะครับโดยเริ่มจากส่วนของ Section ซึ่งจะมีรายละเอียดการตั้งค่า หรือปรับแต่งตามนี้โดยผมจะแนะนำไปทีละส่วนเลยนะครับและถ้าหากต้องการข้อมูลเพิ่มเติมในส่วนนี้คลิกที่นี่ครับ
ซึ่งเราจะใช้ @SET Key=Value ในการสร้างและ assign ค่าลงไปในตัวแปรนั้น ๆ และใช้ ${Variable_Name} ในการอ้างถึงตัวแปรนั้น ๆ นั่นเอง
- 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