毎日書く

のを目標に頑張るか

2017年7月19日

fluentdの設定をテストするためにfluentspecってGemを作った

fluentspec | RubyGems.org | your community gem host

github.com

今、仕事でKubernetesのクラスタ上で動いているPodのログをどうこうみたいな仕事をしていて、2人で書いているFluentdのコンテナがあり、「簡単なテストとか欲しいよね」みたいな感じでやっつけで作った。

使い方としては簡単で

Fluentspec.setup './fluent.conf'

するだけ。

setupを行うと、

Fluentspec.engine       # => Fluent::Engine
Fluentspec.root_agent   # => Fluent::Engine.root_agent
Fluentspec.inputs       # => Fluent::Engine.root_agent.inputs
Fluentspec.filters      # => Fluent::Engine.root_agent.filters
Fluentspec.outputs      # => Fluent::Engine.root_agent.outputs
Fluentspec.event_router # => Fluent::Engine.root_agent.event_router

みたいな感じのメソッドを提供する。

あるタグにマッチするフィルター/アウトプットが欲しいみたいなときは

Fluentspec.event_router.match(tag)

のように書くと、フィルターがあればFluent::EventRouter::Pipeline、無ければ直接アウトプットプラグインインスタンスが返ってくる。

詳しくは

fluentspec/example at master · toihrk/fluentspec · GitHub

チラ裏

Fluentd ソースコード完全解説 · GitHub

この辺を最初に読むと良かったのだけれど、Githubリポジトリ上からコードを読み進めてしまっていたので、「dry-runっぽいことすりゃいいでしょ」ということで書いてしまった。

ちなみにfluentspecって名前だけれど、別にRSpecに依存しているとかそんなことはなくて、Rubyのテストフレームワークだったらだいたい使えるはず。

そもそもテストフレームワークで使うような実装にはなっていないので、その辺は良しなに。

そのうちfluentspec-rspecみたいな感じでマッチャ―を提供するようなGemを書くかもしれない。