李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
ELK生命周期管理使用详解
Leefs
2021-12-31 PM
1517℃
0条
[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
标签云
DataX
Yarn
Elastisearch
NIO
DataWarehouse
队列
Eclipse
JavaWEB项目搭建
设计模式
Tomcat
gorm
国产数据库改造
MySQL
SpringCloud
nginx
RSA加解密
Redis
Shiro
随笔
JavaWeb
高并发
FastDFS
并发线程
Filter
Scala
Netty
Java编程思想
Spark Core
机器学习
SpringBoot
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞