web-dev-qa-db-ja.com

Node=からのElasticsearchのリクエストがタイムアウトしました

公式のJavascriptクライアントを使用して、Elasticsearchとインターフェースする簡単なNode.js RESTサービスを設定しています。このコードをローカルで実行していますが、クラスターはリモートにあります。トラフに行くとブラウザ、_headプラグインを使用すると、問題なくESに接続してクエリを実行できます。ただし、Javascriptクライアントを介して接続すると、すべてのリクエストがタイムアウトします。ElasticSearchオブジェクトを設定しましたが、リクエストを送信すると、動作しません。ブラウザからESにアクセスできるので、ネットワークの問題だとは思いません。これは、非常に基本的なgetで何かを要求する方法です。

var elasticsearch = require("elasticsearch");
var es = new elasticsearch.Client({
    Host: "https://my-address:9200/", // also tried without protocol part and trailing slashes
    log: "error",
    sniffOnStart: true
});

es.get({
    index: "things",
    type: "someThing",
    id: "42"
}).then(doSomeStuff, handleStuffFailed);

これは単純なエラーメッセージErrror: Request timeout after 30000ms.で失敗します

ここで何か不足していますか?私はクライアントのドキュメントを読みましたが、これはクライアントの基本的な「Hello World」のようです。

18
Kroltan

ESクライアントをインスタンス化するときにrequestTimeoutパラメータを拡張してみてください。

client = new elasticsearch.Client({
        Host          : 'http://localhost:9200',
        requestTimeout: 60000
    });

10分弱かかる長時間のプロセスがありました。 requestTimeout値を60000(10分)にすることで、プロセスはタイムアウトせずに完了することができます。

8
Lorien

sniffOnStartのため、QBoxでもこの問題が発生しました。この設定で試してください:

var es = new elasticsearch.Client({
    Host: "my-address:9200",
    log: "trace",
    sniffOnStart: true
});

追加されたノードのIPがプライベートIPであることがわかります。私たちの側では、次のようにスニッフィングを無効にし、パブリックノードのホストアドレスの配列を手動で追加することにしました。

var es = new elasticsearch.Client({
    hosts: ["my-address1:9200", "my-address2:9200", "my-address3:9200"],
    log: "error"
});
7
oliviercuyp

エラスティック検索のタイムアウトについては、2つのタイプのタイムアウトを区別する必要があります。

  • 初期化タイムアウト:ESを初期化するとき:requestTimeoutpingTimeout両方ともデフォルトで30000msです。続きを読む: エラスティック検索ドキュメントの構成ドキュメント

  • 操作ベースのタイムアウトbulkcreatedeleteindexなどの多くの操作は、timeoutも設定できます。挿入する巨大なバルクオブジェクトがある場合は、操作ベースのタイムアウトを設定できます。 Elastic Search documentation

操作ベースのタイムアウトにより、initializationRequestTimeoutが上書きされることを知っておく必要があります。

2
ambodi

この問題については、こちらを確認してください: https://github.com/elastic/elasticsearch-js/issues/186

上記のようにrequestTimeout変数を使用する必要があると思います。

2
fritz

見えたら以下の項目をチェック

検出:30000ms後のリクエストタイムアウト

  1. Elasticsearch CPU /メモリがぎこちないことを確認します
  2. クエリウィンドウのデータが多い場合、リクエストが30000ミリ秒以内にタイムアウトする可能性があります。kibana.ymlでkibanaのタイムアウトを増やします-> elasticsearch.requestTimeout:120000 kibanaサービスを再起動します
  3. Kibanaダッシュボードによってロードされたデータの量を減らしますdiscover:sampleSize [管理-詳細設定]->それに応じて値を変更します
  4. 間にLoad Balancerがある場合は、タイムアウト設定を増やします。
    LBからも。
1
xs2rashid