全部產品
Search
文件中心

Elasticsearch:通過索引生命週期管理Heartbeat資料

更新時間:Jun 30, 2024

對於時間序列資料,會隨著時間的積累越來越大,您可以通過索引生命週期管理ILM(Index Lifecycle Management)定期將資料滾動到新索引,防止因資料過大影響查詢效率和成本。隨著索引的老化和查詢頻率的降低,您可以將其轉移到價格較低的磁碟上,並減少分區和副本的數量。本文介紹通過ILM管理Heartbeat資料的方法。

背景資訊

本文使用的測試情境如下:

業務情境中存在大量的heartbeat-*時序索引,並且每天單個索引大小都為4 MB左右。當資料越來越多時,shard數量也會越來越多,導致叢集負載增加。所以需要指定不同的變換策略,在hot階段變換heartbeat-*開頭的歷史監控索引,warm階段對索引進行分區收縮及段合并,cold階段將資料從hot節點遷移到warm(冷資料)節點,delete階段定期刪除索引資料。

注意事項

  • 索引必須定義模板和別名後,才可以設定生命週期管理原則。
  • 如果在變換索引時修改了生命週期管理原則,新策略將在下一次變換時生效。

操作流程

  1. 步驟一:建立並配置冷熱叢集
    在建立叢集時配置叢集中節點的冷熱屬性、開啟自動建立索引功能、配置公網地址訪問白名單。
  2. 步驟二:在Heartbeat下配置ILM
    heartbeat.yml中開啟Elasticsearch的生命週期管理功能,並配置其參數。配置完成並啟動後,系統會自動在對應Elasticsearch執行個體中產生Heartbeat索引模板。
  3. 步驟三:建立ILM策略
    通過ilm policy API建立生命週期管理原則,該策略用來定義索引變換和歸檔的條件。
  4. 步驟四:為ILM策略關聯索引模板
    為上一步建立的生命週期管理原則關聯Heartbeat索引模板。
  5. 步驟五:為索引關聯ILM策略
    為第一個Heartbeat索引關聯生命週期管理原則,以便將該策略應用到整個Heartbeat索引模板覆蓋的索引下。
  6. 步驟六:查看各階段索引
    查看歸檔在各階段(hot、warm、cold、delete)的索引。

步驟一:建立並配置冷熱叢集

  1. 建立冷熱叢集並查看叢集的冷熱節點屬性。
    冷熱叢集是指在叢集中包含冷、熱兩種屬性的節點,可以提高Elasticsearch的處理效能和服務穩定性。兩者區別如下。
    節點類型儲存資料要求讀寫效能要求規格要求儲存要求
    熱節點(hot)近期資料,例如最近2天的日誌資料。高,例如32核64 GB建議使用SSD雲端硬碟儲存資料,儲存空間大小需根據資料大小進行設定。
    冷節點(warm)歷史資料,例如2天之前的日誌資料。低,例如8核32 GB

    建議使用高效雲端硬碟儲存資料,儲存空間大小需根據資料大小進行設定。

    1. 購買Elasticsearch執行個體時,啟用冷資料節點,即可建立冷熱叢集。
      當您啟用了冷資料節點併購買後,系統會在節點啟動參數中加入-Enode.attr.box_type參數。
      • 熱資料節點:-Enode.attr.box_type=hot
      • 冷資料節點:-Enode.attr.box_type=warm
      說明
      • 購買執行個體時,只有當啟用了冷資料節點後,資料節點才會變成熱節點。
      • 本文以Elasticsearch 6.7.0版本為例,所涉及的操作及圖片僅適用於該版本,其他版本以實際介面為準。
    2. 登入該叢集的Kibana控制台,在左側導覽列,單擊Dev Tools
      登入Kibana控制台的具體操作請參見登入Kibana控制台
    3. 在左側導覽列,單擊Dev Tools
    4. Console中,執行如下命令,查看叢集冷熱節點屬性。
      GET _cat/nodeattrs?v&h=host,attr,value
      結果顯示叢集中包含3個hot節點,2個warm節點,支援冷熱架構。冷熱架構叢集
  2. 開啟目的地組群的自動建立索引功能。
    具體操作步驟請參見配置YML參數
  3. 配置叢集的公網地址訪問白名單,將安裝Heartbeat伺服器的IP地址添加到白名單中。

步驟二:在Heartbeat下配置ILM

為了使Heartbeat與Elasticsearch的ILM無縫銜接,可在heartbeat.yml配置中定義Elasticsearch的ILM,詳細配置請參見Set up index lifecycle management

  1. 下載Heartbeat安裝包,並解壓縮。
  2. 編輯heartbeat.yml,分別定義heartbeat.monitorssetup.template.settingssetup.kibanaoutput.elasticsearch
    本文使用的配置如下。
    heartbeat.monitors:
    - type: icmp
      schedule: '*/5 * * * * * *'
      hosts: ["47.111.xx.xx"]
    
    setup.template.settings:
      index.number_of_shards: 3
      index.codec: best_compression
      index.routing.allocation.require.box_type: "hot"
    
    setup.kibana:
    
      # Kibana Host
      # Scheme and port can be left out and will be set to the default (http and 5601)
      # In case you specify and additional path, the scheme is required: http://localhost:5601/path
      # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
      host: "https://es-cn-4591jumei00xxxxxx.kibana.elasticsearch.aliyuncs.com:5601"
    
    output.elasticsearch:
      # Array of hosts to connect to.
      hosts: ["es-cn-4591jumei00xxxxxx.elasticsearch.aliyuncs.com:9200"]
      ilm.enabled: true
      setup.template.overwrite: true
      ilm.rollover_alias: "heartbeat"
      ilm.pattern: "{now/d}-000001"
    
      # Enabled ilm (beta) to use index lifecycle management instead daily indices.
      #ilm.enabled: false
    
      # Optional protocol and basic auth credentials.
      #protocol: "https"
      username: "elastic"
      password: "<your_password>"

    部分參數說明如下,更多參數說明請參見官方Heartbeat配置文檔

    參數說明
    index.number_of_shards設定主分區數,預設是1。
    index.routing.allocation.require.box_type設定將索引資料寫入hot節點。
    host需要替換為您Kibana服務的公網訪問地址,可在Kibana的配置頁面擷取。
    hosts需要替換為您Elasticsearch叢集的公網或私網訪問地址,可在叢集的基本資料頁面擷取,詳細資料請參見查看執行個體的基本資料
    說明 如果設定為公網地址,需要配置叢集的公網地址訪問白名單,具體操作請參見配置執行個體公網或私網訪問白名單;如果設定為私網地址,需要確保叢集與安裝Heartbeat的伺服器在同一專用網路下。
    ilm.enabled設定為true,表示啟用索引生命週期管理ILM。
    setup.template.overwrite設定是否覆蓋原索引模板。如果您已經將此版本的索引模板載入到Elasticsearch中,則必須將該參數設定為true,使用此版本的索引模板覆蓋原索引模板。
    ilm.rollover_alias設定變換索引時,產生的索引的別名,預設是heartbeat-\{beat.version\}
    ilm.pattern設定變換索引時,產生的索引的模式。支援date math,預設是{now/d}-000001。當觸發索引變換條件後,新的索引名稱會在最後一位元字上加1。

    例如第一次變換產生的索引名稱是heartbeat-2020.04.29-000001,當滿足索引變換條件後觸發滾動,Elasticsearch會建立新的索引,名稱為heartbeat-2020.04.29-000002

    username使用者名稱預設為elastic。
    passwordelastic使用者的密碼在建立執行個體時設定,如果忘記可重設。重設密碼的注意事項和操作步驟,請參見重設執行個體訪問密碼
    重要 如果在載入索引模板後修改ilm.rollover_aliasilm.pattern,則必須設定setup.template.overwrite為true,重寫索引模板。
  3. 啟動Heartbeat服務。
    sudo ./heartbeat -e

步驟三:建立ILM策略

Elasticsearch支援通過API和Kibana控制台操作兩種方式建立ILM策略。以下樣本以API方式為例,介紹通過ilm policy API建立hearbeat-policy策略。
說明 Heartbeat支援通過./heartbeat setup --ilm-policy命令載入預設的策略並寫入Elasticsearch,預設策略可通過./heartbeat export ilm-policy命令到stdout。您可以修改該預設策略,實現手動建立策略。

在Kibana控制台中,執行以下命令,建立ILM策略。

PUT /_ilm/policy/hearbeat-policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size": "5mb",
            "max_age": "1d",
            "max_docs": 100
          }
        }
      },
      "warm": {
        "min_age": "60s",
        "actions": {
          "forcemerge": {
                "max_num_segments":1
              },
          "shrink": {
                "number_of_shards":1
              }
        }
      },
      "cold": {
        "min_age": "3m",
        "actions": {
          "allocate": {
            "require": {
              "box_type": "warm"
            }
          }
        }
      },
      "delete": {
        "min_age": "1h",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}
參數說明
hot該原則設定索引只要滿足其中任一條件:資料寫入達到5 MB、使用超過1天、doc數超過100,就會觸發索引變換。此時系統將建立一個新索引,該索引將重新啟動策略,而舊索引將在變換後等待60秒進入warm階段。
重要 目前Elasticsearch支援在rollover中配置三種歸檔策略:max_docs、max_size、max_age,滿足其中任何一個條件都會觸發索引歸檔操作。
warm索引進入warm階段後,ILM會將索引收縮到1個分區,強制合并為1個段。完成該操作後,索引將在3分鐘(從變換時算起)後進入cold階段。
cold索引進入cold階段後,ILM將索引從hot節點移動到warm(冷資料)節點。完成操作後,索引將在1小時後進入delete階段。
delete索引進入delete階段後被刪除。
說明
  • 策略名稱建立後將無法更改。
  • 您也可以在Kibana控制台上建立策略,但是Kibana上指定的max_age最小單位為小時,而通過API方式,可指定最小單位為秒。

步驟四:為ILM策略關聯索引模板

啟動Heartbeat後,系統會自動在對應的Elasticsearch中建立Heartbeat索引模板。您需要為步驟三:建立ILM策略中建立的自訂ILM策略關聯該索引模板。

  1. 登入目標Elasticsearch執行個體的Kibana控制台。
    具體步驟請參見登入Kibana控制台
  2. 在左側導覽列,單擊Management
  3. Elasticsearch地區,單擊Index Lifecycle Policies
  4. Index lifecycle policies列表中,選擇Actions > Add policy to index template
    Add policy
  5. 在彈出的對話方塊中,從Index template列表中選擇索引模板,並在Alias for rollover index文字框中輸入索引別名。
    Add policy
  6. 單擊Add policy

步驟五:為索引關聯ILM策略

啟動Heartbeat後,系統會自動在對應的Elasticsearch中建立索引。您需要為第一個索引關聯對應的ILM策略,該ILM策略已經關聯了索引模板(步驟四:為ILM策略關聯索引模板)。

  1. Management頁面的Elasticsearch地區中,單擊Index Management
  2. Index management列表中,找到目標索引,單擊索引名稱。
  3. Summary頁面,選擇Manage > Remove lifecycle policy,移除Heartbeat內建的預設策略。
    移除Heartbeat內建的預設策略
  4. 在彈出的對話方塊中,單擊Remove policy
  5. 再選擇Manage > Add lifecycle policy
  6. 在彈出的對話方塊中,從Lifecycle policy列表中選擇步驟三:建立ILM策略中建立的生命週期策略,並在Index rollover alias輸入框中輸入步驟四:為ILM策略關聯索引模板中定義的索引別名,單擊Add policy
    Add policy
    關聯成功後,結果如下圖。關聯成功

步驟六:查看各階段索引

查看hot階段的索引:在Index management頁面,選擇Lifecycle phase > Hot過濾Hot階段索引

您也可以使用同樣的方式,查看其他階段的索引。

常見問題

Q:如何設定ILM策略周期?

A:由於索引生命週期策略預設是10分鐘檢查一次符合策略的索引,因此在這10分鐘內索引中的資料可能會超出指定的閾值。例如在步驟三:建立ILM策略時,設定max_docs為100,但doc數量在超過100後才觸發索引變換,此時可通過修改indices.lifecycle.poll_interval參數來控制檢查頻率,使索引在閾值範圍內變換。
重要 請謹慎修改該參數值,避免時間間隔太短給節點增加不必要的負載,本測試中將其改成了1m
PUT _cluster/settings
{
  "transient": {
    "indices.lifecycle.poll_interval":"1m"
  }
}