Techioz Blog

OpenSearch と Searchkick の統合を使用して Rails アプリケーションでのログインを有効にする方法

概要

私の Rails アプリケーションは現在、統合のために Elasticsearch と elasticsearch-model および elasticsearch-rails gem を利用しています。 config/initializers/elasticsearch.rb ファイルで、次のように構成しました。

config = {
  log: Rails.env.development? ? true : false,
}

Elasticsearch::Model.client = Elasticsearch::Client.new(config)

この設定により、Elasticsearch::Model.client.search や一括データ操作などのアクションを実行するときに、Rails コンソールへのログインが有効になります。

現在、OpenSearch に移行して Searchkick gem を使用する予定です。 @client を初期化するときに、Searchkick ライブラリ コードにログを有効にするオプションがないことがわかりました。コードの関連部分は次のとおりです。

if client_type == :opensearch
  OpenSearch::Client.new({
    url: ENV["OPENSEARCH_URL"],
    transport_options: { request: { timeout: timeout }, headers: { content_type: "application/json" } },
    retry_on_failure: 2
  }.deep_merge(client_options)) do |f|
    f.use Searchkick::Middleware
    f.request :aws_sigv4, signer_middleware_aws_params if aws_credentials
  end
end

その結果、データをクエリするときにログを表示できなくなります。

開発プロセスのログを有効にする方法について誰かが提案を提供してもらえますか?ご協力をいただければ幸いです。

解決策

アプリケーション ログのドキュメントより

opensearch.yml に次の行を追加します。

logger.org.opensearch.index.reindex: debug

注: DEBUG レベルと TRACE レベルは非常に詳細です。問題のトラブルシューティングのためにいずれかを有効にした場合は、終了後に無効にします。

このドキュメントには、log4j2.properties を変更するという別のオプションについても記載されています。

どちらがあなたにとってより効果的かはわかりませんが、どちらのオプションでも問題は解決すると思います。

上記の解決策が機能しない場合は、この OpenSearch Ruby クライアントのドキュメントに記載されているこのログ オプションもあります。

client = OpenSearch::Client.new(
    url: "http://localhost:9200",
    retry_on_failure: 5,
    request_timeout: 120,
    log: true
  )

基本的に、コードは次のようになります。

if client_type == :opensearch
  OpenSearch::Client.new({
    url: ENV["OPENSEARCH_URL"],
    transport_options: { request: { timeout: timeout }, headers: { content_type: "application/json" } },
    retry_on_failure: 2,
    log: true # Added this option
  }.deep_merge(client_options)) do |f|
    f.use Searchkick::Middleware
    f.request :aws_sigv4, signer_middleware_aws_params if aws_credentials
  end
end

これが役に立ち、問題が解決されることを願っています。