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

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

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

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

Fluentd

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

受付中

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

Kimsehwa
Kimsehwa

総合スコア312

Ruby

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

Fluentd

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

1回答

0リアクション

0クリップ

2721閲覧

投稿2015/08/05 08:19

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

error

service td-agent restart /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) from /opt/td-agent/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /etc/td-agent/plugin/out_convert.rb:2:in `<module:Fluent>' from /etc/td-agent/plugin/out_convert.rb:1:in `<top (required)>' from /opt/td-agent/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /opt/td-agent/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' 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' from /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.12/lib/fluent/plugin.rb:83:in `each' 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' 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' 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' from /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.12/lib/fluent/supervisor.rb:485:in `each' from /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.12/lib/fluent/supervisor.rb:485:in `init_engine' from /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.12/lib/fluent/supervisor.rb:179:in `dry_run' from /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.12/lib/fluent/supervisor.rb:130:in `start' 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)>' from /opt/td-agent/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:73:in `require' from /opt/td-agent/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:73:in `require' from /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.12/bin/fluentd:6:in `<top (required)>' from /opt/td-agent/embedded/bin/fluentd:23:in `load' from /opt/td-agent/embedded/bin/fluentd:23:in `<top (required)>' from /usr/sbin/td-agent:7:in `load' from /usr/sbin/td-agent:7:in `<main>'

pluginのソース

ruby

odule Fluent require "/usr/local/share/ruby/gems/2.0/gems/jsonpath-0.5.7/bin/jsonpath" #require "jsonpath" class ConvertOutput < Output Fluent::Plugin.register_output("convert", self) config_param :format, :string, :default => nil config_param :tag , :string, :default => nil def configure(conf) super @formatter = create_formatter(JSON.parse(@format)) end def create_formatter(formatter) case formatter when Array formatter.map{|e| create_formatter(e)} when Hash formatter.inject({}) do |hash, (k, v)| hash[k] = create_formatter(v) hash end when String if formatter.start_with?("$") JsonPath.new(formatter) else formatter end else formatter end end def emit(tag, es, chain) es.each do |time, record| converted = convert_record(@formatter, record) Engine.emit(@tag, time, converted) end chain.next end def convert_record(formatter, record) case formatter when Array formatter.map{|e| convert_record(e, record)} when Hash formatter.inject({}) do |hash, (k, v)| hash[k] = convert_record(v, record) hash end when JsonPath formatter.first(record) else formatter end end 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固有の環境変数に問題があるかな思って絶対パスに書いてもロードができません。。

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

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby

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

Fluentd

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