背景
前端性能监控的日志之前为单一索引,随着日志内容的不断增多,索引文件变得越来越多大(官方建议单个索引文件不要超过20G)。
在此种方案下只能定时通过delete query
的方式删除xxx天之前的数据,此种方式删除数据时异常缓慢,而且磁盘空间不会立即释放。
亟需采取新的索引方案解决该问题,比如按天生成索引,定时删除一个月之前的索引文件,直接删除索引文件的效率会高不少。
索引创建
索引模板
索引模板是为了方便按天去生成相同配置的索引文件,样例如下:
1 | # 创建索引模板 |
说明:
PUT _template/jz-fe-performance-log-template
创建名称为jz-fe-performance-log-template
的索引模板index_patterns
中的jz-fe-performance-log-*
代表索引名称为jz-fe-performance-log-
的索引都按这个模板的配置去生成settings
中的lifecycle
项注明以哪一个lifecycle配置来管理该索引,在后续的索引删除部分会使用到mappings
就是所有文档的配置了,strict
表面为严格模式,索引数据只能为下面声明的字段名称,否则无法保存
数据保存
在数据调用Node服务接口时,做如下处理,即可按天把日志保存到当天的日志文件中
1 |
|
说明:
- 索引名称以
jz-fe-performance-log
打头的索引文件没有时都为以上面的模板新创建 - 性能数据保存时,指定保存到当天的索引文件中
索引删除
实现了索引文件按天拆分之后,下一步就需要考虑如何把索引文件管理起来。
日志数据一般只保留一个月,这个时候可以考虑可以写一个程序定时去删除一个月之前的索引。
Elasticsearch 6.6开始提供了一个叫Index Lifecycle Management
的功能来管理日志。
ILM配置
可以通过kibana可视化的做配置,也可以通过写ES语句的方式创建
点击Create policy
即可创建对应配置
可通过如下方式查看刚才创建的具体配置信息
1 | # 查看Index Lifecycle Manegment配置 |
返回结果如下
1 | { |
说明:
- 索引要被哪个ILM管理是在索引的
settings
的lifecycle
处指定的 - ES默认10分钟执行一次检查,如果对应索引满足创建时间大于15天,则删除索引
其他操作
下面是测试验证该功能会用到的相关ES语句
1 | =========索引模板相关=========== |