Heartbeat产生的时序监控数据会随时间持续增长,导致shard数量增多和集群负载加重。通过索引生命周期管理ILM(Index Lifecycle Management),可以对heartbeat-*索引制定滚动更新策略:在hot阶段滚动更新索引,在warm阶段收缩分片并合并段,在cold阶段将数据迁移到冷数据节点,在delete阶段定期删除过期数据。
操作流程
创建包含冷、热属性节点的集群,启用自动创建索引功能,并配置公网地址访问白名单。
在heartbeat.yml中启用ILM功能并配置参数,启动后系统自动在Elasticsearch中生成Heartbeat索引模板。
通过ilm policy API创建生命周期管理策略,定义索引滚动更新和归档的条件。
将ILM策略关联到Heartbeat索引模板。
为第一个Heartbeat索引关联ILM策略,使策略应用到索引模板覆盖的所有索引。
查看归档在各阶段(hot、warm、cold、delete)的索引。
步骤一:创建并配置冷热集群
创建冷热集群并查看节点的冷热属性。冷热集群包含冷、热两种属性的节点,两者区别如下:
节点类型
存储数据要求
读写性能要求
规格要求
存储要求
热节点(hot)
近期数据,例如最近2天的日志数据。
高
高,例如32核64 GB
建议使用SSD云盘。
冷节点(warm)
历史数据,例如2天之前的日志数据。
低
低,例如8核32 GB
建议使用高效云盘,或使用OpenStore实现海量冷数据Serverless存储。
阿里云Elasticsearch中,冷数据节点的
box_type值为warm(非cold),这是因为冷数据节点在Elasticsearch原生架构中对应warm tier。在创建阿里云Elasticsearch实例时,启用冷数据节点,即可创建冷热集群。
启用冷数据节点并购买后,系统会在节点启动参数中加入
-Enode.attr.box_type参数:热数据节点:
-Enode.attr.box_type=hot冷数据节点:
-Enode.attr.box_type=warm
只有启用冷数据节点后,数据节点才会变成热节点。
登录该集群的Kibana控制台,具体操作请参见通过Kibana连接集群。
在左侧导航栏,单击Dev Tools 。
在 Console 中,执行如下命令,查看集群冷热节点属性。
GET _cat/nodeattrs?v&h=host,attr,value返回结果中包含hot和warm节点,表示集群已支持冷热架构。
开启目标集群的自动创建索引功能,具体操作步骤请参见通过配置YML参数开启自动创建索引。
配置集群的公网地址访问白名单,将安装Heartbeat服务器的IP地址添加到白名单中,具体操作步骤请参见设置IP白名单。
步骤二:在Heartbeat下配置ILM
详细的ILM配置说明请参见Set up index lifecycle management。
下载Heartbeat安装包,并解压缩。
编辑heartbeat.yml,分别定义heartbeat.monitors、setup.template.settings、setup.kibana和output.elasticsearch。
配置示例如下。
heartbeat.monitors: - type: icmp schedule: '*/5 * * * * * *' hosts: ["47.111.xx.xx"] setup.template.settings: index.number_of_shards: 3 index.codec: best_compression index.routing.allocation.require.box_type: "hot" setup.template.overwrite: true setup.kibana: host: "https://es-cn-4591jumei00xxxxxx.kibana.elasticsearch.aliyuncs.com:5601" output.elasticsearch: hosts: ["es-cn-4591jumei00xxxxxx.elasticsearch.aliyuncs.com:9200"] ilm.enabled: true ilm.rollover_alias: "heartbeat" ilm.pattern: "{now/d}-000001" username: "elastic" password: "<your_password>"部分参数说明如下,更多参数说明请参见Heartbeat配置文档。
参数
说明
index.number_of_shards
设置主分片数,默认是1。
index.routing.allocation.require.box_type
设置将索引数据写入hot节点。
setup.template.overwrite
设置是否覆盖原索引模板。如果已将此版本的索引模板加载到Elasticsearch中,必须设置为true以覆盖原模板。该参数为顶级配置项,与
setup.template.settings同级。host
替换为Kibana服务的公网访问地址,可在Kibana的配置页面获取。
hosts
替换为Elasticsearch集群的公网或私网访问地址,可在集群的基本信息页面获取,详细信息请参见查看实例基本信息。如果设置为公网地址,需要配置集群的公网地址访问白名单,具体操作请参见设置IP白名单;如果设置为私网地址,需要确保集群与安装Heartbeat的服务器在同一专有网络下。
ilm.enabled
设置为true,表示启用索引生命周期管理ILM。
ilm.rollover_alias
设置滚动更新索引时生成的索引别名,默认是heartbeat-\{beat.version\}。
ilm.pattern
设置滚动更新索引时生成的索引模式。支持date math,默认是{now/d}-000001。当触发索引滚动更新条件后,新的索引名称会在最后一位数字上加1。例如第一次滚动更新产生的索引名称是heartbeat-2020.04.29-000001,触发滚动后新索引名称为heartbeat-2020.04.29-000002。
username
用户名默认为elastic。
password
elastic用户的密码在创建实例时设定,如果忘记可重置。重置密码的操作步骤请参见重置实例访问密码。
重要如果在加载索引模板后修改ilm.rollover_alias或ilm.pattern,则必须设置setup.template.overwrite为true,重写索引模板。
启动Heartbeat服务。
sudo ./heartbeat -e
步骤三:创建ILM策略
Elasticsearch支持通过API和Kibana控制台两种方式创建ILM策略。以下以API方式为例,创建heartbeat-policy策略。
Heartbeat支持通过./heartbeat setup --ilm-policy命令加载默认的策略并写入Elasticsearch,默认策略可通过./heartbeat export ilm-policy命令导出。可以修改该默认策略,实现手动创建策略。
在Kibana控制台中,执行以下命令,创建ILM策略。
PUT /_ilm/policy/heartbeat-policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_size": "5mb",
"max_age": "1d",
"max_docs": 100
}
}
},
"warm": {
"min_age": "60s",
"actions": {
"forcemerge": {
"max_num_segments":1
},
"shrink": {
"number_of_shards":1
}
}
},
"cold": {
"min_age": "3m",
"actions": {
"allocate": {
"require": {
"box_type": "warm"
}
}
}
},
"delete": {
"min_age": "1h",
"actions": {
"delete": {}
}
}
}
}
}参数 | 说明 |
hot | 索引满足任一条件(数据达到5 MB、使用超过1天、文档数超过100)时触发滚动更新。旧索引在滚动更新后等待60秒进入warm阶段。rollover支持max_docs、max_size、max_age三种条件,满足任一即触发。 |
warm | 将索引收缩到1个分片,强制合并为1个段。完成后,索引在3分钟(从滚动更新时算起)后进入cold阶段。 |
cold | 将索引从hot节点迁移到warm(冷数据)节点。完成后,索引在1小时后进入delete阶段。 |
delete | 索引被删除。 |
策略名创建后无法更改。通过Kibana控制台也可以创建策略,但Kibana上max_age最小单位为小时,API方式最小单位为秒。
步骤四:为ILM策略关联索引模板
启动Heartbeat后,系统会自动在Elasticsearch中创建Heartbeat索引模板。将步骤三:创建ILM策略中创建的heartbeat-policy策略关联该索引模板。
登录目标阿里云Elasticsearch实例的Kibana控制台,具体步骤请参见通过Kibana连接集群。
在左侧导航栏,单击 Management 。
在 Elasticsearch 区域,单击 Index Lifecycle Policies 。
在 Index lifecycle policies 列表中,找到heartbeat-policy策略,单击该策略行对应的 Actions > Add policy to index template 。
在弹出的对话框中,从 Index template 列表中选择索引模板,并在 Alias for rollover index 文本框中输入索引别名。
单击 Add policy。
步骤五:为索引关联ILM策略
启动Heartbeat后,系统会自动在Elasticsearch中创建索引。为第一个索引关联ILM策略,该策略已在步骤四:为ILM策略关联索引模板中关联了索引模板。
在 Management 页面的 Elasticsearch 区域中,单击 Index Management。
在 Index management列表中,找到目标索引,单击索引名称。
在 Summary 页面,选择 Manage > Remove lifecycle policy ,移除Heartbeat自带的默认策略。
在弹出的对话框中,单击 Remove policy 。
再选择 Manage > Add lifecycle policy 。
在弹出的对话框中,从 Lifecycle policy 列表中选择步骤三:创建ILM策略中创建的heartbeat-policy策略,并在 Index rollover alias 输入框中输入步骤四:为ILM策略关联索引模板中定义的索引别名,单击 Add policy 。
步骤六:查看各阶段索引
在Index management 页面,单击 Lifecycle phase 下拉列表,选择生命周期阶段(如Hot、Warm、Cold)过滤查看对应阶段的索引。
常见问题
如何调整ILM策略检查频率?
ILM默认每10分钟检查一次符合策略的索引,在此期间数据量可能超出设定阈值。例如在步骤三:创建ILM策略中设置max_docs为100,实际文档数可能在超过100后才触发滚动更新。
通过修改indices.lifecycle.poll_interval参数可控制检查频率:
检查频率过高会增加节点负载,建议根据业务需求谨慎设置。
PUT _cluster/settings
{
"transient": {
"indices.lifecycle.poll_interval":"1m"
}
}