LoginSignup
5
2

More than 5 years have passed since last update.

td-agent2のfluent-pluginをbundlerで管理

Last updated at Posted at 2015-02-01

CentOS6、td-agent2.1.3を前提に書きます。

sysconfigを編集

TD_AGENT_ARGS="/usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log --gemfile /etc/td-agent/Gemfile --use-v1-config"
PATH="${PATH}:/opt/td-agent/embedded/bin"
  • bundlerにpathが通っていないと何も言わずエラーになる。

Gemfileを配置

現在インストールされているプラグインを移行する。

以下をサーバー上で実行し、

$ GEM_HOME='/opt/td-agent/embedded/lib/ruby/gems/2.1.0/' gem list --local | grep "fluentd\|fluent-plugin" | ruby -ne 'gem = $_.split(" ");puts %Q{gem "#{gem[0]}", "#{gem[1].gsub("(","").gsub(")","")}"}'

上記ワンライナーの結果をGemfileに記述。

/etc/td-agent/Gemfile
source 'https://rubygems.org'

gem "fluent-plugin-mongo", "0.7.4"
gem "fluent-plugin-rewrite-tag-filter", "1.4.1"
gem "fluent-plugin-s3", "0.5.1"
gem "fluent-plugin-scribe", "0.10.14"
gem "fluent-plugin-td", "0.10.23"
gem "fluent-plugin-td-monitoring", "0.2.0"
gem "fluent-plugin-webhdfs", "0.4.1"
gem "fluentd", "0.10.58"
gem "fluentd-ui", "0.3.11"

gem 'fluent-plugin-http_shadow', github: 'toyama0919/fluent-plugin-http_shadow'

それ以外にも依存Gemがあったら自分で追記する。

githubからのインストールも可能。

再起動

以下を実行するとbundle installが開始される。

$ sudo /etc/init.d/td-agent restart

bundle installが成功したらshutdownがされる点がgood!

bundle installが失敗すればshutdownされない。

上記の場合は/etc/td-agent/vendor/bundle/にpluginやfluentd本体がインストールされる。

  • CentOS7の場合は先にshutdownされてしまった。。
    • systemd周りで挙動が違う?

エラーになったら?

nokogiriでエラー

aws-sdk(fluent-plugin-s3が依存)でnokogiriが使われているので、お決まりの対応。。

$ sudo yum install libxml2 libxml2-devel
/etc/td-agent/.bundle/config
+ BUNDLE_BUILD__NOKOGIRI: "--use-system-libraries"

権限周りのエラー

起動ユーザーをrootにしてみる

/etc/sysconfig/td-agent
TD_AGENT_ARGS="/usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log --gemfile /etc/td-agent/Gemfile --use-v1-config"
PATH="${PATH}:/opt/td-agent/embedded/bin"
+ DAEMON_ARGS="--user root"

当然デメリットもある

Gemfileでpluginを管理出来るのはメリットではあるが、td-agentはpluginのversionも含めてテストされたものであるため、ある意味fluentdを直接使うのと同じようなことになる。

td-agentをアップデートした後にGemfileも書き換えるみたいなことは出来れば避けたい。

逆に言うとfluentdのバージョンアップ等はGemfileで完結する。(0.12系にするとか)

@sonotsさんのブログを参考に、pluginのversionが書かれたtd-agent公式のGemfileを用意してもらい、Gemfile.pluginみたいな別のGemfileでpluginを管理するのが一番やりやすいかと思う。
(※TDの方、見てたらご検討お願いします。。)

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2