analytic-search插件是阿里云Elasticsearch團隊自主開發的日志場景檢索插件。通過該插件,您可以實現Kibana Discover查詢加速,支持通過開啟時間字段index.sort,在特定查詢條件下,降低查詢耗時;支持開啟查詢并發功能,大幅降低查詢耗時。本文介紹如何使用analytic-search插件。

背景信息

analytic-search插件的主要功能以及各功能的適用場景和性能測試信息如下:

Kibana Discover查詢加速功能

  • 適用場景:日志檢索場景。例如Kibana Discover中的無條件或單條件查詢。
  • 功能優勢:通過優化索引合并策略及Date_histogram執行計劃策略,在沒有查詢條件或者僅有一個查詢條件時,大幅度降低查詢耗時(日增量>1 TB數據量的場景下,分鐘級查詢可優化至5s內)。
  • 性能測試信息:
    • 測試環境
      • 節點:10 * 16核64 GB。
      • 數據集:某業務日志數據,一天600億個文檔,分成12個索引,每個索引60個分片。
    • 開啟Kibana Discover查詢加速后,不同存儲介質的性能表現如下:
      查詢條件 SSD云盤 高效云盤 OpenStore存儲
      沒有查詢條件 耗時降低96% 耗時降低95% 耗時降低94%
      一個查詢條件 耗時降低88% 耗時降低77% 耗時降低85%
      多個查詢條件 耗時降低8% 耗時降低11% 耗時降低14%

查詢并發功能

  • 適用場景:查詢QPS低,查詢召回階段耗時高,節點計算資源充足的場景。
  • 功能優勢:通過實現召回過程的并發,提高資源利用率,召回階段平均耗時降低50%。
  • 性能測試信息:
    • 測試環境
      • 節點:3 * 16核64 GB OpenStore冷熱共享計算型。
      • 數據集:某業務日志數據,單索引1.6 TB,60億個文檔,60個分片。
      • 查詢:3 TermQuery(and) + TimeRange + Sort + Datehistogram,單shard命中1000w(命中率10%)。
    • 測試結果:
      • 單shard查詢耗時降低65%。
      • 多shard查詢耗時降低53%。

前提條件

已創建阿里云Elasticsearch實例,版本為7.10.0且內核版本為1.7.0及以上。本文以阿里云Elasticsearch 7.10.0為例介紹,創建實例的方法請參見創建阿里云Elasticsearch實例
說明 analytic-search插件默認已安裝,不可卸載,您可在插件配置頁面查看。

開啟Kibana Discover查詢加速

創建索引時,在settingsmappings中增加如下配置即可。
說明 以下示例僅供參考。實際使用時,您需要按照業務實際字段名稱調整index.sort的時間戳字段名和排序。
{
  "settings": {
    "index.points.same_sort_order_as_index_sort": true,
    "index.sort.field": [
      "@timestamp"
    ],
    "index.sort.order": [
      "desc"
    ]
  },
  "mappings": {
    "properties": {
      "@timestamp": {
        "type": "date"
      }
    }
  }
}

使用查詢并發功能

  1. 登錄目標阿里云Elasticsearch實例的Kibana控制臺,根據頁面提示進入Kibana主頁。
    登錄Kibana控制臺的具體操作,請參見登錄Kibana控制臺
    說明 本文以阿里云Elasticsearch 7.10.0版本為例,其他版本操作可能略有差別,請以實際界面為準。
  2. 單擊右上角的Dev tools
  3. 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 查詢并發策略,格式為:閾值1:并發度1;閾值2:并發度2;...

      其中并發度n為節點CPU使用率小于閾值n時,并發查詢使用的并發度。例如,80%:4;90%:2表示節點的CPU使用率小于80%使用4并發,小于90%使用2并發,大于等于90%不使用并發。

      apack.analytic_search.doc_concurrency.min_support_doc 10000 使用查詢并發的索引的最少文檔數,索引文檔數低于該值則不使用查詢并發。
      apack.analytic_search.doc_concurrency.min_support_processors 4 使用查詢并發的節點的最少核數,節點核數低于該值則不使用查詢并發。
      apack.analytic_search.doc_concurrency.max_support_heap_usage 80% 使用查詢并發的節點的最高JVM heap使用率,節點JVM heap使用率高于該值則不使用查詢并發。
      apack.analytic_search.doc_concurrency.max_support_cpu_usage 90% 使用查詢并發的節點的最高CPU使用率,節點CPU使用率高于該值則不使用查詢并發。
    • 索引級別settings
      參數 默認值 說明
      index.apack.analytic_search.doc_concurrency.enabled true 是否開啟查詢并發功能:
      • true:開啟
      • false:不開啟
      index.apack.analytic_search.doc_concurrency.allow_no_agg false 是否對不帶agg的查詢使用查詢并發功能:
      • true:使用
      • false:不使用