Heartbeat產生的時序監控資料會隨時間持續增長,導致shard數量增多和叢集負載加重。通過索引生命週期管理ILM(Index Lifecycle Management),可以對heartbeat-*索引制定變換策略:在hot階段變換索引,在warm階段收縮分區併合並段,在cold階段將資料移轉到冷資料節點,在delete階段定期刪除到期資料。
操作流程
建立包含冷、熱屬性節點的叢集,啟用自動建立索引功能,並配置公網地址訪問白名單。
在heartbeat.yml中啟用ILM功能並配置參數,啟動後系統自動在Elasticsearch中產生Heartbeat索引模板。
通過ilm policy API建立生命週期管理原則,定義索引變換和歸檔的條件。
將ILM策略關聯到Heartbeat索引模板。
為第一個Heartbeat索引關聯ILM策略,使策略應用到索引模板覆蓋的所有索引。
查看歸檔在各階段(hot、warm、cold、delete)的索引。
步驟一:建立並配置冷熱叢集
建立冷熱叢集並查看節點的冷熱屬性。冷熱叢集包含冷、熱兩種屬性的節點,兩者區別如下:
節點類型
儲存資料要求
讀寫效能要求
規格要求
儲存要求
熱節點(hot)
近期資料,例如最近2天的日誌資料。
高
高,例如32核64 GB
建議使用SSD雲端硬碟。
冷節點(warm)
歷史資料,例如2天之前的日誌資料。
低
低,例如8核32 GB
建議使用高效雲端硬碟,或使用OpenStore實現海量冷資料Serverless儲存。
Elasticsearch中,冷資料節點的
box_type值為warm(非cold),這是因為冷資料節點在Elasticsearch原生架構中對應warm tier。在建立Elasticsearch執行個體時,啟用冷資料節點,即可建立冷熱叢集。
啟用冷資料節點併購買後,系統會在節點啟動參數中加入
-Enode.attr.box_type參數:熱資料節點:
-Enode.attr.box_type=hot冷資料節點:
-Enode.attr.box_type=warm
只有啟用冷資料節點後,資料節點才會變成熱節點。
登入該叢集的Kibana控制台,具體操作請參見通過Kibana串連叢集。
在左側導覽列,單擊Dev Tools 。
在 Console 中,執行如下命令,查看叢集冷熱節點屬性。
GET _cat/nodeattrs?v&h=host,attr,value返回結果中包含hot和warm節點,表示叢集已支援冷熱架構。
開啟目的地組群的自動建立索引功能,具體操作步驟請參見通過配置YML參數開啟自動建立索引。
配置叢集的公網地址訪問白名單,將安裝Heartbeat伺服器的IP地址添加到白名單中,具體操作步驟請參見設定IP白名單。
步驟二:在Heartbeat下配置ILM
詳細的ILM配置說明請參見Set up index lifecycle management。
下載Heartbeat安裝包,並解壓縮。
編輯heartbeat.yml,分別定義heartbeat.monitors、setup.template.settings、setup.kibana和output.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.template.overwrite: true setup.kibana: host: "https://es-cn-4591jumei00xxxxxx.kibana.elasticsearch.aliyuncs.com:5601" output.elasticsearch: hosts: ["es-cn-4591jumei00xxxxxx.elasticsearch.aliyuncs.com:9200"] ilm.enabled: true ilm.rollover_alias: "heartbeat" ilm.pattern: "{now/d}-000001" username: "elastic" password: "<your_password>"部分參數說明如下,更多參數說明請參見Heartbeat配置文檔。
參數
說明
index.number_of_shards
設定主分區數,預設是1。
index.routing.allocation.require.box_type
設定將索引資料寫入hot節點。
setup.template.overwrite
設定是否覆蓋原索引模板。如果已將此版本的索引模板載入到Elasticsearch中,必須設定為true以覆蓋原模板。該參數為頂級配置項,與
setup.template.settings同級。host
替換為Kibana服務的公網訪問地址,可在Kibana的配置頁面擷取。
hosts
替換為Elasticsearch叢集的公網或私網訪問地址,可在叢集的基本資料頁面擷取,詳細資料請參見查看執行個體基本資料。如果設定為公網地址,需要配置叢集的公網地址訪問白名單,具體操作請參見設定IP白名單;如果設定為私網地址,需要確保叢集與安裝Heartbeat的伺服器在同一專用網路下。
ilm.enabled
設定為true,表示啟用索引生命週期管理ILM。
ilm.rollover_alias
設定變換索引時產生的索引別名,預設是heartbeat-\{beat.version\}。
ilm.pattern
設定變換索引時產生的索引模式。支援date math,預設是{now/d}-000001。當觸發索引變換條件後,新的索引名稱會在最後一位元字上加1。例如第一次變換產生的索引名稱是heartbeat-2020.04.29-000001,觸發滾動後新索引名稱為heartbeat-2020.04.29-000002。
username
使用者名稱預設為elastic。
password
elastic使用者的密碼在建立執行個體時設定,如果忘記可重設。重設密碼的操作步驟請參見重設執行個體訪問密碼。
重要如果在載入索引模板後修改ilm.rollover_alias或ilm.pattern,則必須設定setup.template.overwrite為true,重寫索引模板。
啟動Heartbeat服務。
sudo ./heartbeat -e
步驟三:建立ILM策略
Elasticsearch支援通過API和Kibana控制台兩種方式建立ILM策略。以下以API方式為例,建立heartbeat-policy策略。
Heartbeat支援通過./heartbeat setup --ilm-policy命令載入預設的策略並寫入Elasticsearch,預設策略可通過./heartbeat export ilm-policy命令匯出。可以修改該預設策略,實現手動建立策略。
在Kibana控制台中,執行以下命令,建立ILM策略。
PUT /_ilm/policy/heartbeat-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天、文檔數超過100)時觸發變換。舊索引在變換後等待60秒進入warm階段。rollover支援max_docs、max_size、max_age三種條件,滿足任一即觸發。 |
warm | 將索引收縮到1個分區,強制合并為1個段。完成後,索引在3分鐘(從變換時算起)後進入cold階段。 |
cold | 將索引從hot節點遷移到warm(冷資料)節點。完成後,索引在1小時後進入delete階段。 |
delete | 索引被刪除。 |
策略名稱建立後無法更改。通過Kibana控制台也可以建立策略,但Kibana上max_age最小單位為小時,API方式最小單位為秒。
步驟四:為ILM策略關聯索引模板
啟動Heartbeat後,系統會自動在Elasticsearch中建立Heartbeat索引模板。將步驟三:建立ILM策略中建立的heartbeat-policy策略關聯該索引模板。
登入目標Elasticsearch執行個體的Kibana控制台,具體步驟請參見通過Kibana串連叢集。
在左側導覽列,單擊 Management 。
在 Elasticsearch 地區,單擊 Index Lifecycle Policies 。
在 Index lifecycle policies 列表中,找到heartbeat-policy策略,單擊該策略行對應的 Actions > Add policy to index template 。
在彈出的對話方塊中,從 Index template 列表中選擇索引模板,並在 Alias for rollover index 文字框中輸入索引別名。
單擊 Add policy。
步驟五:為索引關聯ILM策略
啟動Heartbeat後,系統會自動在Elasticsearch中建立索引。為第一個索引關聯ILM策略,該策略已在步驟四:為ILM策略關聯索引模板中關聯了索引模板。
在 Management 頁面的 Elasticsearch 地區中,單擊 Index Management。
在 Index management列表中,找到目標索引,單擊索引名稱。
在 Summary 頁面,選擇 Manage > Remove lifecycle policy ,移除Heartbeat內建的預設策略。
在彈出的對話方塊中,單擊 Remove policy 。
再選擇 Manage > Add lifecycle policy 。
在彈出的對話方塊中,從 Lifecycle policy 列表中選擇步驟三:建立ILM策略中建立的heartbeat-policy策略,並在 Index rollover alias 輸入框中輸入步驟四:為ILM策略關聯索引模板中定義的索引別名,單擊 Add policy 。
步驟六:查看各階段索引
在Index management 頁面,單擊 Lifecycle phase 下拉式清單,選擇生命週期階段(如Hot、Warm、Cold)過濾查看對應階段的索引。
常見問題
如何調整ILM策略檢查頻率?
ILM預設每10分鐘檢查一次符合策略的索引,在此期間資料量可能超出設定閾值。例如在步驟三:建立ILM策略中設定max_docs為100,實際文檔數可能在超過100後才觸發變換。
通過修改indices.lifecycle.poll_interval參數可控制檢查頻率:
檢查頻率過高會增加節點負載,建議根據業務需求謹慎設定。
PUT _cluster/settings
{
"transient": {
"indices.lifecycle.poll_interval":"1m"
}
}