前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >elasticsearch使用之datastream

elasticsearch使用之datastream

原创
作者头像
空洞的盒子
发布2023-11-22 14:25:58
7781
发布2023-11-22 14:25:58
举报
文章被收录于专栏:JD的专栏

一.什么是data stream

datastream是elasticsearch提供的一种用于存储流式数据的功能。按照时间对数据进行切分,每个datastream索引都包含一个时间段内的数据。一般我们使用datastream来记录"日志数据","监控数据","指标数据"这类连续不断生成,且时序性较强的数据。

data stream的写入

通常我们在使用datastream时,都会结合ILM对datastream索引进行管理。会自动根据datastream中写入的数据进行索引的滚动,以及全生命周期的管理。在我们写入每一条数据都必须要包含@timestamp字段,因为我们的数据流是基于时间进行管理与切分的。我们可以通过索引模板对字段进行指定,如果在模板中没有指定,elasticsearch也会指定一个默认日期为@timestamp

对于datastream的写入 如下图所示,伴随着我们数据的写入,ILM会根据我们策略中配置的条件对datastream的索引进行切分,以保证datastream中的数据写入都是在最新的索引中,同时每个索引都是恒定大小。让datastream拥有最好的写入性能。

data stream的查询

在对datastream进行查询时我们在操作上与查询索引没有太大的区别,也是通过search请求进行查询,datastream会根据我们的查询逻辑,将请求路由至符合条件的索引中。

例如在下面的样例中我们,我们使用通配符的形式对索引进行匹配,然后进行查询。由于datastream滚动出的索引都为基于时间进行生成,所以我们在查询时,也建议合理控制通配符的时间粒度,避免时间跨度过大,适配的索引过多,扫描的分片过多,而导致出现慢查询,或查询超时的情况。

代码语言:javascript
复制
GET .ds-logs-2099*/_search

二.如何使用data stream

在之前的文章"https://cloud.tencent.com/developer/article/2356835"我们已经讲过如何创建并使用ILM。所以我们这里直接开始讲data stream模板的创建与data stream的创建。

创建data stream模板

我们这里使用_template API进行模板的创建,根据我们的写入需求,合理的设置每个索引的主分片数与副本数,绑定我们之前已经创建完成的ILM策略。在模版中约束了@timestamp字段。同时设置模板的优先级为200,这样做的目的是为了避免与集群中其他的模板冲突,影响data stream索引的生成与适配。

代码语言:javascript
复制
PUT _template/my_data_stream_template
   {
     "order":200
     "index_patterns": ["my_data_stream-*"],
     "data_stream": {},
     "template": {
       "settings": {
         "number_of_shards": 1,
         "number_of_replicas": 1,
         "index.lifecycle.name": "my-lifecycle-policy"
       },
       "mappings": {
         "properties": {
           "@timestamp": {
           "type": "date",
           "format": "date_optional_time||epoch_millis"
        }
         }
       }
     }
   }

创建data stream

我们这是使用数据自动创建数据流,我们这里指定的数据流名称需要与模板中的"index-patterns"中的值保持一致,以便能够准确的匹配到我们的数据流索引。同时我们的数据中还需要包含@timestamp字段。

代码语言:javascript
复制
PUT my-data-stream/_bulk
{ "create":{ } }
{ "@timestamp": "2099-05-06T16:21:15.000Z", "message": "192.0.2.42 - - [06/May/2099:16:21:15 +0000] \"GET /images/bg.jpg HTTP/1.0\" 200 24736" }
{ "create":{ } }
{ "@timestamp": "2099-05-06T16:25:42.000Z", "message": "192.0.2.255 - - [06/May/2099:16:25:42 +0000] \"GET /favicon.ico HTTP/1.0\" 200 3638" }

也可以使用_data_stream API直接进行进行数据流的创建。

代码语言:javascript
复制
PUT _data_stream/my_data_stream

对data stream进行数据写入

在数据流创建完成后,我们就可以直接基于数据流的名称,例如通过别名对数据流进行写入。

代码语言:javascript
复制
POST my_data_stream/_doc
{
   "field1": "value1",
   "field2": "value2"
}

POST my-data-stream/_doc
{
  "@timestamp": "2099-05-06T16:21:15.000Z",
  "message": "192.0.2.42 - - [06/May/2099:16:21:15 +0000] \"GET /images/bg.jpg HTTP/1.0\" 200 24736"
}

查看data stream

我们可以直接通过GET的方式查看data stream的详情

代码语言:javascript
复制
GET /_data_stream/<data-stream>

删除data stream

我们直接使用DELETE进行删除即可。

代码语言:javascript
复制
DELETE _data_stream/my-data-stream

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.什么是data stream
    • data stream的写入
      • data stream的查询
      • 二.如何使用data stream
        • 创建data stream模板
          • 创建data stream
            • 对data stream进行数据写入
              • 查看data stream
                • 删除data stream
                相关产品与服务
                Elasticsearch Service
                腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档