索引生命周期策略
ELK日志我们一般都是按天存储,例如索引名为"zipkin-span-2023-03-24",因为日志量所占的存储是非常大的,我们不能一直保存,而是要定期清理旧的,这里就以保留7天日志为例。
自动清理7天以前的日志可以用定时任务的方式,这样就需要加入多一个定时任务,可能不同服务记录的索引名又不一样,这样用定时任务配还是没那么方便。
ES给我们提供了一个索引的生命周期策略(lifecycle),就可以对索引指定删除时间,能很好解决这个问题。
索引生命周期分为四个阶段:HOT(热)=>WARM(温)=》COLD(冷)=>DELETE(删除)
给索引设生命周期策略(ILM)
这里为ELK日志超过7天的自动删除,所以只需要用到DELETE(删除阶段)
创建一个自动删除策略(auto_delete_policy):
delete:删除阶段,7天执行删除索引动作
bash
PUT _ilm/policy/auto_delete_policy
{
"policy": {
"phases": {
"delete": {
"min_age": "7d",
"actions": {
"delete": {}
}
}
}
}
}
查看策略:GET _ilm/policy/
bash
#创建索引模板:索引模板可以匹配索引名称,匹配到的索引名称按这个模板创建mapping
PUT _template/elk_template
{
"index_patterns": ["zipkin*"],
"settings": {
"index":{
"lifecycle":{
"name":"auto_delete_policy",
"indexing_complete":true
}
}
}
}
说明:创建索引模板(elk_template),index.lifecycle.name把上面的自动删除策略绑定到elk索引模板
创建zipkin开头的索引时就会应用这个模板。
indexing_complete:true,必须设为true,跳过HOT阶段的Rollover
#查看模板:
GET /_template/
测试效果:
为了立刻知道演示结果,这里测试时把DELETE的日期又7天"7d"改为1分钟"1m"
bash
PUT _ilm/policy/auto_delete_policy
{
"policy": {
"phases": {
"delete": {
"min_age": "1m",
"actions": {
"delete": {}
}
}
}
}
}
bash
#生命周期策略默认10分钟检测一次,为了方便测试,这里设为30s
PUT /_cluster/settings
{
"transient": {
"indices.lifecycle.poll_interval":"30s"
}
}
启动相关项目:把链路追踪日志写入到es:(查看 演示zipkin 篇)
#查看zipkin开头索引的生命周期策略:
GET zipkin*/_ilm/explain
#也可以在es中搜索到:
#经过一分钟后: 没有了(删除了)
#演示成功!最后把过期时间重新改成7d
bash
PUT _ilm/policy/auto_delete_policy
{
"policy": {
"phases": {
"delete": {
"min_age": "1m",
"actions": {
"delete": {}
}
}
}
}
}
#生命周期策略默认10分钟检测一次
bash
PUT /_cluster/settings
{
"transient": {
"indices.lifecycle.poll_interval":"10m"
}
}
通过kibana操作:
查看索引汇总:
自动给索引添加删除策略
因为索引是按照日期生成的,所以自动给它加上删除策略