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