td-agentにaws-fluent-plugin-kinesisをインストールしたが起動できない
事象
aws-s3のプラグインでエラーが発生している。 less /var/log/td-agent/td-agent.log
failed to configure/start sub output s3: Unable to activate fluent-plugin-s3-0.8.5, because aws-sdk-
2.1.36 conflicts with aws-sdk (< 3, >= 2.3.22)
解決
下記の通りにgemのインストールを行う。
# td-agent-gem install fluent-plugin-s3
# td-agent-gem install google-protobuf -v "3.7.0"
# td-agent-gem install fluent-plugin-kinesis
インストールバージョン
# td-agent-gem list fluent-plugin-s3 fluent-plugin-kinesis google-protobuf
fluent-plugin-s3 (1.1.11, 0.8.0)
fluent-plugin-kinesis (3.1.0)
google-protobuf (3.7.0 x86_64-linux)
調査
調査1
Plugin Management - Fluentd
に使用されるバージョンは The latest version is used
と書かれている
# td-agent-gem list aws-sdk
*** LOCAL GEMS ***
aws-sdk (2.10.45, 2.3.22, 2.1.36)
aws-sdk-core (2.10.45, 2.3.22, 2.1.36)
aws-sdk-resources (2.10.45, 2.3.22, 2.1.36)
調査2
fluent-plugin-s3のバージョンをあげる
# td-agent-gem install fluent-plugin-s3
Fetching: serverengine-2.1.1.gem (100%)
Successfully installed serverengine-2.1.1
Fetching: strptime-0.2.3.gem (100%)
Building native extensions. This could take a while...
.
.
.
Done installing documentation for serverengine, strptime, dig_rb, fluentd, aws-partitions, aws-eventstream, aws-sigv4, aws-sdk-core, aws-sdk-kms, aws-sdk-s3, aws-sdk-sqs, fluent-plugin-s3 after 18 seconds
12 gems installed
結果
事象が変わっただけ。
# less /var/log/td-agent/td-agent.log
.
.
.
2019-07-11 18:11:38 +0900 [error]: #0 failed to configure/start sub output s3: Unable to activate aws-sdk-s3-1.45.0, because aws-sdk-co
re-2.1.36 conflicts with aws-sdk-core (>= 3.58.0, ~> 3)
調査3
依存関係を調査する
# /usr/sbin/td-agent-gem dependency fluent-plugin-s3
Gem fluent-plugin-s3-0.8.5
aws-sdk (< 3, >= 2.3.22)
fluentd (< 2, >= 0.10.58)
rake (>= 0.9.2, development)
rr (= 1.1.2, development)
test-unit (>= 3.0.8, development)
test-unit-rr (>= 1.0.3, development)
timecop (>= 0, development)
Gem fluent-plugin-s3-1.1.11
aws-sdk-s3 (~> 1.0)
aws-sdk-sqs (~> 1.0)
fluentd (< 2, >= 0.14.22)
rake (>= 0.9.2, development)
test-unit (>= 3.0.8, development)
test-unit-rr (>= 1.0.3, development)
timecop (>= 0, development)
# /usr/sbin/td-agent-gem dependency aws-sdk-s3
Gem aws-sdk-s3-1.45.0
aws-sdk-core (>= 3.58.0, ~> 3)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.1)
調査4
既存のGemをカスタマイズして使うスマートなやり方 – ひげろぐ
より、
specific_install
か git_install
でgithubより最新版をダウンロードする
gem git_install https://github.com/awslabs/aws-fluent-plugin-kinesis.git
gem git_install https://github.com/awslabs/aws-fluent-plugin-kinesis.git v2.1.1 のようにバージョンを指定できる
インストールする
結果
Rubyのバージョンが低いとエラーを指摘される
# td-agent-gem specific_install https://github.com/awslabs/aws-fluent-plugin-kinesis.git
.
.
.
Successfully built RubyGem
Name: fluent-plugin-kinesis
Version: 3.1.0
File: fluent-plugin-kinesis-3.1.0.gem
ERROR: While executing gem ... (Gem::InstallError)
google-protobuf requires Ruby version >= 2.3.
調査5
winebarrel/fluent-plugin-kinesis-firehose: Fluentd output plugin for Amazon Kinesis Firehose.
の開発が v0.1.1
で止まっているが、最新を使用しようする為には、
README.md
に書いてある通り(Please use fluent-plugin-kinesis.)、fluent-plugin-kinesis
を使用する必要がある。
結果
# td-agent-gem install fluent-plugin-kinesis
failed to configure/start sub output s3: Unable to activate fluent-plugin-s3-1.0.0, because aws-sdk-2.3.22 conflicts with aws-sdk (< 3, >= 2.3.22)
調査6
google-protobufの全バージョン履歴 | RubyGems.org | コミュニティのGemホスティングサービス
に、3.9、3.8、3.7…とバージョンが並んでいる各リンクを押下して、 必要RUBYバージョン
を確認する。
結果
3.7.1
まで、rubyバージョンが指定されていないので使用できる。
3.8.0
からは、rubyバージョンが 2.3
でないといけない。
原因
aws-fluent-plugin-kinesis/fluent-plugin-kinesis.gemspec at master · awslabs/aws-fluent-plugin-kinesis
にある通り、 spec.add_dependency "google-protobuf", "~> 3"
と、3の最新バージョンまで許容している為に、3.9.0がインストールされてしまう。先に google-protobuf
を 3.7.1
でインストールする必要がある。
調査7
failed to configure/start sub output s3: Unable to activate fluent-plugin-s3-1.0.0, because aws-sdk-2.3.22 conflicts with aws-sdk (< 3, >= 2.3.22)
と aws-sdk
のバージョンで競合が発生している。
結果
fluent-plugin-s3
のバージョンをあげる
# td-agent-gem install fluent-plugin-s3
# td-agent-gem list fluent-plugin-s3
*** LOCAL GEMS ***
fluent-plugin-s3 (1.1.11, 0.8.0)