Más contenido relacionado La actualidad más candente (20) Similar a Fluentd1.2 & Fluent Bit (20) Fluentd1.2 & Fluent Bit2. About Me
水野 聖也 @ saint1991 (GitHub)
CyberAgent AdTech Studio
共通基盤データエンジニア => MLOps系エンジニア
fluentの中の人ではない
2
3. Topics
Internal Fluentd v1.2
0.14以降ではここが変わった
Fluent Bitについて
Fluentd vs Fluent Bit性能比較
AdTech StudioとFluentd (利用事例紹介的な)
そんなに変わったことはしてないので,尺が余って
しょうがなければ話します.
3
5. Internal Fluentd v1.2
5
entrypoint Supervisor
Configの読み込み
ServerEngine
multi process server
ServerModule WorkerModule
Metricsの管理
Workerの管理
• シグナルハンドリングをするRPC
spawn
Engine
Pluginのライフサイクル管理
• configure
• start
• …
WorkerModule
…
Engine
Supervisor#run_worker
マルチプロセス
7. ServerModuleの役割
Signalのハンドリング
SIGINT, SIGTERM, SIGHUP
• メモリバッファ flush => terminate
• configもreloadされる.
SIGUSR1:
• バッファの強制flush
7
ServerModule memory buffer
HTTP RPC
WorkerModule
flush → terminate
ServerModule buffer
HTTP RPC
WorkerModule
flush
9. Internal Fluentd v1.2
9
RootAgent
Configに基づきPluginの接続関係を構築
Pluginのロード (Pluginのconfigureもここ)
Engine
configure EventRouter
init 各種初期化 (EventRouterもここで作成)
run 各種Pluginのstart
Pluginの起動
11. Internal Fluentd v1.2
11
Input Parser EventRouter
parse
Filters
<input.bid>
タグ
Pipeline
タグ + event
Queue
Output
Buffer
Format
chunkmeta
…
emit
events
generate_chunk
enqueue
flush thread
…
write
flush thread
Fluent::EventStream
emit_stream
15. What’s new?
Bufferのflush処理が高速化
bufferへのcommitとflushが非同期に
flushの条件にサイズ,時間を指定可能に
マルチプロセスワーカーのビルトインサポート
特定のprocessのみに対する
設定が記述が可能になった.
マルチプロセス非対応の
Pluginも併用可能に!
15
<system>
workers 4
<system>
<worker 0>
<source>
@type tail
</source>
</worker>
18. Fluent Bit
超軽量版Fluentd
主にIoTなど組み込み機器向けとしてリリース
通常のサーバでももちろん使える.
18
Fluent Bit Fluentd
Language C Ruby (& C)
Dependencies Nothing Ruby & some gems
Memory footprint ~450KB ~40MB
Plugins around 35 more than 750
19. Fluent Bit
StarTechConf 2015でIoT向けfluentとして紹介
本格的な情報が出だしたのはKubeCon2016から?
現在はv0.13.2がstable
事例は(特に日本では)あまりまだ見かけないものの
簡単な処理ができるだけの機能は大方揃ってきている.
19
Logging for Containers by Eduardo Silva, Treasure Data @ Seattle
https://www.youtube.com/watch?v=395iaisdZEY
https://www.slideshare.net/treasure-data/unifying-events-and-logs-into-the-cloud-55392628
20. Overview of Fluent Bit
20
flb_engineentrypoint
シグナルハンドリング
Configの読み込み
Pluginの初期化
ライフライクルの管理
Plugins
内部構造の大枠はほぼ同じ
21. おなじみ系Plugins (抜粋)
21
Input Parser Filter Buffer Output
• tail
• forward
• TCP
• JSON
• RegExp
• grep
• Kubernetes
• file
• memory
• forward
• kafka
• Elasticsearch
• File
• NATS
• Treasure Data
Output系が若干少ないがアプリケーションログや
kubernetesのログ収集には十分使えそう!
22. How to write plugins?
ビルトインのプラグインは全てC言語
汎用的なら本家リポジトリにPR (まだ少ないのでチャンス!)
Fluent Bit自体をライブラリとして使い,
pluginを足したオレオレFluent Bitを自前ビルド
(Library Mode)
22
24. How to write plugins?
外付けのPluginはGolangで書ける!
共有ライブラリとしてビルドして読み込ませることで
Pluginとして動く!
24
https://github.com/fluent/fluent-bit/blob/master/GOLANG_OUTPUT_PLUGIN.md
https://github.com/fluent/fluent-bit-go
※まだOutput Pluginのみ
25. How to write plugins?
package main
import "C"
import (
"github.com/fluent/fluent-bit-go/output"
"unsafe"
)
//export FLBPluginInit
func FLBPluginInit(ctx unsafe.Pointer) int {
return output.FLBPluginRegister(ctx, ”myout", ”Sample Plugin!")
}
//export FLBPluginFlush
func FLBPluginFlush(data unsafe.Pointer, length C.int, tag *C.char) int {
// do something with the data
return 0
}
//export FLBPluginExit
func FLBPluginExit() int {
return 0
}
func main() {
}
25
26. How to write plugins?
1. 共有ライブラリとしてビルド
2. パスに追加してFluent Bitを起動
26
$ go build -buildmode=c-shared -o out_myout.so my_outplugin.go
$ fluent-bit -e /path/to/out_myout.so -i cpu -o myout
28. ザルな性能評価
fine tuningはしてません
こちらの手順でnetwork kernelのみ
28
VS
td-agent-bit
td-agent 3 td-agent 3
In_dummy
out_forward
in_forward
out_file
td-agent 3
out_fileIn_dummy
out_forward
in_forward
VM
OS: Ubuntu 16.04.4 LTS
CPU: Intel(R) Xeon(R) CPU
E5-2680 v3 2.50GHz
Memory: 14GB
29. ザルな性能評価
29
td-agent 3
out_file
td-agent 3
out_file
VM
Ubuntu 16.04.4 LTS
4 core 2.4GHz
14GB memory
<source>
@type forward
port 24224
bind 0.0.0.0
</source>
<match fluent.client.in>
@type file
path /var/log/fluent
<buffer>
@type memory
flush_interval 30s
flush_mode interva
flush_thread_count 4
overflow_action throw_exception
</buffer>
</match>
30. ザルな性能評価
30
td-agent 3
<source>
@type dummy
tag fluent.client.in
rate 500000
auto_increment_key sequence
</source>
<match fluent.client.in>
@type forward
<server>
host 10.8.2.74
port 24224
</server>
<buffer>
@type memory
flush_interval 5s
flush_mode interval
flush_thread_count 4
overflow_action throw_exception
</buffer>
</match>
37. リファレンス
KubeCon2018 中川さんの発表
Fluentdの基礎的な概要
ログ収集のパターン
KubeCon2018 Silvaさんの発表
ユーザの質疑に一問一答していくセッション
ParserをPod定義側に記述できないか談義
リソース調整
37
https://www.youtube.com/watch?v=BtGOTIkxnGE
https://www.youtube.com/watch?v=TqW-b60AiNk
38. リファレンス
KubeCon2016 Silvaさんの発表
Fluent Bitに関して一番詳しい
あらびきさんの記事
Fluentdの内部の詳細な解説
障害対応する際にも!
38
https://www.youtube.com/watch?v=395iaisdZEY
https://abicky.net/2017/10/23/110103/