ELK生命周期管理使用详解

标签: elk 生命周期 管理 | 发表时间:2021-12-31 07:30 | 作者:Leefs
出处:https://juejin.cn/backend

前言

一般在使用ELK对日志进行收集时,为了避免单个索引文件过大,通常按日期来对日志做切割,根据日期对产生的日志生成相应的索引。

索引名称通常如下方所示:

  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索引生命周期管理

一、环境准备

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

  # 删除索引名称为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)创建索引策略

  # 索引策略名称为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

(3)创建对应模板,将新的index自动添加到创建的索引策略中

  # 创建索引模版名称为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相应索引中写入数据

  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)查看索引策略是否生效

  • 方式一:通过命令查看策略是否生效
  GET nginx_log-*/_ilm/explain

输出结果

  {
  "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

通过:操作->查看链接到策略的索引,查看具体生效的索引策略

09.ELK生命周期管理使用详解03.jpg

相关 [elk 生命周期 管理] 推荐:

ELK生命周期管理使用详解

- - 掘金 后端
一般在使用ELK对日志进行收集时,为了避免单个索引文件过大,通常按日期来对日志做切割,根据日期对产生的日志生成相应的索引. 上方是从nginx采集过来的数据以天为单位来生成索引文件,从而避免索引过大影响查询效率. 该方案虽然解决了单个索引文件过大的问题,但是对于日志文件在ES中只需保留15到30天,时间再长的数据也没有多大的应用价值,同时创建大量的索引也会严重影响ES的查询效率.

敏捷应用生命周期管理

- - 博客 - 伯乐在线
Agile ALM使用敏捷的价值观和策略来充实了ALM,ALM的敏捷做法提升了产品的质量,缩短了上市时间,且有利于开发者以一种更加愉悦的心情来工作. 我对Agile ALM的定义可归结为,一些灵活的、对改变持开发态度的、高质量的过程和工具链. 敏捷应用生命周期管理(Agile Application Lifecycle Management,Agile ALM)正得到越来越大的推动,记得我在撰写“Agile ALM”一书的书稿时,几乎没有人会想到使用敏捷来丰富ALM的做法,或是找出一种有实效的ALM做法,越来越多的工具厂商发现,他们的工具在贴上敏捷工具甚至是敏捷ALM工具的标签之后好卖多了.

Elasticsearch索引生命周期管理方案

- - SegmentFault 最新的文章
在 Elastic Stack 6.6 版本后推出了新功能 Index Lifecycle Management(索引生命周期管理),支持针对索引的全生命周期托管管理,并且在 Kibana 上也提供了一套 UI 界面来配置策略. 本文主要介绍 Elasticsearch 索引生命周期管理如何配置和使用.

ES中的索引生命周期管理

- - JenkinWang's Blog
ILM:索引生命周期管理,即 Manage the index lifecycle. 使用 ILM应确保集群中的所有节点运行的是同一个版本,不然无法保证他们会按预期工作. Hot:索引更新和查询很活跃. Warm:索引不再更新,但仍然有查询. Cold:索引不再更新,只有很少的查询,而且查询速度也很慢.

Spring bean生命周期

- - 开源软件 - ITeye博客
Spring bean生命周期.       在传统的Java应用中,Bean的生命周期非常简单.  Java的关键词new用来实例化Bean(或许他是非序列化的).  相反,Bean的生命周期在Spring容器中更加细致.  理解Spring Bean的生命周期非常重要,因为你或许要利用Spring提供的机会来订制Bean的创建过程.

Activity生命周期详解

- - 编程语言 - ITeye博客
本文概述:针对一个例子详细阐述Activity的生命周期. Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的Activity的集合,这个栈也叫返回栈(Back Stack). 每次我们启动一个新的Activity,这个Activity就会入栈,并处于栈顶位置. 按下返回键或者finish()方法销毁一个Activity时,处于栈顶的Activity就会出栈,另一个Activity就会处于栈顶位置,显示给用户的就会是这个Activity..

spring中Bean的生命周期总结

- - CSDN博客推荐文章
spring中在ApplicationContext或在BeanFactory中Bean的生命周期总结.  Spring中Bean的生命周期,在学习spring的过程中bean的生命周期理解对学习spring有很大的帮助,下面我就分别介绍在ApplicationContext和BeanFactory中Bean的生命周期.

Activity的生命周期方法

- - 移动开发 - ITeye博客
一:Activity的生命周期方法.  Android提供了很多Activity的生命周期方法,比如我们常用的onCreate、onPause、onResume等. 这里主要介绍粗粒度的周期方法,诸如onPostCreate、onPostResume等. 这些细粒度的周期方法可以参考Android的API文档,在你需要更细层次的控制的时候可以使用这些细粒度的方法.

Activity生命周期异常分析

- - 移动开发 - ITeye博客
Activity 生命周期异常分析 . 我们知道正常情况下Activity创建的时候会执行 onCreate onStart onResume 方法;当锁屏情况下Activity会执行 onPause onStop方法;当屏幕再次显示的时候会执行onReStart onStart onResume方法.

一条链接的生命周期究竟有多长

- mia - 36氪
                                                Bit.ly上的1000个流行链接的平均生命周期. 问大家个问题:你认为互联网上出现的一个新链接过多久就没人再去点击了呢. 如果你这个新链接是与新闻相关的链接,那么答案就会变成5分钟. 根据网址缩短服务提供商Bit.ly发布的一项研究报告,大多数网络上分享的链接的生命周期都不长,很快就会淹没在这个电子数据的汪洋大海中.