id:bash0C7の進捗

出来は上々で申し分の無い仕上がり日記

Fluentdでgracefulな設定再読み込みを実現するプラグイン単体での対応例

概要

やったこと

  1. gracefulに再読み込みしたい項目を外部ファイル化する
  2. 外部ファイル化した項目を使う部分をスレッド化する
  3. 何らかのシグナルを受け取った時に読み込み直して、依存する初期化処理をやりなおす
  4. 読み込み直す前にスレッドを殺して、読み込み直した後にスレッドを作り直す

実装

https://github.com/bash0C7/fluent-plugin-ruby_one_liner/blob/support_expernal_command_file/lib/fluent/plugin/out_ruby_one_liner.rb#L7 commandfileに読み直したい外部ファイルのパスが入っています。

https://github.com/bash0C7/fluent-plugin-ruby_one_liner/blob/support_expernal_command_file/lib/fluent/plugin/out_ruby_one_liner.rb#L74 emitではキューに突っ込むだけにして、このスレッドでpopし外部ファイル化した項目(から作った処理)を動かしています。

https://github.com/bash0C7/fluent-plugin-ruby_one_liner/blob/support_expernal_command_file/lib/fluent/plugin/out_ruby_one_liner.rb#L20 SIGINTを受けたら、reload_commandfile!を動かします。

https://github.com/bash0C7/fluent-plugin-ruby_one_liner/blob/support_expernal_command_file/lib/fluent/plugin/out_ruby_one_liner.rb#L67 reload_commandfile!では読み込み直しとスレッドの作り直しをしています。スレッドがなくなってもキューで切り離しているので問題ありません。

問題点

    1. HUP受けた時に再起動しなくなった。なんでや…