轉載互聯網
es可以用來存儲日志,一般日志存儲只是短期保存,超過一定時間日志要是能自動刪除最好,這樣保證索引文檔不會過多,查詢時效性也能得到保證。
本文參考的官網地址是:https://www.elastic.co/guide/en/elasticsearch/reference/7.6/getting-started-index-lifecycle-management.html 。
索引的生命周期分為四個階段:HOT->WARM->COLD->DELETE。
上面除了HOT為必須的階段外,其他為非必須階段,可以任意選擇配置。因為日志索引只要滿足自己刪除功能,所以下文只配置了HOT與DELETE階段。
三步實現完成es生命周期管理
配置策略(policy)、索引模版(template)、索引(index)
1,配置策略(policy)
PUT _ilm/policy/datastream_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover":{
"max_docs":1
}
}
},
"delete": {
"min_age": "30s",
"actions": {
"delete": {}
}
}
}
}
}
創建了一個 “datastream_policy”策略,策略含義是:當hot階段索引文檔超過一條,就會發生rollover——便於測試,
delete階段,超過30s執行刪除動作。
還可以選擇其它維度控制,索引大小,索引時間:
"max_size": "50GB" "max_age": "30d"
2,索引模版(template)
PUT _template/datastream_template
{
"index_patterns": ["datastream-*"],
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "datastream_policy",
"index.lifecycle.rollover_alias": "datastream"
}
}
創建了一個索引模板,"index_patterns": ["datastream-*"],索引以datastream-開頭的則自動采用setting的配置;
"index.lifecycle.name": "datastream_policy", 采用”datastream_policy“的策略;
"index.lifecycle.rollover_alias": "datastream",創建使用該模版創建的索引統一用”datastream“的別名進行管理
3,索引(index)
PUT datastream-000001
{
"aliases": {
"datastream": {
"is_write_index": true
}
}
}
配置完成,下面進行驗證過程。
4,配置lifecycle檢測時間
PUT /_cluster/settings
{ "transient": { "indices.lifecycle.poll_interval": "10s" } }
默認十分鍾,便於測試,改為10s。
5,驗證
POST datastream/_doc
{
"message":"hello world"
}
通常對外暴露別名,所以索引采用別名寫入數據,
因為,別名”datastream“匹配index_patterns,寫入后,es根據配置的策略“datastream_policy”進行rollover。
用以下命令查看索引rollover進度。
GET datastream-*/_ilm/explain
等待30秒后,返回的數據如下:
{
"indices" : {
"datastream-000002" : {
"index" : "datastream-000002",
"managed" : true,
"policy" : "datastream_policy",
"lifecycle_date_millis" : 1596442291089,
"age" : "43.77s",
"phase" : "hot",
"phase_time_millis" : 1596442292420,
"action" : "rollover",
"action_time_millis" : 1596442301555,
"step" : "check-rollover-ready",
"step_time_millis" : 1596442301555,
"phase_execution" : {
"policy" : "datastream_policy",
"phase_definition" : {
"min_age" : "0ms",
"actions" : {
"rollover" : {
"max_docs" : 1
}
}
},
"version" : 1,
"modified_date_in_millis" : 1596441845846
}
},
"datastream-000001" : {
"index" : "datastream-000001",
"managed" : true,
"policy" : "datastream_policy",
"lifecycle_date_millis" : 1596442291025,
"age" : "43.83s",
"phase" : "delete",
"phase_time_millis" : 1596442330859,
"action" : "delete",
"action_time_millis" : 1596442330859,
"step" : "wait-for-shard-history-leases",
"step_time_millis" : 1596442330859,
"phase_execution" : {
"policy" : "datastream_policy",
"phase_definition" : {
"min_age" : "30s",
"actions" : {
"delete" : { }
}
},
"version" : 1,
"modified_date_in_millis" : 1596441845846
}
}
}
}
索引自動創建了一個新的"datastream-000002",舊的索引”datastream-000001“ action變成DELETE。
再過一段時間再次查看索引
GET datastream-*/_ilm/explain
結果如下:
{
"indices" : {
"datastream-000002" : {
"index" : "datastream-000002",
"managed" : true,
"policy" : "datastream_policy",
"lifecycle_date_millis" : 1596442291089,
"age" : "1.45m",
"phase" : "hot",
"phase_time_millis" : 1596442292420,
"action" : "rollover",
"action_time_millis" : 1596442301555,
"step" : "check-rollover-ready",
"step_time_millis" : 1596442301555,
"phase_execution" : {
"policy" : "datastream_policy",
"phase_definition" : {
"min_age" : "0ms",
"actions" : {
"rollover" : {
"max_docs" : 1
}
}
},
"version" : 1,
"modified_date_in_millis" : 1596441845846
}
}
}
}
舊的索引已經刪除,在做日志查詢時,我們只需要使用別名”datastream“進行日志查詢即可,es便可無感知完成日志存儲刪除動作。
