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に記述。
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
+ BUNDLE_BUILD__NOKOGIRI: "--use-system-libraries"
権限周りのエラー
起動ユーザーをrootにしてみる
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の方、見てたらご検討お願いします。。)