日志生命周期处理

脚本的方式

查出30天以前的索引并删掉

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh
curl -H'Content-Type:application/json' -d'{
"query": {
"range": {
"pt": {
"lt": "now-30d",
"format": "epoch_millis"
}
}
}
}
' -XPOST -H "Authorization:Basic ZWxhc3RpYzpTb3BlaU1HcjA5M0AkJV5FTEs=" "https://ip:9200/dev02-*/
_delete_by_query?conflicts=proceed"

利用elasticsearch 生命周期策略方式(在kibana面板中可以对索引冷热分离管理)

1
2
3
4
5
6
7
ES自带一个默认的logstash-*的索引模板,es内部维护了template,template定义好了mapping,
只要index的名称被template匹配到,那么该index的mapping就按照template中定义的mapping自动创建。
而且template中定义了index的shard分片数量、replica副本数量等等属性。

所以我们每次新建一个索引的时候,不需要手动创建mapping映射,也不需要手动设置副本和分片数量.

在Kibana的图形化界面中可以看到ES默认的索引模板
  • 如果使用默认模板,记得索引要以logstash-开头
    1
    2
    3
    4
    点击进入logstash索引模板,还能对模板进行编辑.比如设置以下重要3个参数:
    refresh_interval —-索引刷新间隔,一般在5-10秒范围内,周期可以设置长一点,有助于提高ES性能,减少不必要的刷新
    number_of_shards—–索引分片数量,在ES7版本中默认为1,在以前的版本默认为5.一般情况下设置为等同于ES data节点的数量
    number_of_replicas—-默认副本数量为1,如果有特殊需要,可以在下方设置.
  • 这里我克隆了一个模板-template
  • 然后使其关联的索引模式命中到我需要的上面
  • 然后创建一个策略,删除15天前的日志
  • 这里是测试图,所以是一天(注意:如果没有其他快照策略,不要填写快照策略名称)
  • 仅启动热阶段,也未启动滚动更新
  • 然后点操作,将该策略添加到刚才克隆的模板上
  • 再看下索引中是否有被应用上

正常可能被删除的索引则会这样显示(当前操作和阶段为delete)

关于索引冷热分离管理(参考kibana索引及索引冷热分离管理)

1
2
3
4
5
6
7
8
9
10
11
12
在<生产环境部署ELK+冷热数据分离>笔记中提到,当前业务每天大概1.5T左右的日志,规划了20T的SSD磁盘,刚好可以保留7天的日志(副本数为1).
开发人员需要将日志保留更久(例如一个月),以便有些故障未能及时发现,可能数周后才去追踪日志,排查故障.

但是,将一个月的日志都存储在SSD的磁盘中成本较高.在这种场景中,可以使用冷热分离,将索引数据分开..
例如,7天内的日志为热数据,该日志查询频率非常高,可以作为热数据,存储在ES的热节点,
7天后的日志查询频率就非常低,几乎很少查询,此时可以做为冷数据,存储在ES的冷节点.

ES冷节点通常硬件资源较低,CPU和内存配置相对热节点较低,磁盘通常采用机械磁盘,一方面冷节点无需太高配置,另一方面节省服务器成本费用

在<生产环境部署ELK+冷热数据分离>笔记中的ES集群截图中,可以看到每个ES的data节点都有hot或者cold属性..该属性定义了ES的冷热节点角色

还是在上面的Kibana索引生命周期中配置冷热分离.只需开启冷阶段配置即可.配置参考如下: