ただfluentdのdocker imageにfluent-plugin-bigqueryをインストールしただけでdocker-compose run fluentd
すると以下のエラーが起きてfluentdが起動しません。
2017-02-14 02:06:20 +0000 [info]: starting fluentd-0.12.31
2017-02-14 02:06:21 +0000 [info]: gem 'fluent-mixin-config-placeholders' version '0.4.0'
2017-02-14 02:06:21 +0000 [info]: gem 'fluent-mixin-plaintextformatter' version '0.2.6'
2017-02-14 02:06:21 +0000 [info]: gem 'fluent-plugin-bigquery' version '0.4.0'
2017-02-14 02:06:21 +0000 [info]: gem 'fluent-plugin-buffer-lightening' version '0.0.2'
2017-02-14 02:06:21 +0000 [info]: gem 'fluent-plugin-td' version '0.10.29'
2017-02-14 02:06:21 +0000 [info]: gem 'fluentd' version '0.12.31'
2017-02-14 02:06:21 +0000 [info]: adding match in @mainstream pattern="docker.**" type="stdout"
2017-02-14 02:06:21 +0000 [info]: adding match in @mainstream pattern="**" type="file"
2017-02-14 02:06:21 +0000 [info]: adding match in @mainstream pattern="bigquery.**" type="bigquery"
/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- bigdecimal/util (LoadError)
from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
(中略)
2017-02-14 02:06:21 +0000 [info]: process finished code=256
2017-02-14 02:06:21 +0000 [warn]: process died within 1 second. exit.
cannot load such file -- bigdecimal/util
と言われていることより、どうやらbigqueryがいないと思われます。
fluent-plugin-bigqueryのissueを見ると全く同じ症状のものがありました。
結論的には、fluentdのdocker imageで使われているalpineがイメージ容量削減のためruby-bigdecimalを組み込んでいないことが原因のようです。ここでfluentdのdocker imageのリポジトリを見たらこの問題に関連したPRがありました。
これはfluent-plugin-bigqueryを動かそうとしたらbigdecimalで怒られるから追加したよ、というPRですが、closeされています。理由を見たらやはりイメージの容量を増やしたくないそうです。fluent-plugin-bigqueryがActiveSupportに依存しており、これがbigdecimalを使うから必要であって、そもそもActiveSupport依存は良くないのでfluent-plugin-bigquery側の問題である言及されています。
解決方法
fluentdのDockerfileでruby-bigdecimalをインストールするようにします。
ちなみにdocker-compose build
して docker-compose run fluent
するとUnknown output plugin 'bigquery'って言われたのは以下より解決しました。
https://github.com/fluent/fluentd-docker-image/issues/21
Dockerfileは以下のようになりました
FROM fluent/fluentd
COPY fluent.conf /fluentd/etc/
USER root
RUN apk --no-cache --update add ruby-bigdecimal
USER fluent
RUN gem install fluent-plugin-bigquery
これで無事に動きました。