Edited at
FluentdDay 17

あんまり知られてない機能について

More than 3 years have passed since last update.

Fluentdであんまり有名じゃないけど,使うとちょっと便利な機能の紹介.()で囲われているのは,それが利用可能になったバージョンです.


idパラメータ (v0.10.33)

プラグインには設定で@id(idも可)が指定出来ます.@idが指定されていない場合には,Rubyのobject_idが使われます.in_monitor_agentはこの値をplugin_idフィールドに入れるので,設定しておくと再起動しても値が変わらず便利です.

<source>

@type monitor_agent
</source>

上のだと,状態を取得した結果は以下になります.plugin_idに注目してください.

{

"plugins" : [
{
"plugin_category" : "input",
"output_plugin" : false,
"config" : {
"@type" : "monitor_agent"
},
"type" : "monitor_agent",
"retry_count" : null,
"plugin_id" : "object:3fee7a0e4cc0"
}
]
}

これを以下のように変更します.

<source>

@type monitor_agent
@id monitor_agent_input
</source>

そうすると,以下のようにmonitor_agent_inputplugin_idにセットされるようになります.

{

"plugins" : [
{
"plugin_category" : "input",
"output_plugin" : false,
"config" : {
"@id" : "monitor_agent_input",
"@type" : "monitor_agent"
},
"type" : "monitor_agent",
"retry_count" : null,
"plugin_id" : "monitor_agent_input"
}
]
}


@プレフィックスパラメータ

v0.12/v0.10.59からv1フォーマットにおいてですが,システムの設定はプラグインそのものの設定とのコンフリクトをさけるために,@をつけることになりました.今の所,以下の3つが該当します.



  • @type: 今までのtypeと同じ


  • @id: 今までのidと同じ


  • @label: ラベルを指定する

このうち,@type@idtypeidも後方互換性のために使えるようになってます.


Rubyコードの埋め込み (v0.10.46)

v1フォーマット,つまり--use-v1-configを与えた時に使える機能ですが,"#{}"でRubyコードが埋め込めます.

<filter **>

@type record_transformer
<record>
key "#{ENV['KEY']}"
hostname "#{Socket.gethostname}"
</record>
</filter>

上記のように,環境変数を埋め込んだり,簡単なRubyのコードであれば呼び出すことが出来ます.


config_section (v0.10.46)

プラグイン開発者向けの機能です.

out_forwardの<server>のような複数存在可能なセクションを自動で設定出来るようにしてくれる機能です.今まではconfig_paramしかなくて書ける設定の幅が小さかったのですが,config_sectionなどでだいたいのケースはカバー出来ます.

Fluentdのテストのtest_configurable.rbにあるように,以下のように書けます.

class Base3 < Base2

config_section :node do
config_param :name, :string, :default => "node"
config_param :type, :string
end
config_section :branch, required: true, multi: true do
config_argument :name, :string
config_param :size, :integer, default: 10
config_section :leaf, required: false, multi: true do
config_param :weight, :integer
config_section :worm, param_name: 'worms', multi: true do
config_param :type, :string, default: 'ladybird'
end
end
end

# other methods
end

必須かどうかのrequiredや,複数存在する可能性があるかどうかを指定するmultiなど,いくつか設定があります.この辺,ドキュメントすべきなんですが間に合ってません…v0.12向けに色々と追加しまくっている所なので,一緒にやる予定です.


--without-sourceオプション (v0.10.52)

Inputプラグインを起動させなくする機能です.ローカルに貯まっているバッファの再転送だけしたいという時に,Inputプラグインが立ち上がってしまうとまたイベントが来る可能性があるので,それらを防ぐことが出来ます.


out_fileのappendパラメータ (v0.10.49)

out_fileはデフォルトでファイルに追記せずに連番でチャンクを別々のファイルに書き出します.

log.20141219_0.log

log.20141219_1.log
...
log.20141220_1.log

これは並列に処理出来たりと便利なんですが,場合によっては時間内のファイルは一つにまとめて欲しい,という要望もあったりします.appendを使うと,以下のように連番にせずに一つのファイルにマージします.

log.20141219.log

log.20141220.log
...


TCP heartbeat (v0.10.31)

Fluentdのin_forward / out_forwardは死活監視にデフォルトUDPを使いますが,TCPも使えます.out_forward側でheartbeat_type tcpを指定するだけです.環境によってはUDPがうまく行かない時もあるので,問題があるときは試してみてください.

v0.14からは,TCP heartbeatがデフォルトになる予定です: Change default in_forward heartbeat type to TCP #450


その他

他にも思い出したのものがあれば追記するかもしれません.リポジトリのChangeLogや,各年のUpdate記事をみれば,他にも追加されている機能に関しては眺めることが出来ます.また,Advent Calendarにも色々と記事が投稿されているので,見返してみるのも良いでしょう.

今回ログ周りは意図的に省いてます.以下を参照してください.

それでは良いロギングライフを〜