李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
ELK生命周期管理使用详解
Leefs
2021-12-31 PM
2417℃
1条
[TOC] ### 前言 一般在使用ELK对日志进行收集时,为了避免单个索引文件过大,通常按日期来对日志做切割,根据日期对产生的日志生成相应的索引。 索引名称通常如下方所示: ```basic nginx_log-2022.01.01 nginx_log-2022.01.02 nginx_log-2022.01.03 nginx_log-2022.01.04 nginx_log-2022.01.05 ``` 上方是从nginx采集过来的数据以天为单位来生成索引文件,从而避免索引过大影响查询效率。 该方案虽然解决了单个索引文件过大的问题,但是对于日志文件在ES中只需保留15到30天,时间再长的数据也没有多大的应用价值,同时创建大量的索引也会严重影响ES的查询效率。 所以能够定时清理已经没有价值的数据已经成为了管理ES必要之举。 本篇将通过创建随日期而变动的索引和ILM(生命周期管理)策略进行结合使用来达到有效管理ES索引的效果。 如果对Elasticsearch索引生命周期管理不是太熟悉的可以查看以下文章: [*Elasticsearch索引生命周期管理*](https://lilinchao.com/archives/1790.html) ### 一、环境准备 | | Elasticsearch | logstash | Kibana | | --------------- | ------------- | -------- | ------ | | 192.168.159.128 | √ | √ | √ | | 192.168.159.135 | √ | × | × | **说明** + 本次使用的版本统一都是7.2.0版本 + 两台服务器,Elasticsearch部署两个节点 ### 二、需求 通过logstash采集日志数据,输出到Elasticsearch集群,要求如下: + 以天为单位生成索引; + 初始创建索引分配一个主分片和一个副本分片; + 当创建索引3天后由hot阶段进入到warm阶段,并在warm阶段删除掉副本分片; + 进入warm阶段12天后,从warm阶段进入到删除阶段,删除掉该索引。 ### 三、功能 #### 3.1 操作步骤 + 第一步:创建index,添加索引别名,设置别名可以写入到索引 + 第二步:创建索引策略,设置各个阶段进行相关的操作 + 第三步:创建对应模板,将新的index自动添加到创建的索引策略中 + 第四步:修改logstash配置文件,使其随日期变动向Elasticsearch相应索引中写入数据 + 第五步:查询配置是否生效 #### 3.2 功能实现 **(1)创建索引,设置索引别名为nginx_log** ```bash # 删除索引名称为nginx_log开头的索引信息 DELETE nginx_log* # 创建索引 PUT /%3Cnginx_log-%7Bnow%2Fd%7D-000001%3E { "aliases": { "nginx_log":{ "is_write_index": true } } } ``` 日期数学字符的百分比编码(用于日期舍入的特殊字符必须按如下方式进行URI编码) | < | %3C | | ---- | ---- | | > | %3E | | / | %2F | | { | %7B | | } | %7D | | 竖杠 | %7C | | + | %2B | | : | %3A | | , | %2C | **(2)创建索引策略** ```bash # 索引策略名称为nginx_log_ilm_policy PUT /_ilm/policy/nginx_log_ilm_policy { "policy": { "phases": { "hot": { "actions": {} }, "warm": { "min_age": "3d", "actions": { "allocate": { "number_of_replicas": 0 } } }, "delete": { "min_age": "12d", "actions": { "delete": {} } } } } } ``` **说明** + 创建索引默认在hot阶段 + 当3天后索引从hot阶段进入到warm阶段 + 在warm阶段将副本数设置成0 + 最后在12天后索引进入到delete阶段 也可以直接操作Kibana界面来创建索引策略 ![09.ELK生命周期管理使用详解01.jpg](https://lilinchao.com/usr/uploads/2021/12/133792142.jpg) **(3)创建对应模板,将新的index自动添加到创建的索引策略中** ```bash # 创建索引模版名称为nginx_log_ilm_template PUT _template/nginx_log_ilm_template { "index_patterns": ["nginx_log-*"], "settings": { "number_of_shards": 1, "number_of_replicas": 1, "index.lifecycle.name":"nginx_log_ilm_policy", "index.lifecycle.rollover_alias": "nginx_log" } } ``` **说明** | 参数 | 说明 | | ------------------------------ | ---------------------------------------- | | index_patterns | 模版匹配的索引名以,支持模糊匹配 | | number_of_shards | 主分片数量 | | number_of_replicas | 副本分片数量 | | index.lifecycle.name | 通过索引策略名称指定模版所匹配的索引策略 | | index.lifecycle.rollover_alias | 索引别名 | **(4)修改logstash配置文件,使其随日期变动向Elasticsearch相应索引中写入数据** ```conf input { #beats { # port => 5044 #} file{ path => "/home/es/datas/nginx_log.txt" } } output { elasticsearch{ hosts => ["http://localhost:9200"] ilm_enabled => true ilm_rollover_alias => "nginx_log" ilm_pattern => "nginx_log-{now/d}-000001" ilm_policy => "nginx_log_ilm_policy" } } ``` **说明** | 字段 | 参数类型 | 说明 | | ------------------ | ---------------------------------------- | ------------------------------------------------------------ | | hosts | uri | 设置远程实例的主机 | | ilm_enabled | string, one of [“true”, “false”, “auto”] | auto如果Elasticsearch为7.0.0以上版本,且启用了ILM功能则默认设置为会自动启用索引生命周期管理功能,否则将其禁用。 | | ilm_rollover_alias | string | 过渡别名 | | ilm_pattern | string | 模式中指定的值将附加到写别名,并在ILM创建新索 | | ilm_policy | string | 修改此设置以使用自定义的索引生命周期管理策略,而不是默认策略。 | | template | a valid filesystem path | 可以在此处将路径设置为自己的模板 | | template_name | string | 定义如何在Elasticsearch中命名模板 | | template_overwrite | boolean | 选项总是会用Elasticsearch中指定的模板或包含的模板覆盖指定的模板 | | timeout | number | 发送到Elasticsearch的请求的超时限制 | 本次使用logstash来监听nginx_log.txt文件来实现数据的写入操作,在生产环境中可以换成监听beats端口。 **(5)查看索引策略是否生效** + 方式一:通过命令查看策略是否生效 ```basic GET nginx_log-*/_ilm/explain ``` **输出结果** ```json { "indices" : { "nginx_log-2021.12.28-000001" : { "index" : "nginx_log-2021.12.28-000001", "managed" : true, "policy" : "nginx_log_ilm_policy", "lifecycle_date_millis" : 1640677049077, "phase" : "hot", "phase_time_millis" : 1640677053712, "action" : "complete", "action_time_millis" : 1640677053627, "step" : "complete", "step_time_millis" : 1640677053712, "phase_execution" : { "policy" : "nginx_log_ilm_policy", "phase_definition" : { "min_age" : "0ms", "actions" : { } }, "version" : 1, "modified_date_in_millis" : 1640677053489 } } } } ``` + 方式二:通过Kibana中索引生命周期策略查看索引策略是否生效 ![09.ELK生命周期管理使用详解02.jpg](https://lilinchao.com/usr/uploads/2021/12/1405239702.jpg) 通过:操作->查看链接到策略的索引,查看具体生效的索引策略 ![09.ELK生命周期管理使用详解03.jpg](https://lilinchao.com/usr/uploads/2021/12/2648203619.jpg)
标签:
Elasticsearch
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/1817.html
上一篇
09.Flink任务调度原理
下一篇
10.Flink数据流和执行图介绍
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
VUE
机器学习
序列化和反序列化
Filter
Linux
Quartz
MyBatis-Plus
Nacos
Java
Eclipse
线程池
栈
Stream流
Golang
JavaWEB项目搭建
并发线程
LeetCode刷题
Java编程思想
Spark
Git
Kibana
Thymeleaf
FastDFS
Tomcat
Beego
设计模式
Map
HDFS
MyBatis
Jenkins
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭