Skip to content

Instantly share code, notes, and snippets.

@frsyuki
Created October 16, 2011 00:28
Show Gist options
  • Save frsyuki/1290358 to your computer and use it in GitHub Desktop.
Save frsyuki/1290358 to your computer and use it in GitHub Desktop.

fluentd-0.10 に対応する方法

Rakefile の修正

パッケージ名が変わりました。add_dependencyを変更して下さい:

gemspec.add_dependency "fluent", "~> 0.9.20"
↓
gemspec.add_dependency "fluentd", "~> 0.10.0"

InputPlugin の修正

Event クラスが無くなりました。Engine.emit を呼び出しているところを更新して下さい:

Engine.emit(tag, Event.new(time, record))
↓
Engine.emit(tag, time, record)

BufferedOutputPlugin の修正

format メソッドを更新して下さい:

def format(tag, event)
↓
def format(tag, time, record)

ハッシュタグ

Twitter ハッシュタグは #fluentd になりました。

fluentd-0.10 の新機能

Configurable の活用

プラグインクラスの中で、config_param を使って設定パラメータを宣言できるようになりました。 メンバ変数が自動的に設定されます:

class MyOutput < BufferedOutput
  # path という必須パラメータを宣言
  config_param :path, :string

  # buffer_path というオプショナルパラメータを宣言
  config_param :buffer_path, :string, :default => nil

  # 型は :string, :integer, :size, :bool, :time に対応
  config_param :max_size, :size, :default => 0
  config_param :interval, :time, :default => 0
  config_param :compress, :bool, :default => false

  # 型変換はカスタマイズも可能
  config_param :compress, :default => nil do |val|
    val.to_sym
  end

  def initialize
    super  # superを呼ぶ
  end

  def configure(conf)
    super   # superを呼ぶ
  end

  def start
    # メンバ変数が設定されている
    p @path
  end
end

BufferChunk#msgpack_each

BufferOutput#write(chunk) で、chunk.msgpack_each {|obj| ... } が使えるようになりました。format で to_msgpack したオブジェクトをデシリアライズして得られます。

class MyBufferedOutput < BufferedOutput
  def format(time, tag, record)
    record.to_msgpack
  end

  def write(chunk)
    chunk.msgpack_each {|record|
      # formatでシリアライズしたオブジェクトを取り出せる...
    }
  end
end

SetTimeKeyMixin, SetTagKeyMixin

BufferedOutputDriverで、record に time や tag を自動的にセットしてくれる mixin モジュールを追加しました。 このようにして使います:

class MyBufferedOutput < BufferedOutput
  include SetTimeKeyMixin

  # デフォルトで有効化する
  config_set_default :include_time_key, true

  def format(tag, time, record)
    # record["time"] がセットされている
  end
end

time のデフォルトのフォーマットは ISO-8601 です。config_set_default で上書きできます:

class MyBufferedOutput < BufferedOutput
  include SetTimeKeyMixin
  config_set_default :time_format, "%Y-%m-%d"
end

ユニットテスト

InputTestDriver, OutputTestDriver, BufferedOutputTestDriver を使って、プラグインのユニットテストができます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment