質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Fluentd

Fluentdは、オープンソースのログ収集ツールです。ログの収集方法、ログの記録先などのログデータ処理を柔軟にカスタマイズでき、インプットおよびアウトプットが全てプラグインとして実装されています。

Q&A

1回答

2962閲覧

ruby `require': cannot load such file -- jsonpath

Kimsehwa

総合スコア312

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Fluentd

Fluentdは、オープンソースのログ収集ツールです。ログの収集方法、ログの記録先などのログデータ処理を柔軟にカスタマイズでき、インプットおよびアウトプットが全てプラグインとして実装されています。

0グッド

0クリップ

投稿2015/08/05 08:19

td-agentのプラグインに入れたプラグインのrequireがうまく動いてなく以下のエラーとなりました。

error

1service td-agent restart 2/opt/td-agent/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- /usr/local/share/ruby/gems/2.0/gems/jsonpath-0.5.7/bin/jsonpath (LoadError) 3 from /opt/td-agent/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' 4 from /etc/td-agent/plugin/out_convert.rb:2:in `<module:Fluent>' 5 from /etc/td-agent/plugin/out_convert.rb:1:in `<top (required)>' 6 from /opt/td-agent/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' 7 from /opt/td-agent/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' 8 from /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.12/lib/fluent/plugin.rb:85:in `block in load_plugin_dir' 9 from /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.12/lib/fluent/plugin.rb:83:in `each' 10 from /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.12/lib/fluent/plugin.rb:83:in `load_plugin_dir' 11 from /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.12/lib/fluent/engine.rb:102:in `load_plugin_dir' 12 from /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.12/lib/fluent/supervisor.rb:488:in `block in init_engine' 13 from /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.12/lib/fluent/supervisor.rb:485:in `each' 14 from /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.12/lib/fluent/supervisor.rb:485:in `init_engine' 15 from /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.12/lib/fluent/supervisor.rb:179:in `dry_run' 16 from /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.12/lib/fluent/supervisor.rb:130:in `start' 17 from /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.12/lib/fluent/command/fluentd.rb:167:in `<top (required)>' 18 from /opt/td-agent/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:73:in `require' 19 from /opt/td-agent/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:73:in `require' 20 from /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.12/bin/fluentd:6:in `<top (required)>' 21 from /opt/td-agent/embedded/bin/fluentd:23:in `load' 22 from /opt/td-agent/embedded/bin/fluentd:23:in `<top (required)>' 23 from /usr/sbin/td-agent:7:in `load' 24 from /usr/sbin/td-agent:7:in `<main>'

pluginのソース

ruby

1odule Fluent 2 require "/usr/local/share/ruby/gems/2.0/gems/jsonpath-0.5.7/bin/jsonpath" 3 #require "jsonpath" 4 class ConvertOutput < Output 5 Fluent::Plugin.register_output("convert", self) 6 config_param :format, :string, :default => nil 7 config_param :tag , :string, :default => nil 8 9 def configure(conf) 10 super 11 @formatter = create_formatter(JSON.parse(@format)) 12 end 13 14 def create_formatter(formatter) 15 case formatter 16 when Array 17 formatter.map{|e| create_formatter(e)} 18 when Hash 19 formatter.inject({}) do |hash, (k, v)| 20 hash[k] = create_formatter(v) 21 hash 22 end 23 when String 24 if formatter.start_with?("$") 25 JsonPath.new(formatter) 26 else 27 formatter 28 end 29 else 30 formatter 31 end 32 end 33 34 def emit(tag, es, chain) 35 es.each do |time, record| 36 converted = convert_record(@formatter, record) 37 Engine.emit(@tag, time, converted) 38 end 39 chain.next 40 end 41 42 def convert_record(formatter, record) 43 case formatter 44 when Array 45 formatter.map{|e| convert_record(e, record)} 46 when Hash 47 formatter.inject({}) do |hash, (k, v)| 48 hash[k] = convert_record(v, record) 49 hash 50 end 51 when JsonPath 52 formatter.first(record) 53 else 54 formatter 55 end 56 end 57 58 end

gem install jsonpath

gem contents jsonpath | grep bin
/usr/local/share/ruby/gems/2.0/gems/jsonpath-0.5.7/bin/jsonpath
/usr/local/share/ruby/gems/2.0/gems/jsonpath-0.5.7/test/test_jsonpath_bin.rb

json pathはインストールされていますがloadできない理由はなんでしょうか?
td-agent固有の環境変数に問題があるかな思って絶対パスに書いてもロードができません。。

何かヒントになれることあれば教えていただけますか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

multi_json は入っていますか?

投稿2015/08/05 08:46

VIRTUE

総合スコア39

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kimsehwa

2015/08/05 08:53

入れてなく今入れましたが、エラーは変わってまえん。
VIRTUE

2015/08/05 08:58

multi_json が入っていなかったのであれば、gem の依存関係が正しく処理されていないっぽいので、gem dependency で他に必要なモジュールが不足していないか確認した方が良いかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問