带你读《Elastic Stack 实战手册》之44:——3.5.3.Rollup (1)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 带你读《Elastic Stack 实战手册》之44:——3.5.3.Rollup (1)

3.5.3.Rollup


创作人杨景江

审稿人朱永生

 

汇总作业( rollup jobs )是周期性执行的任务,通过汇总作业,可以将某些索引中的数据进行周期性自定义化聚合,然后将聚合后的数据写入到新的索引中,整个流程叫做 Rollup 。

 

使用场景:

 

汇总历史数据

 

由于历史数据数据量大,占用磁盘成本高,相关业务方只关心近期几天的原始数据,历史数据不关心原始数据,只关心固定指标统计。为了节省成本,就可以通过 Rollup 操作将历史数据进行汇总,写入到新的索引,之后可以将历史索引删除( ILM 功能),进而节省大量成本

 

转换最佳时间:

 

由于数据量或机器硬件等原因,导致实时聚合查询耗时较长,可以通过在夜间或者准实时进行 Rollup 操作,将前一天索引或者几分钟前的数据进行汇总,写入到新索引(将毫秒级别数据汇总,转换为秒级甚至分钟级别),用户查询 Rollup 后新索引的数据,进而提升查询效率。

 

汇总历史数据功能限制:

 

汇总功能只允许使用以下聚合方式对字段进行分组

 

l Date Histogram aggregation

l Histogram aggregation

l Terms aggregation (使用较多)

    968         >   三、产品能力

 

数字字段只可以进行如下指标聚合

 

l Min aggregation

l Max aggregation

l Sum aggregation

l Average aggregation

l Value Count aggregation

 

每个功能都要结合具体业务场景来使用,切忌为了使用功能而设计。

 

API 介绍

 

此处以统计 Elasticsearch 慢查数据功能为例进行介绍(敏感信息已经替换)

 

数据准备

 

索引 mapping 结构:

 

PUT es-slowlog-2021-04-21
{
    "mappings": {
      "_field_names": {
        "enabled": false
      },
      "dynamic_templates": [
        {
          "strings": {
            "match_mapping_type": "string",
            "mapping": {
              "ignore_above": 512,
              "type": "keyword"
            }
    969         >   三、产品能力
          }
        }
      ],
      "properties": {
        "@timestamp": {
          "type": "date"
        },
        "cluster": {
          "type": "keyword",
          "ignore_above": 512
        },
    "host": { 
          "properties": { 
            "name": { 
              "type": "keyword",
              "ignore_above": 512
            }
          }
        },
        "elasticsearch": {
          "properties": {
            "index": {
              "properties": {
                "name": {
                  "type": "keyword",
                  "ignore_above": 512
                }
              }
            }
          }
        },
        "timestamp_local": {
          "type": "date"
        }
      }
    }
}

单条数据 demo 样例(与上边的 mapping 对应):


POST es-slowlog-2021-04-21/_doc
{
  "cluster": "clustername-demo",
  "offset": 0,
  "log": {
    "level": "WARN"
  },
  "prospector": {
    "type": "log"
  },
  "source": "/home/elasticsearch/clustername-demo_index_search_slowlog.log",
  "message": "[2021-04-21T14:03:06,896][WARN ][i.s.s.query ] [host_name-demo] [basiclog-slowlog_2021-04-02][2] took[2.3s], took_millis[2307], total_hits[23129 hits], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[4], source[{\"size\":0,\"query\":{\"bool\":{\"filter\":[{\"match_all\":{\"boost\":1.0}},{\"match_phrase\":{\"logtype.keyword\":{\"query\":\"server\",\"slop\":0,\"zero_terms_query\":\"NONE\",\"boost\":1.0}}},{\"range\":{\"@timestamp\":{\"from\":\"2021-04-02T15:48:04.138Z\",\"to\":\"2021-04-02T16:03:04.138Z\",\"include_lower\":true,\"include_upper\":true,\"format\":\"strict_date_optional_time\",\"boost\":1.0}}}],\"adjust_pure_negative\":true,\"boost\":1.0}},\"_source\":{\"includes\":[],\"excludes\":[]},\"stored_fields\":\"*\",\"docvalue_fields\":[{\"field\":\"@timestamp\",\"format\":\"date_time\"},{\"field\":\"time\",\"format\":\"date_time\"}],\"script_fields\":{},\"track_total_hits\":2147483647,\"aggregations\":{\"2\":{\"terms\":{\"field\":\"cluster.keyword\",\"size\":20,\"min_doc_count\":1,\"shard_min_doc_count\":0,\"show_term_doc_count_error\":false,\"order\":[{\"_count\":\"desc\"},{\"_key\":\"asc\"}]}}}}], id[],",
  "input": {
    "type": "log"
  },
  "logtype": "slowlog",
  "log_type": "basic-slowlog",
  "timestamp_local": "2021-04-21T14:03:06.896+08:00",
  "@timestamp": "2021-04-21T14:03:06.896Z",
  "elasticsearch": {
    "node": {
      "name": "host_name-demo"
    },
    "slowlog": {
      "took": "2.3s",
      "logger": "i.s.s.query "
    },
    "index": {
      "name": "basiclog-slowlog_2021-04-02"
    },
    "shard": {
      "id": "2"
    }
  },
  "host": {
    "name": "host_name-demo"
  },
  "beat": {
    "hostname": "beathostname-demo",
    "name": "beathostname-demo",
    "version": "6.5.4"
  },
  "@version": "1",
  "event": {
    "duration": 2307000000,
    "created": "2021-04-21T06:59:11.934Z",
    "kind": "event",
"category": "database",
    "type": "info"
  }
}

在 Kibana 中配置 Index Patterns

 image.png


注:最新版本 API 请参考官方文档:

https://www.elastic.co/guide/en/elasticsearch/reference/master/xpack-rollup.html

 

《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.3.Rollup (2) https://developer.aliyun.com/article/1228769

 

 

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
12月前
|
API
带你读《Elastic Stack 实战手册》之44:——3.5.3.Rollup (2)
带你读《Elastic Stack 实战手册》之44:——3.5.3.Rollup (2)
|
12月前
|
存储 索引
带你读《Elastic Stack 实战手册》之44:——3.5.3.Rollup (4)
带你读《Elastic Stack 实战手册》之44:——3.5.3.Rollup (4)
|
12月前
|
消息中间件 NoSQL 中间件
带你读《Elastic Stack 实战手册》之44:——3.5.3.Rollup (5)
带你读《Elastic Stack 实战手册》之44:——3.5.3.Rollup (5)
|
12月前
|
API 索引
带你读《Elastic Stack 实战手册》之44:——3.5.3.Rollup (3)
带你读《Elastic Stack 实战手册》之44:——3.5.3.Rollup (3)
|
12月前
|
存储 项目管理 微服务
带你读《Elastic Stack 实战手册》之21:——3.4.2.6.Join数据类型
带你读《Elastic Stack 实战手册》之21:——3.4.2.6.Join数据类型
|
12月前
|
自然语言处理 索引
带你读《Elastic Stack 实战手册》之33:——3.4.2.17.2.Schemaless(上)
带你读《Elastic Stack 实战手册》之33:——3.4.2.17.2.Schemaless(上)
102 0
|
12月前
|
JSON Java 数据格式
带你读《Elastic Stack 实战手册》之33:——3.4.2.17.2.Schemaless(下)
带你读《Elastic Stack 实战手册》之33:——3.4.2.17.2.Schemaless(下)
|
12月前
|
存储 运维 监控
带你读《Elastic Stack 实战手册》之2:——二、导读(下)
带你读《Elastic Stack 实战手册》之2:——二、导读(下)
254 0
|
12月前
|
SQL 自然语言处理 监控
带你读《Elastic Stack 实战手册》之2:——二、导读(上)
带你读《Elastic Stack 实战手册》之2:——二、导读(上)
327 0
|
12月前
带你读《Elastic Stack 实战手册》之18:——3.4.2.3.Search通过Kibana(18)
带你读《Elastic Stack 实战手册》之18:——3.4.2.3.Search通过Kibana(18)