1.什么是索引周期管理
定义:以时间为导向对数据进行应用策略操作。
索引管理流程:热数据->暖数据->冷数据->数据归档->数据删除
索引策略动作:优先级、重索引、分片分配、只读、合并、收缩、冻结、删除
2.如何做索引生命周期管理
2.1设计策略
针对索引根据时间、空间、类型、优先级进行不同种类的管理策略。
示例:
a. 我需要将tdx_索引自动关闭30天前的数据,自动删除180天前的数据;
b. 我需要将jty_索引每达到100g新生成一个新的二级索引;
c. 我需要将ths_和jty_索引在进行段合并时,第一优先顺序为ths索引,第二优先顺序为jty索引;
2.2设计动作
针对索引根据不同策略,进行相关的规则设计以及阶段设计
示例:
针对tdx_索引,我需要先合并,再收缩,再关闭,再删除;
针对jty_索引,我需要增加副本,再关闭,再删除
2.3执行动作
针对每个动作,编写索引的实际操作脚本
合并:
##################### ForceMerge###################################
actions:
1:
action: forcemerge
description: >- #默认合并2天之前的ES集群监控索引
options:
max_num_segments: 1
delay: 0
timeout_override:
continue_if_exception: True
disable_action: False
filters:
-filtertype: pattern
kind: regex
value: '^(\.monitoring-(es|kibana|beats|logstash)-6-).*$'
exclude:
-filtertype: age
source: creation_date
direction: older
unit: days
unit_count: 1
-filtertype: forcemerged
max_num_segments: 1
关闭:
[####################Close ###################################]
actions:
1:
action: close
description: >-
#默认close7天之前的ES集群监控watch索引
options:
ignore_empty_list: True
continue_if_exception: True
disable_action: False
filters:
- filtertype: pattern
kind: prefix
value: .watcher-history-9-
exclude:
- filtertype: age
source: creation_date
direction: older
unit: days
unit_count: 7
2.4完成策略
针对每个策略,调用系统定时任务进行循环操作
3.用什么来做索引管理
ES7.0版本提供ILM策略进行es-stack的组件生命周期管理功能;
ES6.x及以下版本使用elasticsearch-curator进行索引策略动作;
使用ILM策略优先级比使用curator优先级更高,为了避免冲突,使用ILM进行索引管理后尽量避免使用curator再次进行管理;
3.1Index lifecycle management
通过将生命周期策略附加到用于创建索引模板的索引模板来控制索引在老化时的处理方式。您可以更新策略以修改新索引和现有索引的生命周期。
对于时间序列索引,索引生命周期中有四个阶段:
•热- 索引正在积极更新和查询。
•暖- 索引不再更新,但仍需要查询。
•冷- 索引不再被更新,且很少被查询。数据仍然需要搜索,但如果这些查询速度较慢也没关系。
•删除- 不再需要索引,可以安全删除。
生命周期策略控制索引如何在这些阶段中转换以及在每个阶段对索引执行的操作。该政策可以指定:
•要转移到新索引的最大空间或时间。
•索引不再更新和主分片的数量可以减少。
•强制合并以永久删除标记为删除的文档。
•索引可以移动到性能较低的硬件。
•可用性不那么重要的索引和副本的数量可以减少。
•索引需要进行安全删除。
例如,如果要将一组ATM中的度量标准数据编入索引到Elasticsearch,则可以定义一个策略:
1.当索引达到50GB时,转到新索引。
2.将旧索引移动到暖数据阶段,将其标记为只读,并将其合并缩小为单个分片单个数据段。
3.7天后,将索引移至冷数据阶段并将其移至较便宜的硬件。
4.达到所需的30天保留期后,删除索引。
3.2Elasticsearch-curator
Curator安装
Centos7
wget https://packages.elastic.co/curator/5/centos/7/Packages/elasticsearch-curator-5.7.6-1.x86_64.rpm
Centos6
wget https://packages.elastic.co/curator/5/centos/6/Packages/elasticsearch-curator-5.7.6-1.x86_64.rpm
rpm -ivh elasticsearch-curator*.rpm
软件安装完毕后,得到安装目录:/opt/elasticsearch-curator
安装完毕后,需要新建一个主配置文件curator.yml:
################ Curator #########
client:
hosts:
-rjjd-node01.xx.com
-rjjd-node02.xx.com
-rjjd-node03.xx.com
port: 9200
url_prefix:
use_ssl: False
timeout: 60
master_only:
logging:
loglevel: INFO
logfile: /var/log/curator.log
logformat: json
blacklist: ['elasticsearch', 'urllib3']
Curator策略编写
官方链接:https://www.elastic.co/guide/en/elasticsearch/client/curator/current/actions.html
目前支持的策略动作有:
Alias(重新别名)
Allocation(分配分片)
Close(关闭索引)
Cluster Routing(集群路由)
Create Index(创建索引)
Delete Indices(删除索引)
Delete Snapshots(删除快照)
Forcemerge(段合并)
Index Settings(索引设置)
Open(打开索引)
Reindex(重新索引)
Replicas(副本分配)
Restore(重新存储)
Rollover(滚动索引)
Shrink(收缩索引)
Snapshot(索引快照)
单个策略有以下几部分组成:
a.动作名称,例如close,open,shrink,
官方链接:https://www.elastic.co/guide/en/elasticsearch/client/curator/current/actions.html
b.动作参数,例如忽略空索引,第一个执行错误继续执行后面的动作,
官方链接:https://www.elastic.co/guide/en/elasticsearch/client/curator/current/options.html
c.过滤器,例如按照时间,按照空间,按照分片等维度类型来过滤,
官方链接:https://www.elastic.co/guide/en/elasticsearch/client/curator/current/filters.html
d.过滤参数,例如设置时间大小,空间大小,索引状态模式进行过滤器的增强参数,
官方链接:
https://www.elastic.co/guide/en/elasticsearch/client/curator/current/filter_elements.html
示例:关闭索引策略
#################### Close ###################################
actions:
1:
action: close #动作类型
description: ‘默认close7天之前的ES集群监控watch索引’ #动作描述
options:
ignore_empty_list: True #忽略空索引
continue_if_exception: True #发生错误后继续执行
disable_action: False #启用动作
filters:
-filtertype: pattern #过滤类型1
kind: prefix #类型模式使用前缀
value: .watcher-history-9- #前缀名称
exclude: #是否排除
-filtertype: age #过滤类型2,按照时间
source: creation_date #时间选择参数,按照索引生成时间
direction: older #时间模式
unit: days #时间单位
unit_count: 7 #时间具体值
2:
action: close #动作类型
description: ‘默认关闭30天前的大于100g的通达信索引’ #动作描述
options:
ignore_empty_list: True #忽略空索引
continue_if_exception: True #发生错误后继续执行
disable_action: False #启用动作
filters:
-filtertype: pattern #过滤类型1
kind: prefix #类型模式使用前缀
value:‘tdx_’ #前缀名称
exclude: #是否排除
-filtertype: age #过滤类型2,按照时间
source: creation_date #时间选择参数,按照索引生成时间
direction: older #时间模式
unit: days #时间单位
unit_count: 30 #时间具体值
- filtertype: space #过滤类型3
disk_space: 100 #类型大小
threshold_behavior: less_than #判断条件,大于或者小于
reverse: True #是否反向判断
Curator启动
命令启动:
curator –config curator.ymlconfig/close.yml &
配置定时任务:
Crontab -e
0 22 * * * /usr/bin/curator –config /opt/elasticsearch-curator/curator.yml /opt/elasticsearch/config/close.yml
0 2 * * * /usr/bin/curator –config /opt/elasticsearch-curator/curator.yml /opt/elasticsearch/config/forcemerge.yml
4.实际使用示例
请编写一个索引管理策略文件和定时任务,需求:
1.针对通达信索引tdx_*(按月生成),每天凌晨2点开始进行段合并,每个分片合并成3个段;
actions:
1:
action: forcemerge
description: “针对通达信索引tdx_*(按月生成),每天凌晨2点开始进行段合并,每个分片合并成3个段”
options:
max_num_segments: 3
continue_if_exception: True
disable_action: False
filters:
- filtertype: pattern
kind: prefix
value: tdx_
timestring:"%Y.%m"
- filtertype: age
source: creation_date
direction: older
unit: months
unit_count: 1
- filtertype: forcemerged
max_num_segments: 3
#定时任务
0 2 * * * /usr/bin/curator –config /opt/elasticsearch-curator/curator.yml /opt/elasticsearch/config/tdxmerger.yml
2.针对金太阳索引jty_(按小时生成),每天凌晨3点开始进行关闭,关闭40天前的索引,且保留大于50gb的索引,同时排除掉jty_app索引;
actions:
1:
action: close
description: “针对金太阳索引jty_*(按小时生成),每天凌晨3点开始进行关闭,关闭40天前的索引,且保留大于50gb的索引,同时排除掉jty_app*索引”
options:
ignore_empty_list: True
continue_if_exception: True
disable_action: False
filters:
- filtertype: pattern
kind: prefix
value: jty_
timestring:"%Y.%m.%d.%H"
exclude: False
- filtertype: pattern
kind: prefix
value: jty_app
exclude: True
- filtertype: age
source: creation_date
direction: older
unit: hours
unit_count: 40*24
- filtertype: space
disk_space: 50
threshold_behavior: more_than
reverse: True
#定时任务
0 3 * * * /usr/bin/curator –config /opt/elasticsearch-curator/curator.yml /opt/elasticsearch/config/jtyclose.yml
3.针对君泓索引jh_*(按天生成),每天22点开始进行索引分片合并,将小于1gb的索引的分片数量调整为1个分片;
actions:
1:
action: forcemerge
description: "针对君泓索引jh_*(按天生成),每天22点开始进行索引分片合并,将小于1gb的索引的分片数量调整为1个分片"
options:
max_num_segments: 1
continue_if_exception: True
disable_action: False
filters:
- filtertype: pattern
kind: prefix
value: jh_
timestring:"%Y.%m.%d"
- filtertype: age
source: creation_date
direction: older
unit: days
unit_count: 1
- filtertype: space
disk_space: 1
threshold_behavir: less_than
- filtertype: forcemerged
max_num_segments: 1
#定时任务
0 22 * * * /usr/bin/curator –config /opt/elasticsearch-curator/curator.yml /opt/elasticsearch/config/jhmerger.yml
4.针对tomcat索引tomcat_*(按小时生成),每天21点开始自动创建未来1天的索引;
actions:
1:
action: create_index
description: "针对tomcat索引tomcat_*(按小时生成),每天21点开始自动创建未来1天的索引"
options:
name: '<tomcat_{now/H+1d}>'
extra_settings:
settings:
number_of_shards: 24
number_of_replicas: 0
disable_action: False
continue_if_exception: True
ignore_empty_list: True
- filtertype: period
period_type: relative
source: name
range_from: -1
range_to: -1
timestring: '%Y.%m.%d.%H'
unit: hours
#定时任务
0 21 * * * /usr/bin/curator –config /opt/elasticsearch-curator/curator.yml /opt/elasticsearch/config/tomcatcreate.yml
5.针对nginx索引(nginx_jty_,nginx_jty48_,nginx_jty48_log_),代表每天自动生成时间戳,需要使用一个action动作完成以上3种索引的关闭动作,自动关闭10天前的以上索引;
actions:
1:
action: close
description: “针对nginx索引(nginx_jty_*,nginx_jty48_*,nginx_jty48_log_*),*代表每天自动生成时间戳,需要使用一个action动作完成以上3种索引的关闭动作,自动关闭10天前的以上索引”
options:
ignore_empty_list: True
continue_if_exception: True
disable_action: False
filters:
- filtertype: pattern
kind: prefix
value: nginx_jty48_log_
timestring:"*"
- filtertype: pattern
kind: prefix
value: nginx_jty48_
timestring:"*"
- filtertype: pattern
kind: prefix
value: nginx_jty_
timestring:"*"
- filtertype: age
source: creation_date
direction: older
unit: days
unit_count: 10
#定时任务
59 23 * * * /usr/bin/curator –config /opt/elasticsearch-curator/curator.yml /opt/elasticsearch/config/nginxclose.yml