SlideShare una empresa de Scribd logo
1 de 38
Fluentd1.2 & Fluent Bit
About Me
 水野 聖也 @ saint1991 (GitHub)
 CyberAgent AdTech Studio
 共通基盤データエンジニア => MLOps系エンジニア
 fluentの中の人ではない
2
Topics
 Internal Fluentd v1.2
 0.14以降ではここが変わった
 Fluent Bitについて
 Fluentd vs Fluent Bit性能比較
 AdTech StudioとFluentd (利用事例紹介的な)
 そんなに変わったことはしてないので,尺が余って
しょうがなければ話します.
3
Internal Fluentd 1.2
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
マルチプロセス
ServerModuleの役割
 Metrics Server
 record数などいくつかmetricsを内部でとっている.
6
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
ServerModuleの役割
 Signalのハンドリング
 SIGCONT: thread dump
8
ServerModule
HTTP RPC
WorkerModule
dump
Internal
State
https://github.com/frsyuki/sigdump
Internal Fluentd v1.2
9
RootAgent
 Configに基づきPluginの接続関係を構築
 Pluginのロード (Pluginのconfigureもここ)
Engine
configure EventRouter
init  各種初期化 (EventRouterもここで作成)
run  各種Pluginのstart
Pluginの起動
Plugins overview
10
Input Parser
Filters
“1526795940, 480x320,…”
データソースからログを取得
データの中身をみて任意の処理
ログをparseして構造化
@time Fluent::EventTime(1526795940)
@record { size: 480x320, …}
Formatter
データのフォーマッティング
Buffer
Output
データチャンクのバッファリングデータチャンクのバッファリング
データのチャンクの送信
生ログ
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
※ リンク先のPlugin
 Pluginは馴染みのあるものを読むのがオススメ
 自分は下記のPluginを辿りました.
 Input: tail
 Parser: csv
 Filter: grep
 Formatter: msgpack
 Buffer: file
 Output: stdout
12
What’s new in v0.14?
Fluentd1.x
 Fluentd v0.12
 Fluentd v0.14
 Fluentd v1.0
14
What’s new?
 Bufferのflush処理が高速化
 bufferへのcommitとflushが非同期に
 flushの条件にサイズ,時間を指定可能に
 マルチプロセスワーカーのビルトインサポート
 特定のprocessのみに対する
設定が記述が可能になった.
 マルチプロセス非対応の
Pluginも併用可能に!
15
<system>
workers 4
<system>
<worker 0>
<source>
@type tail
</source>
</worker>
What’s new?
 EventTimeがナノ秒までサポート
 Fluent Protocol v1 @ forward
 TLSのサポートで安全性が向上
 Compressionのサポート(CPUは余計に食うので注意)
 ただしgzipは外のコマンドを使った方がベター
16
Fluent Bit
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
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
Overview of Fluent Bit
20
flb_engineentrypoint
シグナルハンドリング
Configの読み込み
Pluginの初期化
ライフライクルの管理
Plugins
内部構造の大枠はほぼ同じ
おなじみ系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のログ収集には十分使えそう!
How to write plugins?
 ビルトインのプラグインは全てC言語
 汎用的なら本家リポジトリにPR (まだ少ないのでチャンス!)
 Fluent Bit自体をライブラリとして使い,
pluginを足したオレオレFluent Bitを自前ビルド
 (Library Mode)
22
Fluentdみたいに
外付けできないの?
23
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のみ
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
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
Fluentd vs Fluent Bit
性能比較
ザルな性能評価
 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
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
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>
ザルな性能評価
31
td-agent-bit
[SERVICE]
Flush 5
[INPUT]
Name dummy
Tag fluent.client.in
Rate 500000
[OUTPUT]
Name forward
Match fluent.client.in
Host 10.8.2.74
Port 24224
Throughput
32
+8.63MB/s
(参考記録)
1.64MB/s
(約21000 records /s)
(約+138000 records /s)
5倍以上!
実際には
 Fluent Bitの計測ではServer側のFluentdが
追いつかなくなってしまった…
 公式では500000 records / s * coreと言われている.
 Fluentdもまだまだチューニングの余地あり.
33
Conclusion
 プラグイン数はFluentdの圧勝
 性能面ではFluent Bitの圧勝
34
+750 vs 35
1.64MB/s vs +8.43MB/s
Conclusion
 簡単なことしかしないところなら積極的に
Fluent Bitを試していってよさそう!
 Productionにはまだやや早い感
 ドキュメントなど情報が少なめ
 プラグインによって完成度に差がある.
35
Thank you!!
リファレンス
 KubeCon2018 中川さんの発表
 Fluentdの基礎的な概要
 ログ収集のパターン
 KubeCon2018 Silvaさんの発表
 ユーザの質疑に一問一答していくセッション
 ParserをPod定義側に記述できないか談義
 リソース調整
37
https://www.youtube.com/watch?v=BtGOTIkxnGE
https://www.youtube.com/watch?v=TqW-b60AiNk
リファレンス
 KubeCon2016 Silvaさんの発表
 Fluent Bitに関して一番詳しい
 あらびきさんの記事
 Fluentdの内部の詳細な解説
 障害対応する際にも!
38
https://www.youtube.com/watch?v=395iaisdZEY
https://abicky.net/2017/10/23/110103/

Más contenido relacionado

La actualidad más candente

Unbound/NSD最新情報(OSC 2013 Tokyo/Spring)
Unbound/NSD最新情報(OSC 2013 Tokyo/Spring)Unbound/NSD最新情報(OSC 2013 Tokyo/Spring)
Unbound/NSD最新情報(OSC 2013 Tokyo/Spring)
Takashi Takizawa
 
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くしたNginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
toshi_pp
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
 

La actualidad más candente (20)

Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
 
Anthos を使ったエンタープライズ向けクラスタの設計とアップグレード戦略のススメ(CloudNative Days Tokyo 2021 発表資料)
Anthos を使ったエンタープライズ向けクラスタの設計とアップグレード戦略のススメ(CloudNative Days Tokyo 2021 発表資料)Anthos を使ったエンタープライズ向けクラスタの設計とアップグレード戦略のススメ(CloudNative Days Tokyo 2021 発表資料)
Anthos を使ったエンタープライズ向けクラスタの設計とアップグレード戦略のススメ(CloudNative Days Tokyo 2021 発表資料)
 
TripleO Deep Dive 1.1
TripleO Deep Dive 1.1TripleO Deep Dive 1.1
TripleO Deep Dive 1.1
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
eBPFを用いたトレーシングについて
eBPFを用いたトレーシングについてeBPFを用いたトレーシングについて
eBPFを用いたトレーシングについて
 
HTTP/2 入門
HTTP/2 入門HTTP/2 入門
HTTP/2 入門
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
 
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
MongoDBの監視
MongoDBの監視MongoDBの監視
MongoDBの監視
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれや
 
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallZabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
 
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
Unbound/NSD最新情報(OSC 2013 Tokyo/Spring)
Unbound/NSD最新情報(OSC 2013 Tokyo/Spring)Unbound/NSD最新情報(OSC 2013 Tokyo/Spring)
Unbound/NSD最新情報(OSC 2013 Tokyo/Spring)
 
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くしたNginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
 
自宅インフラの育て方 第2回
自宅インフラの育て方 第2回自宅インフラの育て方 第2回
自宅インフラの育て方 第2回
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 

Similar a Fluentd1.2 & Fluent Bit

Tizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native apiTizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native api
Naruto TAKAHASHI
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
terurou
 
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築GitLab & web hooks & git-flowで実現する企業向けgit環境の構築
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築
CROOZ, inc.
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
Shota Umeda
 

Similar a Fluentd1.2 & Fluent Bit (20)

PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
 
ここが変わったTizen sdk2.0alpha
ここが変わったTizen sdk2.0alphaここが変わったTizen sdk2.0alpha
ここが変わったTizen sdk2.0alpha
 
Prometheus meetup tokyo#3 slide
Prometheus meetup tokyo#3 slidePrometheus meetup tokyo#3 slide
Prometheus meetup tokyo#3 slide
 
Gstreamer Basics
Gstreamer BasicsGstreamer Basics
Gstreamer Basics
 
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 
20180616 to takepartflow
20180616 to takepartflow20180616 to takepartflow
20180616 to takepartflow
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
Ossで作成するチーム開発環境
Ossで作成するチーム開発環境Ossで作成するチーム開発環境
Ossで作成するチーム開発環境
 
Tizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native apiTizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native api
 
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 
IL2CPPに関する軽い話
IL2CPPに関する軽い話IL2CPPに関する軽い話
IL2CPPに関する軽い話
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
cs-11. Python の条件分岐と繰り返し,ステップ実行
cs-11. Python の条件分岐と繰り返し,ステップ実行cs-11. Python の条件分岐と繰り返し,ステップ実行
cs-11. Python の条件分岐と繰り返し,ステップ実行
 
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
 
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築GitLab & web hooks & git-flowで実現する企業向けgit環境の構築
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
 
[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005
 
2015.04.19 WordBench 埼玉 Git & WordPress
2015.04.19 WordBench 埼玉 Git & WordPress2015.04.19 WordBench 埼玉 Git & WordPress
2015.04.19 WordBench 埼玉 Git & WordPress
 
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
 
Confluence と DITA による Webマニュアル作成フロー
Confluence と DITA によるWebマニュアル作成フローConfluence と DITA によるWebマニュアル作成フロー
Confluence と DITA による Webマニュアル作成フロー
 

Más de Seiya Mizuno

Más de Seiya Mizuno (9)

SysML meetup
SysML meetupSysML meetup
SysML meetup
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
 
Connect S3 with Kafka using Akka Streams
Connect S3 with Kafka using Akka Streams Connect S3 with Kafka using Akka Streams
Connect S3 with Kafka using Akka Streams
 
Connect S3 with Kafka using Akka Streams
Connect S3 with Kafka using Akka StreamsConnect S3 with Kafka using Akka Streams
Connect S3 with Kafka using Akka Streams
 
Prometheus
PrometheusPrometheus
Prometheus
 
Introduction to Finch
Introduction to FinchIntroduction to Finch
Introduction to Finch
 
The future of Apache Hadoop YARN
The future of Apache Hadoop YARNThe future of Apache Hadoop YARN
The future of Apache Hadoop YARN
 
Yarn application-master
Yarn application-masterYarn application-master
Yarn application-master
 
Yarn resource-manager
Yarn resource-managerYarn resource-manager
Yarn resource-manager
 

Fluentd1.2 & Fluent Bit

  • 2. 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 マルチプロセス
  • 6. ServerModuleの役割  Metrics Server  record数などいくつかmetricsを内部でとっている. 6
  • 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
  • 8. ServerModuleの役割  Signalのハンドリング  SIGCONT: thread dump 8 ServerModule HTTP RPC WorkerModule dump Internal State https://github.com/frsyuki/sigdump
  • 9. Internal Fluentd v1.2 9 RootAgent  Configに基づきPluginの接続関係を構築  Pluginのロード (Pluginのconfigureもここ) Engine configure EventRouter init  各種初期化 (EventRouterもここで作成) run  各種Pluginのstart Pluginの起動
  • 10. Plugins overview 10 Input Parser Filters “1526795940, 480x320,…” データソースからログを取得 データの中身をみて任意の処理 ログをparseして構造化 @time Fluent::EventTime(1526795940) @record { size: 480x320, …} Formatter データのフォーマッティング Buffer Output データチャンクのバッファリングデータチャンクのバッファリング データのチャンクの送信 生ログ
  • 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
  • 12. ※ リンク先のPlugin  Pluginは馴染みのあるものを読むのがオススメ  自分は下記のPluginを辿りました.  Input: tail  Parser: csv  Filter: grep  Formatter: msgpack  Buffer: file  Output: stdout 12
  • 13. What’s new in v0.14?
  • 14. Fluentd1.x  Fluentd v0.12  Fluentd v0.14  Fluentd v1.0 14
  • 15. What’s new?  Bufferのflush処理が高速化  bufferへのcommitとflushが非同期に  flushの条件にサイズ,時間を指定可能に  マルチプロセスワーカーのビルトインサポート  特定のprocessのみに対する 設定が記述が可能になった.  マルチプロセス非対応の Pluginも併用可能に! 15 <system> workers 4 <system> <worker 0> <source> @type tail </source> </worker>
  • 16. What’s new?  EventTimeがナノ秒までサポート  Fluent Protocol v1 @ forward  TLSのサポートで安全性が向上  Compressionのサポート(CPUは余計に食うので注意)  ただしgzipは外のコマンドを使った方がベター 16
  • 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
  • 27. Fluentd vs Fluent Bit 性能比較
  • 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>
  • 31. ザルな性能評価 31 td-agent-bit [SERVICE] Flush 5 [INPUT] Name dummy Tag fluent.client.in Rate 500000 [OUTPUT] Name forward Match fluent.client.in Host 10.8.2.74 Port 24224
  • 33. 実際には  Fluent Bitの計測ではServer側のFluentdが 追いつかなくなってしまった…  公式では500000 records / s * coreと言われている.  Fluentdもまだまだチューニングの余地あり. 33
  • 34. Conclusion  プラグイン数はFluentdの圧勝  性能面ではFluent Bitの圧勝 34 +750 vs 35 1.64MB/s vs +8.43MB/s
  • 35. Conclusion  簡単なことしかしないところなら積極的に Fluent Bitを試していってよさそう!  Productionにはまだやや早い感  ドキュメントなど情報が少なめ  プラグインによって完成度に差がある. 35
  • 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/