ELK日志保留7天-索引生命周期策略


一、簡介

ELK日志我們一般都是按天存儲,例如索引名為"kafkalog-2022-04-05",因為日志量所占的存儲是非常大的,我們不能一直保存,而是要定期清理舊的,這里就以保留7天日志為例。

自動清理7天以前的日志可以用定時任務的方式,這樣就需要加入多一個定時任務,可能不同服務記錄的索引名又不一樣,這樣用定時任務配還是沒那么方便。

ES給我們提供了一個索引的生命周期策略(lifecycle),就可以對索引指定刪除時間,能很好解決這個問題。

 

索引生命周期分為四個階段:HOT(熱)=>WARM(溫)=》COLD(冷)=>DELETE(刪除)

二、給索引設生命周期策略(ILM)

1.配置生命周期策略(policy)

這里為ELK日志超過7天的自動刪除,所以只需要用到DELETE(刪除階段)

PUT _ilm/policy/auto_delete_policy   
{
  "policy": {                       
    "phases": {
      "delete": {
        "min_age": "7d",           
        "actions": {
          "delete": {}              
        }
      }
    }
  }
}

 

創建一個自動刪除策略(auto_delete_policy)

delete:刪除階段,7天執行刪除索引動作

查看策略:GET _ilm/policy/

2.創建索引模板

索引模板可以匹配索引名稱,匹配到的索引名稱按這個模板創建mapping

PUT _template/elk_template
{
  "index_patterns": ["kafka*"],                 
  "settings": {
    "index":{
      "lifecycle":{
        "name":"auto_delete_policy",
        "indexing_complete":true
      }
    }
    
  }
}

 

創建索引模板(elk_tempalte),index.lifecycle.name把上面的自動刪除策略綁定到elk索引模板

創建kafka開頭的索引時就會應用這個模板。

indexing_complete:true,必須設為true,跳過HOT階段的Rollover

查看模板:GET /_template/

3.測試效果

logstash配置:

logstash接收kafka的輸入,輸出到es。

input {
     kafka {
      type=>"log1"
      topics => "kafkalog" #在kafka這個topics提取數據
      bootstrap_servers => "127.0.0.1:9092"  # kafka的地址
      codec => "json"  # 在提取kafka主機的日志時,需要寫成json格式
            }
}

output {
    if [type] =="log1"
    {
  elasticsearch {
    hosts => ["127.0.0.1:9200"] #es地址
    index => "kafkalog%{+yyyy.MM.dd}" #把日志采集到es的索引名稱
    # user => "elastic"
    # password => "123456"
        }
    }
}

 

這里測試時把DELETE的日期由7天"7d"改為1分鍾"1m"。

生命周期策略默認10分鍾檢測一次,為了方便測試,這里設為30s。

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

 

把日志寫入到es后,查看日志索引的生命周期策略信息。

GET kafka*/_ilm/explain          查看kafka開頭索引的生命周期策略

 

過一會再點查詢,索引已經沒有了,說明已經生效。

 


免責聲明!

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



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