Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Elasticsearch探索:rollover API

Elasticsearch探索:rollover API

作者头像
HLee
修改于 2021-01-12 02:16:34
修改于 2021-01-12 02:16:34
89810
代码可运行
举报
文章被收录于专栏:房东的猫房东的猫
运行总次数:0
代码可运行

简介

rollover API 使你可以根据索引大小,文档数或使用期限自动过渡到新索引。 当 rollover 触发后,将创建新索引,写别名(write alias) 将更新为指向新索引,所有后续更新都将写入新索引。

对于基于时间的 rollover 来说,基于大小,文档数或使用期限过渡至新索引是比较适合的。 在任意时间 rollover 通常会导致许多小的索引,这可能会对性能和资源使用产生负面影响。

Rollover历史数据:

  • 在大多数情况下,无限期保留历史数据是不可行的

         - 时间序列数据随着时间的流逝而失去价值,我们最终不得不将其删除

         - 但是其中一些数据对于分析仍然非常有用 

  • Elasticsearch 6.3 引入了一项新的 rollover 功能,该功能

         - 以紧凑的聚合格式保存旧数据

         - 仅保存您感兴趣的数据

就像上面的图片看到的那样,我们定义了一个叫做 logs-alias 的alias,对于写操作来说,它总是会自动指向最新的可以用于写入index 的一个索引。针对我们上面的情况,它指向 logs-000002。如果新的 rollover 发生后,新的 logs-000003 将被生成,并对于写操作来说,它自动指向最新生产的 logs-000003 索引。而对于读写操作来说,它将同时指向最先的 logs-1,logs-000002 及 logs-000003。在这里我们需要注意的是:在我们最早设定 index 名字时,最后的一个字符必须是数字,比如我们上面显示的 logs-1。否则,自动生产 index 将会失败。

实例分享

我们还是先拿一个 rollover 的例子来说明,这样比较清楚。首先我们定义一个 log-alias 的 alias:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT /%3Clogs-%7Bnow%2Fd%7D-1%3E
{
  "aliases": {
    "log_alias": {
      "is_write_index": true
    }
  }
}

如果大家对于上面的字符串 “%3Clogs-%7Bnow%2Fd%7D-1%3E” 比较陌生的话,可以参考网站 https://www.urlencoder.io/。实际上它就是字符串 “<logs-{now/d}-1>” 的url编码形式。请注意上面的 is_write_index 必须设置为 true。运行上面的结果是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "acknowledged":true,
    "shards_acknowledged":true,
    "index":"logs-2019.10.21-1"
}

显然,它帮我们生产了一个叫做 logs-2019.10.21-1 的 index。接下来,我们先使用我们的 Kibana 来准备一下我们的 index 数据。我们运行起来我们的 Kibana:

我们分别点击上面的1和2处

点击上面的 “Add data”。这样我们就可以把我们的 kibana_sample_data_logs 索引加载到 Elasticsearch 中。我们可以通过如下的命令进行查看:

命令显示结果为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
green open kibana_sample_data_logs ZbiojIYZSPCX0vJn_VOsGg 1 0 14074 0 10.7mb 10.7mb

它显示 kibana_sample_data_logs 具有 11.1M 的数据,并且它有 14074 个文档

我们接下来运行如下的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST _reindex
{
  "source": {
    "index": "kibana_sample_data_logs"
  },
  "dest": {
    "index": "log_alias"
  }
}

这个命令的作用是把 kibana_sample_data_logs 里的数据 reindex 到 log_alias 所指向的 index。也就是把 kibana_sample_data_logs 的文档复制一份到我们上面显示的 logs-2019.10.21-1 索引里。我们做如下的操作查看一下结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET logs-2019.10.21-1/_count

结果:
{
    "count":14074,
    "_shards":{
        "total":1,
        "successful":1,
        "skipped":0,
        "failed":0
    }
}

显然,我们已经复制到所有的数据。那么接下来,我们来运行如下的一个指令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST /log_alias/_rollover?dry_run
{
  "conditions": {
    "max_age": "7d",
    "max_docs": 14000,
    "max_size": "5gb"
  }
}

在这里,我们定义了三个条件:

  • 如果时间超过7天,那么自动 rollover,也就是使用新的 index
  • 如果文档的数目超过 14000 个,那么自动 rollover
  • 如果 index 的大小超过 5G,那么自动 rollover

在上面我们使用了 dry_run 参数,表明就是运行时看看,但不是真正地实施。显示的结果是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "acknowledged":false,
    "shards_acknowledged":false,
    "old_index":"logs-2019.10.21-1",
    "new_index":"logs-2019.10.21-000002",
    "rolled_over":false,
    "dry_run":true,
    "conditions":{
        "[max_docs: 1400]":true,
        "[max_size: 5gb]":false,
        "[max_age: 7d]":false
    }
}

根据目前我们的条件,我们的 logs-2019.10.21-1 文档数已经超过 14000 个了,所以会生产新的索引 logs-2019.10.21-000002。因为我使用了 dry_run,也就是演习,所以显示的 rolled_over 是 false。

为了能真正地 rollover,我们运行如下的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST /log_alias/_rollover
{
  "conditions": {
    "max_age": "7d",
    "max_docs": 1400,
    "max_size": "5gb"
  }"settings": {
    "index.number_of_shards": 2
  }
}

结果:
{
    "acknowledged":true,
    "shards_acknowledged":true,
    "old_index":"logs-2019.10.21-1",
    "new_index":"logs-2019.10.21-000002",
    "rolled_over":true,
    "dry_run":false,
    "conditions":{
        "[max_docs: 1400]":true,
        "[max_size: 5gb]":false,
        "[max_age: 7d]":false
    }
}

说明它已经rolled_ovder了。我们可以通过如下写的命令来检查:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET _cat/indices/logs-2019*

显示的结果为:

我们现在可以看到有两个以 logs-2019.10.21 为头的 index,并且第二文档 logs-2019.10.21-000002 文档数为0。如果我们这个时候直接再想 log_alias 写入文档的话:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST log_alias/_doc
{
  "agent": "Mozilla/5.0 (X11; Linux x86_64; rv:6.0a1) Gecko/20110421 Firefox/6.0a1",
  "bytes": 6219,
  "clientip": "223.87.60.27",
  "extension": "deb",
  "geo": {
    "srcdest": "IN:US",
    "src": "IN",
    "dest": "US",
    "coordinates": {
      "lat": 39.41042861,
      "lon": -88.8454325
    }
  },
  "host": "artifacts.elastic.co",
  "index": "kibana_sample_data_logs",
  "ip": "223.87.60.27",
  "machine": {
    "ram": 8589934592,
    "os": "win 8"
  },
  "memory": null,
  "message": """            223.87.60.27 - - [2018-07-22T00:39:02.912Z] "GET /elasticsearch/elasticsearch-6.3.2.deb_1 HTTP/1.1" 200 6219 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:6.0a1) Gecko/20110421 Firefox/6.0a1"  """,
  "phpmemory": null,
  "referer": "http://twitter.com/success/wendy-lawrence",
  "request": "/elasticsearch/elasticsearch-6.3.2.deb",
  "response": 200,
  "tags": [
    "success",
    "info"
  ],
  "timestamp": "2019-10-13T00:39:02.912Z",
  "url": "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.2.deb_1",
  "utc_time": "2019-10-13T00:39:02.912Z"
}

结果:
{
    "_index":"logs-2019.10.21-000002",
    "_type":"_doc",
    "_id":"xPyQ7m0BsjOKp1OsjsP8",
    "_version":1,
    "result":"created",
    "_shards":{
        "total":1,
        "successful":1,
        "failed":0
    },
    "_seq_no":1,
    "_primary_term":1
}

显然它写入的是 logs-2019.10.21-000002 索引。我们再次查询 log_alias 的总共文档数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET log_alias/_count

结果:
{
    "count":14075,
    "_shards":{
        "total":2,
        "successful":2,
        "skipped":0,
        "failed":0
    }
}

显然它和之前的 14074 个文档多增加了一个文档,也就是说 log_alias 是同时指向 logs-2019.10.21-1 及 logs-2019.10.21-000002。

总结

在今天的文档里,我们讲述了如何使用 rollover API 来自动管理我们的 index。利用 rollover API,它可以很方便地帮我们自动根据我们设定的条件帮我们把我们的Index过度到新的 index。在未来的文章里,我们将讲述如何使用 Index life cycle policy 来帮我们管理我们的 index。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
ES6.3.2版本不支持is_write_index,导致索引别名只能指向一个索引,不能指向多个。这点在此点出。
ES6.3.2版本不支持is_write_index,导致索引别名只能指向一个索引,不能指向多个。这点在此点出。
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
Elasticsearch rollover API
rollover API 使你可以根据索引大小,文档数或使用期限自动过渡到新索引。 当 rollover 触发后,将创建新索引,写别名(write alias) 将更新为指向新索引,所有后续更新都将写入新索引。
腾讯云大数据
2020/09/29
2.4K0
Elasticsearch rollover API
Elasticsearch——Rollover的正确使用姿势
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/ilm-rollover.html
WeldonWang
2023/03/09
3K0
干货 | Elasticsearch索引生命周期管理探索
Elasticsearch上海Meetup中ebay工程师提了索引生命周期管理的概念。的确,在Demo级别的验证阶段我们数据量比较小,不太需要关注索引的生命周期,一个或几个索引基本就能满足需要。所以,这也会产生一种假象,认为:“Elasticsearch不就是增删改查,毛毛雨啦”的荒诞的假象。
铭毅天下
2018/08/14
2.1K0
干货 | Elasticsearch索引生命周期管理探索
Elasticsearch 索引容量管理实践
Elasticsearch是目前大数据领域最热门的技术栈之一,腾讯云 Elasticsearch Service(ES)是基于开源搜索引擎 Elasticsearch 打造的高可用、可伸缩的云端全托管 Elasticsearch 服务,完善的高可用解决方案,让业务可以放心的把重要数据存储到腾讯云 ES 中。
腾讯云大数据
2021/01/07
1K0
Elasticsearch 索引容量管理实践
Elasticsearch ILM实现索引全生命周期自动管理,解放双手
Elasticsearch Index Lifecycle Management(ILM)是Elasticsearch的一个功能,用于管理索引的生命周期,优化索引的性能和减少存储成本。ILM可以自动执行索引的各种操作,如创建、删除、滚动、缩小等,从而帮助用户轻松地管理索引的生命周期。ILM可以帮助用户减少手动干预的工作量,使其可以更好地专注于数据分析。
MCNU云原生
2023/03/17
1.1K0
Elasticsearch ILM实现索引全生命周期自动管理,解放双手
Elasticsearch探索:Index lifecycle policy
如果你要处理时间序列数据,则不想将所有内容连续转储到单个索引中。 取而代之的是,您可以定期将数据滚动到新索引,以防止数据过大而又缓慢又昂贵。 随着索引的老化和查询频率的降低,您可能会将其转移到价格较低的硬件上,并减少分片和副本的数量。
HLee
2021/01/12
4.4K0
Elasticsearch探索:Index lifecycle policy
干货 | Elasticsearch 索引生命周期管理 ILM 实战指南
关于人生,有人这么说:“人,生来一个人,死去一个人,所以,人生就是一个人生老病死的简称。”
铭毅天下
2021/06/25
7.2K1
干货 | Elasticsearch 索引生命周期管理 ILM 实战指南
ElasticSearch最全详细使用教程:入门、索引管理、映射详解
墨墨导读:本文介绍了ElasticSearch的必备知识:从入门、索引管理到映射详解。
数据和云
2019/08/12
3.2K0
ElasticSearch最全详细使用教程:入门、索引管理、映射详解
10.ES滚动索引如何使用
索引滚动是一种管理索引的策略,用于优化性能和资源利用,特别是在处理大量数据时。当索引数据量逐渐增大时,可能会出现性能下降或资源压力过大的情况。为了避免这些问题,可以使用索引滚动策略来定期创建新的索引,并将数据从旧索引滚动(移动)到新索引。
AI码师
2023/11/08
6450
10.ES滚动索引如何使用
Elasticsearch 索引容量管理实践
作者:gavinyao,腾讯 PCG 后台开发工程师 Elasticsearch 是目前大数据领域最热门的技术栈之一,腾讯云 Elasticsearch Service(ES)是基于开源搜索引擎 Elasticsearch 打造的高可用、可伸缩的云端全托管 Elasticsearch 服务,完善的高可用解决方案,让业务可以放心的把重要数据存储到腾讯云 ES 中。 了解 ES 的索引管理方法有助于扬长避短,更好的利用 ES 的强大功能,特别是当遇到性能问题时,原因通常都可回溯至数据的索引方式以及集群中的
腾讯技术工程官方号
2020/07/06
1.2K0
白话Elasticsearch73_ES生产集群中的索引管理01
Index APIs: https://www.elastic.co/guide/en/elasticsearch/reference/current/indices.html
小小工匠
2021/08/17
4370
Elasticsearch也能"分库分表",rollover实现自动分索引
MySQL的分库分表大家是非常熟悉的,在Elasticserach中有存在类似的场景需求。为了不让单个索引太过于庞大,从而引发性能变差等问题,我们常常有根据索引大小、时间等创建新索引的需求,解决方案一般有两个:
MCNU云原生
2023/03/17
2.8K1
Elasticsearch也能"分库分表",rollover实现自动分索引
Elasticsearch 索引容量管理实践
Elasticsearch是目前大数据领域最热门的技术栈之一,腾讯云 Elasticsearch Service(ES)是基于开源搜索引擎 Elasticsearch 打造的高可用、可伸缩的云端全托管 Elasticsearch 服务,完善的高可用解决方案,让业务可以放心的把重要数据存储到腾讯云 ES 中。
姚俊刚
2020/06/18
3.3K0
Elasticsearch 索引容量管理实践
Elasticsearch:Index 生命周期管理入门
如果你要处理时间序列数据,则不想将所有内容连续转储到单个索引中。 取而代之的是,您可以定期将数据滚动到新索引,以防止数据过大而又缓慢又昂贵。 随着索引的老化和查询频率的降低,您可能会将其转移到价格较低的硬件上,并减少分片和副本的数量。
腾讯云大数据
2020/10/09
3.9K1
Elasticsearch:Index 生命周期管理入门
ES API,使用Kibana的开发工具用例说明
详情查看->https://blog.csdn.net/chen18677338530/article/details/93067493
刘大猫
2024/11/02
980
Elasticsearch索引全生命周期一网打尽
索引(Index)是Elasticsearch中最重要的概念之一,也是整个Elasticsearch操作的基础,它是相互关联的文档的一个集合。在Elasticsearch种,数据存储为 JSON 文档,每个文档将一组键(字段或属性的名称)与其对应的值(字符串、数字、布尔值、日期、地理位置或其他类型的数据)相关联,Elasticsearch 使用一种称为倒排索引的数据结构,旨在实现非常快速的全文搜索。倒排索引列出了出现在任何文档中的每个唯一单词,并标识了每个单词出现的所有文档。
MCNU云原生
2023/03/17
1.1K0
Elasticsearch索引全生命周期一网打尽
让Elasticsearch飞起来!百亿级实时查询优化实战
经过对 Elasticsearch 多方调研和超过几百亿条数据的插入和聚合查询的验证之后,我们总结出以下几种能够有效提升性能和解决这一问题的方案:
猿天地
2019/06/18
1.7K0
Elasticsearch 索引生命周期管理
在 Elasticsearch的日常管理中,有很多如系统日志,行为数据等方面的应用场景,这些场景的特点是数据量非常大,并且随着时间的增长索引的数量也会持续增长,然而这些场景基本上只有最近一段时间的数据有使用价值或者会被经常使用(热数据),而历史数据几乎没有作用或者很少会被使用(冷数据),这个时候就需要对索引进行一定策略的维护管理甚至是删除清理,否则随着数据量越来越多除了浪费磁盘与内存空间之外,还会严重影响 Elasticsearch 的性能。
Se7en258
2021/05/18
8180
Elasticsearch 索引生命周期管理
Elasticsearch ILM 索引生命周期管理 - ES 必备技能
假设有三个索引,my-index-001, my-index-002, my-index-003, 全部绑定到别名 my-alias, 并且 my-index-003 设置了 "is_write_index": true。这意味着对 my-alias 查询可以查询到以上所有三个索引的数据,而对 my-alias 写入数据只会写入到 my-index-003。
sir5kong
2023/07/20
1K0
Elasticsearch之索引管理API(Index management)
代码@1:索引的配置属性。请详细参考如下博文: 代码@2:定义映射,有点类似于关系型数据库中的定义表结构,详情请参考:Elasticsearch Mapping parameters(主要参数一览)、Elasticsearch Mapping类型映射概述与元字段详解 代码@3:为索引指定别名设置。
丁威
2019/06/11
3K0
Elasticsearch之索引管理API(Index management)
相关推荐
Elasticsearch rollover API
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验