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_input
がplugin_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
と@id
はtype
とid
も後方互換性のために使えるようになってます.
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にも色々と記事が投稿されているので,見返してみるのも良いでしょう.
- https://github.com/fluent/fluentd/blob/master/ChangeLog
- Fluentd Update 2014
- Fluentd Update 2013
- Fluentd Advent Calendar 2013
今回ログ周りは意図的に省いてます.以下を参照してください.
それでは良いロギングライフを〜