ELK生命周期管理使用详解

前言

一般在使用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界面来创建索引策略

ELK生命周期管理使用详解_第1张图片

(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中索引生命周期策略查看索引策略是否生效

ELK生命周期管理使用详解_第2张图片

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

ELK生命周期管理使用详解_第3张图片

你可能感兴趣的:(elk,生命周期,管理)