analytic-search は、Alibaba Cloud Elasticsearch チームによって開発されたログクエリプラグインです。 analytic-search プラグインは、Elasticsearch クラスターの Kibana コンソールの Discover ページで特定の検索条件に基づくクエリを高速化するために使用される time フィールド index.sort をサポートしています。 analytic-search プラグインは、同時クエリ機能も提供します。 このプラグインは、データのクエリに必要な時間を大幅に短縮するのに役立ちます。 このトピックでは、analytic-search プラグインの使用方法について説明します。
背景情報
次の説明では、analytic-search プラグインでサポートされている機能、機能を使用できるシナリオ、および機能に対して実行されたパフォーマンステストに関する情報を示します。
Kibana コンソールの Discover ページで実行されるクエリの高速化機能
- ユースケース:この機能は、ログクエリのシナリオに適しています。 たとえば、analytic-search プラグインを使用して、Kibana コンソールの Discover ページで無条件クエリと単一条件クエリを高速化できます。
- メリット:インデックスのマージポリシーと日付ヒストグラムの集計ポリシーが最適化されています。 これにより、ログクエリシナリオでの無条件クエリと単一条件クエリのパフォーマンスが大幅に向上します。 毎日 1 TB を超えるデータが追加されるシナリオでは、クエリを完了するために必要な時間が数分から 5 秒以下に短縮されます。
- パフォーマンステスト:
- テスト環境
- ノード:10 ノード。各ノードは 16 個の vCPU と 64 GiB のメモリを提供します。
- データセット:毎日 600 億ドキュメントのビジネスログデータ。 データは 12 個のインデックスに格納され、各インデックスには 60 個のシャードが構成されています。
- 次の表は、Kibana コンソールの Discover ページで実行されるクエリの高速化機能を有効にした後、さまざまなストレージメディアからデータをクエリするために必要な時間が短縮される割合を示しています。
クエリタイプ 標準 SSD Ultra Disk OpenStore 無条件クエリ 96% 削減 95% 削減 94% 削減 単一条件クエリ 88% 削減 77% 削減 85% 削減 複数条件クエリ 8% 削減 11% 削減 14% 削減
- テスト環境
同時クエリ機能
- ユースケース:この機能は、1 秒あたりのクエリ数(QPS)が少なく、クエリ結果の返却に時間がかかり、ノードの計算リソースが十分にあるシナリオに適しています。
- メリット:同時スレッドを使用してクエリ結果を返すことができ、クエリ結果を返すのに必要な平均時間が 50% 短縮されます。 リソース使用率が向上します。
- パフォーマンステスト:
- テスト環境
- ノード:OpenStore が提供する 3 つのウォームホット共有コンピューティングノード。各ノードは 16 個の vCPU と 64 GiB のメモリを提供します。 説明 OpenStore が提供するウォームホット共有コンピューティングノードは、Alibaba Cloud 中国サイト(aliyun.com)でのみ Elasticsearch コンソールで購入できます。
- データセット:1.6 TB のビジネスログデータ。 データは、60 個のシャードが構成されたインデックスに 60 億ドキュメントとして格納されます。
- クエリ:3 TermQuery(and) + TimeRange + Sort + Datehistogram。 1 つのシャードから 1,000 万ドキュメントを 10% のヒット率でクエリできます。
- ノード:OpenStore が提供する 3 つのウォームホット共有コンピューティングノード。各ノードは 16 個の vCPU と 64 GiB のメモリを提供します。
- テスト結果:
- 単一シャードからデータをクエリするために必要な時間が 65% 短縮されます。
- 複数シャードからデータをクエリするために必要な時間が 53% 短縮されます。
- テスト環境
前提条件
Kibana コンソールの Discover ページで実行されるクエリの高速化機能を有効にする
{
"settings": {
"index.points.same_sort_order_as_index_sort": true,
"index.sort.field": [
"@timestamp"
],
"index.sort.order": [
"desc"
]
},
"mappings": {
"properties": {
"@timestamp": {
"type": "date"
}
}
}
}同時クエリ機能を使用する
Elasticsearch クラスターの Kibana コンソールにログインし、プロンプトに従って Kibana コンソールのホームページに移動します。
Kibana コンソールへのログイン方法の詳細については、「Kibana コンソールへのログイン」を参照してください。
説明この例では、Elasticsearch V7.10.0 クラスターを使用します。 他のバージョンのクラスターでの操作は異なる場合があります。 コンソールでの実際の操作が優先されます。
表示されるページの右上隅にある [dev Tools] をクリックします。
- [console] タブで、次のコマンドを実行して同時クエリ機能を有効にします。
PUT _cluster/settings { "persistent": { "apack.analytic_search.doc_concurrency.enabled": "true" // 同時クエリ機能を有効にするかどうかを指定します。 } }上記のコマンドが正常に実行されると、Elasticsearch クラスターによって受信されたリクエストは、同時クエリ機能のデフォルト設定に基づいて処理されます。 同時クエリ操作を制御するために、同時クエリ機能に関連する構成を変更できます。 次の表に、構成可能なパラメーターを示します。- クラスターレベルの構成
パラメーター デフォルト値 説明 apack.analytic_search.doc_concurrency.enabled false 同時クエリ機能を有効にするかどうかを指定します。 有効な値: - true:同時クエリ機能を有効にします。
- false:同時クエリ機能を無効にします。
apack.analytic_search.doc_concurrency.concurrent.policy 80%:4;90%:2 クエリ同時実行ポリシー。 このパラメーターは、 Threshold 1:Concurrency 1;Threshold 2:Concurrency 2;...形式で構成する必要があります。Threshold n は、ノードの CPU 使用率のしきい値を表します。
Concurrency nは、ノードの CPU 使用率がThreshold nの値未満の場合にクエリに使用される同時スレッド数を表します。 たとえば、値80%:4;90%:2は、ノードの CPU 使用率が 80% 未満の場合は 4 つの同時スレッドがクエリに使用され、ノードの CPU 使用率が 90% 未満の場合は 2 つの同時スレッドがクエリに使用されることを示します。 ノードの CPU 使用率が 90% 以上の場合、クエリには 1 つのスレッドのみが使用されます。apack.analytic_search.doc_concurrency.min_support_doc 10000 同時クエリ機能が有効になるインデックス内のドキュメントの最小数。 インデックス内のドキュメント数が下限より少ない場合、同時クエリ機能はインデックスに影響しません。 apack.analytic_search.doc_concurrency.min_support_processors 4 同時クエリ機能が有効になるノードに構成されている vCPU の最小数。 ノードに構成されている vCPU の数が下限より少ない場合、同時クエリ機能はノードに影響しません。 apack.analytic_search.doc_concurrency.max_support_heap_usage 80% 同時クエリ機能が有効になるノードの Java 仮想マシン(JVM)ヒープメモリの最大使用量。 ノードの JVM ヒープメモリ使用量が上限を超えると、同時クエリ機能はノードに影響しません。 apack.analytic_search.doc_concurrency.max_support_cpu_usage 90% 同時クエリ機能が有効になるノードの最大 CPU 使用率。 ノードの CPU 使用率が上限を超えると、同時クエリ機能はノードに影響しません。 - インデックスレベルの構成
パラメーター デフォルト値 説明 index.apack.analytic_search.doc_concurrency.enabled true 同時クエリ機能を有効にするかどうかを指定します。 有効な値: - true:同時クエリ機能を有効にします。
- false:同時クエリ機能を無効にします。
index.apack.analytic_search.doc_concurrency.allow_no_agg false 集計クエリ以外のクエリに対して同時クエリ機能を有効にするかどうかを指定します。 - true:集計クエリ以外のクエリに対して同時クエリ機能を有効にします。
- false:集計クエリ以外のクエリに対して同時クエリ機能を無効にします。
- クラスターレベルの構成