ようへいの日々精進XP

よかろうもん

fluentd がバージョンアップしたので確認した

概要

  • fluentd(td-agent) がバージョンアップしたので確認した

バージョンアップについて

  • Change Log
  • 幾つかの修正等に合わせて、個人的に注目したのは td-agent の起動スクリプトで configtest オプションが利用出来るようになったこと
  • configtest に関しては、改めて Change Log を確認すると 0.10.36 から利用出来るようになった --dry-run オプションを利用している(後述)

バージョンアップ

環境

  • OS は Debian 6.0.7
  • td-agent は既に 0.10.35 が稼働している状態(下図)

f:id:inokara:20130831035249p:plain

バージョンアップ後

  • こちらから deb パッケージをダウンロードして dpkg -i でサクッとインストール
  • 下図のようにバージョンが 0.10.38 となった

f:id:inokara:20130831035441p:plain


個人的目玉な機能を試す

configtest

td-agent の起動スクリプトを見ると新たに configtest が加わっており、td-agent.conf の内容を td-agent 起動前にチェックすることが出来るようなので、色々と試してみる。

td-agent.conf の設定を記述漏れ

td-agent.conf の設定を書き間違えたというシチュエーションで...

f:id:inokara:20130831040337p:plain

カッコの閉じ忘れのまま...configtest を行うと...

f:id:inokara:20130831040423p:plain

ちゃんとチェックしてくれる。

format の正規表現を記述漏れ(1)

複雑な正規表現、どうしても記述漏れしがち...。

f:id:inokara:20130831042056p:plain

上記のように、正規表現[ を書き忘れてしまった場合。

f:id:inokara:20130831042103p:plain

一瞬、アレッと思ったが parser.rbwarning として検知される。

format の正規表現を記述漏れ(2)

さらに記述漏れが続く。

f:id:inokara:20130831042336p:plain

同じく、正規表現] を書き忘れてしまった場合。

f:id:inokara:20130831042431p:plain

検知してくれる。但し、今度は Dry run で...

同じ正規表現の記述漏れなのに前方のチェックは parser.rbwarning となり(ruby 自体が出力するエラー)、後方のチェックは --dry-run になる点がちょっとおもしろい。

どっちもやらかした場合(1)

設定も format の正規表現も間違ってまうオッチョコチョイの場合にどうなるやろーって思ったら...

f:id:inokara:20130831043126p:plain

正規表現[ と設定の < を記述漏れ。

f:id:inokara:20130831043145p:plain

正規表現のエラーはスルーされているみたい。設定の記述漏れのみのエラーが出る。

どっちもやらかした場合(2)

設定 2 箇所も間違ってまうオッチョコチョイの場合。

f:id:inokara:20130831043820p:plain

記載漏れと typo してます。

f:id:inokara:20130831043859p:plain

どうやら最初の記載漏れのチェックで止まっている。二箇所のミスまでは指摘してくれないみたい。

--dry-run

今回の configtest を実現しているのが fluentd--dry-run というオプションのようで、/etc/init.d/td-agent では以下のように記載されている。

ソースを追っていくと ./lib/fluent/supervisor.rbdry_run メソッドに辿りついた(ソースを一部抜粋させて頂きました)

上記の通り、dry_run からさらに個々のメソッドを呼び出している...

さらにそれを自分なりに読み解くと...

  • run_configure から engine.rb(Engin クラス)の parse_config メソッドが呼び出される
  • parse_config メソッド の中で configure メソッドを呼び出していてこのメソッド内で設定ファイルを解析している
  • engine.rb から config.rb(Config クラス) の parse メソッドも require されていてので記述ミスに対しても parse error を出すことが出来る

という風に読み解いてみた。どうだろう...。


ということで

やったこと

  • バージョンアップによって追加された configtest を試してみた
  • --dry-run の挙動についてソースを追ってみた

気づいたこと

正規表現のチェックで挙動が少し違う

  • [] の前と後ろの記述漏れで [ だったら ruby の Warning が出るが ] だと fluentd のエラーとなる

ミスが複数あった場合には最初のチェックのみがチェックされる

  • 行頭からチェックしてエラーだったら exit しているようなので仕方がないのかもしれない