動態

詳情 返回 返回

Easysearch Rollup 使用指南 - 動態 詳情

背景

在現代數據驅動的世界中,時序數據的處理變得越來越重要。無論是監控系統、日誌分析,還是物聯網設備的數據收集,時序數據都佔據了大量的存儲空間。隨着時間的推移,這些數據的存儲成本和管理複雜度也在不斷增加。

為了解決這一問題,Rollup 技術應運而生。本文將帶你深入瞭解 Rollup 的概念、優勢以及如何在 Easysearch 中使用 Rollup 來優化時序數據的存儲和查詢。


什麼是 Rollup?

Rollup 是一種數據聚合技術,主要用於處理時序數據。它通過將細粒度的原始數據彙總為粗粒度的數據,從而減少存儲空間並提高查詢效率。簡單來説,Rollup 可以將大量的詳細數據壓縮為更小的、更具代表性的數據集,同時保留關鍵的業務指標。

Rollup 的優勢

  1. 降低存儲成本:通過彙總數據,Rollup 可以顯著減少歷史數據的存儲空間,從而降低存儲成本。
  2. 提高查詢性能:彙總後的數據量更小,查詢速度更快,尤其是在處理大規模歷史數據時,性能提升尤為明顯。
  3. 無縫集成:Easysearch 的 Rollup 功能支持直接查詢原始索引,業務代碼無需修改,用户無感知。
  4. 自動化管理:Rollup 任務可以自動滾動生成新的索引,無需手動干預,簡化了數據管理流程。

Rollup 的使用場景

Rollup 特別適用於以下場景:

  • 監控系統:監控系統產生的指標數據通常非常詳細,但隨着時間推移,這些數據的價值逐漸降低。通過 Rollup,可以將這些數據彙總為更粗粒度的指標,保留關鍵信息的同時減少存儲壓力。
  • 日誌分析:日誌數據通常包含大量的細節信息,但隨着時間的推移,這些細節信息的重要性逐漸降低。Rollup 可以幫助你將日誌數據彙總為更高層次的統計信息,便於長期存儲和分析。
  • 物聯網數據:物聯網設備產生的數據量巨大,且大部分數據在短期內具有較高的分析價值。通過 Rollup,可以將這些數據彙總為更粗粒度的形式,便於長期存儲和查詢。

使用 Rollup 的先決條件

在使用 Rollup 之前,需要滿足以下條件:

安裝索引生命週期管理插件:Rollup 功能是索引生命週期管理插件的一部分,因此必須安裝該插件。

源索引必須包含 date 類型字段:Rollup 依賴於時間字段來進行數據聚合,因此源索引必須包含一個 date 類型的字段。

Easysearch 中的 Rollup 功能

Easysearch 提供了強大的 Rollup 功能,支持多種聚合類型,並且可以自動滾動生成新的索引。下面我們將詳細介紹如何在 Easysearch 中使用 Rollup。

支持的聚合類型

Easysearch 的 Rollup 功能支持以下聚合類型:

  • 數值類型字段avgsummaxminvalue_countpercentiles
  • keyword 類型字段terms 聚合
  • date 類型字段date_histogramdate_range 聚合

Rollup 的核心參數詳解

在配置 Rollup 任務時,以下幾個參數至關重要:

1. metrics 參數:定義需要聚合的數值字段

metrics 參數用於指定哪些數值字段需要進行聚合計算。Rollup 任務會對這些字段進行指定的聚合操作(如 avgsummaxminvalue_countpercentiles),並將結果存儲到目標索引中。

示例:

"metrics": [
  "payload.elasticsearch.index_stats.*"
]

在這個例子中,metrics 指定了對 payload.elasticsearch.index_stats 下的所有字段進行聚合。


2. attributes 參數:保留原始數據的非聚合字段

attributes 參數用於指定哪些字段需要原封不動地保留在 Rollup 結果中。這些字段不會被聚合,而是直接複製到目標索引中。

示例:

"attributes": [
  "agent.*",
  "metadata.*"
]

在這個例子中,attributes 指定了所有以 agent.metadata. 開頭的字段都會被保留到 Rollup 結果中。


3. exclude 參數:排除不需要處理的字段

exclude 參數用於排除某些字段,使其不參與 Rollup 任務。這些字段既不會被聚合,也不會被保留到目標索引中。

示例:

"exclude": ["payload.elasticsearch.index_stats.routing.*"]

在這個例子中,exclude 指定了 payload.elasticsearch.index_stats.routing 下的所有字段都不會被處理。


4. filter 參數:過濾源數據

filter 參數用於過濾源數據,只有符合過濾條件的文檔才會被 Rollup 任務處理。這個參數可以幫助你減少需要處理的數據量,從而提高 Rollup 任務的效率。

示例:

"filter": {
  "metadata.name": "index_stats"
}

在這個例子中,filter 指定了只有 metadata.name 字段值為 index_stats 的文檔才會被 Rollup 任務處理。


5. identity 參數:定義分組字段

identity 參數用於指定哪些字段作為分組條件。Rollup 任務會根據這些字段的值對數據進行分組,然後在每個分組內進行聚合計算。

功能:

  • 定義數據分組的字段。
  • 支持多個字段的組合,用於創建唯一的分組鍵。
  • 常用於標識數據的來源或類別。

示例:

"identity": [
  "metadata.labels.cluster_id",
  "metadata.labels.index_id",
  "metadata.labels.index_name",
  "metadata.category",
  "payload.elasticsearch.index_stats.index_info.health"
]

在這個例子中,identity 指定了多個字段作為分組條件。Rollup 任務會根據這些字段的值對數據進行分組,然後在每個分組內進行聚合計算。


6. interval 參數:定義時間聚合間隔

interval 參數用於指定時間聚合的間隔。Rollup 任務會根據這個間隔將數據按時間分桶,然後在每個時間桶內進行聚合計算。

功能:

  • 定義時間聚合的粒度。
  • 支持多種時間單位,如 1m(1 分鐘)、1h(1 小時)、1d(1 天)等。
  • 常用於按時間維度彙總數據。

示例:

"interval": "1m"

在這個例子中,interval 指定了時間聚合的間隔為 1 分鐘。Rollup 任務會每分鐘對數據進行一次聚合。


1.10 版本的新特性

從 Easysearch 1.10.0 版本開始,Rollup 功能引入了一些新特性,進一步增強了其靈活性和易用性。

1. 支持 date_range 聚合

在 1.10.0 版本中,Rollup 增加了對 原始索引使用 date_range 聚合的支持。這意味着你可以在原始索引根據日期範圍對數據進行聚合,而不僅僅是固定的時間間隔。

示例:

"date_range": {
  "field": "@timestamp",
  "ranges": [
    { "from": "now-1d/d", "to": "now" },
    { "from": "now-7d/d", "to": "now-1d/d" }
  ]
}

2. 通配符方式批量啓動/停止 Rollup Job

在 1.10.0 版本中,你可以使用通配符批量啓動或停止 Rollup 任務。這大大簡化了任務管理的操作。

示例:

POST _rollup/jobs/rollup*/_start
POST _rollup/jobs/rollup*/_stop

3. 設置 Rollup 索引自動滾動的條數

你可以通過設置 rollup.max_docs 參數,控制 Rollup 索引自動滾動的條數。當索引中的文檔數量達到設定值時,系統會自動創建一個新的 Rollup 索引。

示例:

PUT /_cluster/settings
{
    "transient": {
      "rollup.max_docs": 10000000
    }
}

4. 新增 ROLLUP_SEARCH_MAX_COUNT 配置

在 1.10.0 版本中,新增了 ROLLUP_SEARCH_MAX_COUNT 配置項,用於控制 Rollup 在運行 Job 時收集歷史數據的最大併發分片請求數。這個配置項可以幫助你優化 Rollup 任務的性能,並避免集羣資源過載。

功能:

  • 控制併發請求數:限制 Rollup 任務在執行搜索請求時的最大併發分片請求數。
  • 動態調整:支持在集羣運行時動態調整,無需重啓集羣。
  • 默認值2,即默認情況下,Rollup 任務最多會同時發送 2 個併發分片請求。

示例:

PUT /_cluster/settings
{
    "transient": {
      "rollup.search.max_count": 2
    }
}

在這個例子中,ROLLUP_SEARCH_MAX_COUNT 被設置為 2,表示 Rollup 任務在執行搜索請求時,最多會同時發送 2 個併發分片請求。

配置建議:

  • 小規模集羣:建議設置為較小的值(如 2),以避免資源競爭。
  • 大規模集羣:可以適當增加該值(如 4),以提高併發性能。
  • 動態調整:根據集羣負載情況動態調整該值,以優化性能和資源利用率。

創建 Rollup 任務的完整示例

以下是一個完整的 Rollup 任務配置示例,展示了 metricsattributesexcludefilter 參數的綜合使用:

PUT _rollup/jobs/rollup1
{
  "rollup": {
    "source_index": ".infini_metrics",
    "target_index": "rollup1_{{ctx.source_index}}",
    "timestamp": "timestamp",
    "continuous": true,
    "page_size": 1000,
    "cron": "*/10 1-23 * * *",
    "timezone": "UTC+8",
    "stats": [
      {
        "max": {}
      },
      {
        "value_count": {}
      }
    ],
    "interval": "1m",
    "identity": [
      "metadata.labels.cluster_id",
      "metadata.labels.index_id",
      "metadata.labels.index_name",
      "metadata.category",
      "payload.elasticsearch.index_stats.index_info.health"
    ],
    "attributes": [
      "agent.*",
      "metadata.*"
    ],
    "metrics": [
      "payload.elasticsearch.index_stats.*"
    ],
    "exclude": ["payload.elasticsearch.index_stats.routing.*"],
    "filter": {
      "metadata.name": "index_stats"
    }
  }
}

如何使用 Rollup 索引

從 1.10.0 版本開始,索引生命週期插件不再默認啓用 rollup 搜索功能,如果想使用搜索 rollup 搜索功能,需要設置

PUT /_cluster/settings
{
    "transient": {
      "rollup.search.enabled": true
    }
}

無需特意搜索 rollup 索引,只需使用標準的 \_search API 對原始目標索引進行搜索。需要注意的是,查詢時必須符合目標索引的約束條件。

以下是一個使用 Rollup 索引的示例:

GET target-test/_search
{
  "size": 0,
  "aggs": {
    "a": {
      "date_histogram": {
        "field": "@timestamp",
        "fixed_interval": "1h"
      }
    },
    "total_passenger_count": {
      "sum": {
        "field": "passenger_count"
      }
    }
  }
}

總結

Rollup 是處理時序數據的強大工具,能夠有效降低存儲成本並提高查詢性能。Easysearch 的 Rollup 功能不僅支持多種聚合類型,還提供了自動滾動索引、無縫查詢等特性,極大地簡化了時序數據的管理和分析流程。通過合理配置 metricsattributesexcludefilter 參數,你可以靈活地控制 Rollup 任務的行為,從而高效地處理時序數據。

如果你正在處理大量的時序數據,不妨嘗試使用 Rollup 來優化你的數據存儲和查詢。通過本文的介紹,相信你已經對 Rollup 有了深入的瞭解。趕快動手試試吧,體驗 Rollup 帶來的高效與便捷!

更詳細的使用文檔可在 官網 查看

關於 Easysearch

INFINI Easysearch 是一個分佈式的搜索型數據庫,實現非結構化數據檢索、全文檢索、向量檢索、地理位置信息查詢、組合索引查詢、多語種支持、聚合分析等。Easysearch 可以完美替代 Elasticsearch,同時添加和完善多項企業級功能。Easysearch 助您擁有簡潔、高效、易用的搜索體驗。

官網文檔:https://infinilabs.cn/docs/latest/easysearch

作者:張磊,極限科技(INFINI Labs)搜索引擎研發負責人,對 Elasticsearch 和 Lucene 源碼比較熟悉,目前主要負責公司的 Easysearch 產品的研發以及客户服務工作。
user avatar wintersun 頭像 kunaodehuluobo 頭像 munergs 頭像 tangge 頭像 chongdongdedaxiongmao_kxfei 頭像 woyaofeidegenggao_6395f006f02b5 頭像
點贊 6 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.