ES7.5.2索引生命周期管理(附操作示例)


一、前言

  es可以用來存儲日志,一般日志存儲只是短期保存,超過一定時間日志要是能自動刪除最好,這樣保證索引文檔不會過多,查詢時效性也能得到保證。本文參考的官網地址是:https://www.elastic.co/guide/en/elasticsearch/reference/7.5/getting-started-index-lifecycle-management.html  。索引的生命周期分為四個階段:HOT->WARM->COLD->DELETE。

上面除了HOT為必須的階段外,其他為非必須階段,可以任意選擇配置。因為日志索引只要滿足自己刪除功能,所以下文只配置了HOT與DELETE階段。

 

二、配置

  配置自己刪除功能,必須配置策略(policy)、索引模版(template)、索引(index)。上述配置缺一不可。

  1)配置策略

PUT _ilm/policy/datastream_policy 
{
  "policy": {                       
    "phases": {
      "hot": {                      
        "actions": {
              "rollover":{
                  "max_docx":1
              }
        }
      },
      "delete": {
        "min_age": "30s",           
        "actions": {
          "delete": {}              
        }
      }
    }
  }
}

 采用PUT方式向es創建一個名為“datastream_policy“的策略,"_ilm/policy"為固定寫法。如果是使用postman,選擇PUT請求方式,地址為:http://ip:port/_ilm/policy/datastream_policy ,HOT階段:當日志索引超過1條時就會發生rollover,此處設置1條主要是為了測試方便。DELETE階段:超過30秒時執行刪除。

hot->actions->rollover還支持其他維度的控制,比如:

"max_size": "50GB"
"max_age": "30d"

 

  2)配置索引模版

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"    
  }
}

創建一個索引模版,索引以datastream-開頭的自動采用settings的配置。"index.lifecycle.name"意為采用”datastream_policy“的策略,"index.lifecycle.rollover_alias"意為創建使用該模版創建的索引統一用”datastream“的別名進行管理。

  

  3)創建索引

PUT datastream-000001
{
  "aliases": {
    "datastream": {
      "is_write_index": true
    }
  }
}

創建一個開始的索引,並設置索引可寫入。

  4)配置lifecycle檢測時間

PUT /_cluster/settings
{
"transient": { "indices.lifecycle.poll_interval": "10s" } }

默認為十分鍾,為了測試看效果,改為10秒鍾。

 

  5)驗證功能

  向別名為"datastream"的索引中進行寫入多條數據

PUT /datastream/_doc
{
"message":"hello-01"
}

  索引采用別名索引。

     寫入后,es根據配置的lifecycle時間進行rollover。用以下命令查看索引rollover進度

  

GET datastream-*/_ilm/explain

等待30秒后,返回的數據如下:

{
    "indices": {
        "datastream-000002": {
            "index": "datastream-000002",
            "managed": true,
            "policy": "datastream_policy",
            "lifecycle_date_millis": 1587608411208,
            "age": "1.08m",
            "phase": "hot",
            "phase_time_millis": 1587608411441,
            "action": "rollover",
            "action_time_millis": 1587608471383,
            "step": "check-rollover-ready",
            "step_time_millis": 1587608471383,
            "phase_execution": {
                "policy": "datastream_policy",
                "phase_definition": {
                    "min_age": "0ms",
                    "actions": {
                        "rollover": {
                            "max_docs": 1
                        }
                    }
                },
                "version": 1,
                "modified_date_in_millis": 1587608224989
            }
        },
        "datastream-000001": {
            "index": "datastream-000001",
            "managed": true,
            "policy": "datastream_policy",
            "lifecycle_date_millis": 1587608411268,
            "age": "1.08m",
            "phase": "delete",
            "phase_time_millis": 1587608471345,
            "action": "delete",
            "action_time_millis": 1587608471345,
            "step": "wait-for-shard-history-leases",
            "step_time_millis": 1587608471345,
            "phase_execution": {
                "policy": "datastream_policy",
                "phase_definition": {
                    "min_age": "60s",
                    "actions": {
                        "delete": {}
                    }
                },
                "version": 1,
                "modified_date_in_millis": 1587608224989
            }
        }
    }
}

 

索引自動創建了一個新的"datastream-000002",舊的索引”datastream-000001“ action變成DELETE。

再過一段時間再次查看索引

GET datastream-*/_ilm/explain

查看結果:

{
    "indices": {
        "datastream-000002": {
            "index": "datastream-000002",
            "managed": true,
            "policy": "datastream_policy",
            "lifecycle_date_millis": 1587608411208,
            "age": "2.8m",
            "phase": "hot",
            "phase_time_millis": 1587608411441,
            "action": "rollover",
            "action_time_millis": 1587608471383,
            "step": "check-rollover-ready",
            "step_time_millis": 1587608471383,
            "phase_execution": {
                "policy": "datastream_policy",
                "phase_definition": {
                    "min_age": "0ms",
                    "actions": {
                        "rollover": {
                            "max_docs": 1
                        }
                    }
                },
                "version": 1,
                "modified_date_in_millis": 1587608224989
            }
        }
    }
}

舊的索引進行了刪除。在做日志查詢時,我們只需要使用別名”datastream“進行日志查詢即可,es便可無感知完成日志存儲刪除動作。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM