日志生命周期处理
脚本的方式
查出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)

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索引生命周期中配置冷热分离.只需开启冷阶段配置即可.配置参考如下:
|
