创建汇总作业 API
编辑创建汇总作业 API
编辑在 8.11.0 中已弃用。
汇总将在未来的版本中移除。请改用 降采样。
从 8.15.0 开始,在没有汇总用法的集群中调用此 API 将会失败,并显示有关汇总的弃用和计划移除的消息。集群必须包含汇总作业或汇总索引才能允许执行此 API。
创建一个汇总作业。
请求
编辑PUT _rollup/job/<job_id>
描述
编辑汇总作业配置包含有关作业应如何运行、何时索引文档以及将来哪些查询可以针对汇总索引执行的所有详细信息。
作业配置主要分为三个部分:有关作业的后勤详细信息(cron 计划等)、用于分组的字段以及为每个组收集的指标。
作业创建时处于 STOPPED
状态。可以使用 启动汇总作业 API 启动它们。
路径参数
编辑-
<job_id>
- (必需,字符串)汇总作业的标识符。它可以是任何字母数字字符串,并唯一标识与汇总作业关联的数据。ID 是持久性的;它与汇总数据一起存储。如果创建一个作业,让它运行一段时间,然后删除该作业,则该作业汇总的数据仍将与此作业 ID 关联。您不能使用相同的 ID 创建新作业,因为这可能会导致不匹配的作业配置出现问题。
请求主体
编辑-
cron
- (必需,字符串)一个 cron 字符串,它定义汇总作业应执行的时间间隔。当间隔触发时,索引器会尝试汇总索引模式中的数据。cron 模式与正在汇总的数据的时间间隔无关。例如,您可能希望创建文档的每小时汇总,但仅在每天午夜按 cron 定义的执行索引器。cron 模式的定义方式与 Watcher cron 计划相同。
-
groups
-
(必需,对象)定义此汇总作业的组字段和聚合。这些字段随后将在以后可用于聚合到存储桶中。
这些聚合和字段可以以任意组合使用。可以将
groups
配置视为定义一组工具,这些工具以后可以在聚合中用于对数据进行分区。与原始数据不同,我们必须提前考虑可能使用哪些字段和聚合。汇总提供了足够的灵活性,您只需确定需要哪些字段,而不是按什么顺序需要它们。目前有三种类型的分组可用:
date_histogram
、histogram
和terms
。groups
的属性-
date_histogram
-
(必需,对象)日期直方图组将
date
字段聚合到基于时间的存储桶中。此组是强制性的;目前您无法在没有时间戳和date_histogram
组的情况下汇总文档。date_histogram
组有多个参数date_histogram
的属性-
calendar_interval
或fixed_interval
-
(必需,时间单位)汇总时要生成的时间存储桶的间隔。例如,
60m
生成 60 分钟(每小时)汇总。这遵循 Elasticsearch 中其他地方使用的标准时间格式语法。该间隔仅定义可以聚合的最小间隔。如果配置了每小时 (60m
) 间隔,汇总搜索可以执行 60 分钟或更大的(每周、每月等)间隔聚合。因此,将间隔定义为您希望稍后查询的最小单位。有关日历时间和固定时间间隔之间差异的更多信息,请参阅 日历和固定间隔。较小、更精细的间隔会占用成比例的更多空间。
-
delay
-
(可选,时间单位)在汇总新文档之前等待的时间。默认情况下,索引器会尝试汇总所有可用数据。但是,数据无序到达的情况并不少见,有时甚至会晚几天。索引器无法处理在时间跨度被汇总之后到达的数据。也就是说,没有提供更新已存在的汇总的规定。
相反,您应该指定一个
delay
,使其与您预期无序数据到达的最长时间段相匹配。例如,1d
的delay
指示索引器汇总最多now - 1d
的文档,这为无序文档的到达提供了 1 天的缓冲时间。 -
field
- (必需,字符串)要汇总的日期字段。
-
time_zone
- (可选,字符串)定义汇总文档存储为哪个时区。与可以动态更改时区的原始数据不同,汇总文档必须以特定时区存储。默认情况下,汇总文档存储在
UTC
中。
-
-
histogram
-
(可选,对象)直方图组将一个或多个数字字段聚合为数字直方图间隔。
histogram
的属性-
fields
- (必需,数组)要为其构建直方图的字段集。指定的所有字段必须是某种类型的数字。顺序无关紧要。
-
interval
- (必需,整数)汇总时要生成的直方图存储桶的间隔。例如,值
5
创建宽度为五个单位的存储桶(0-5
、5-10
等)。请注意,histogram
组中只能指定一个间隔,这意味着通过直方图分组的所有字段必须共享相同的间隔。
-
-
terms
-
(可选,对象)术语组可以在
keyword
或数字字段上使用,以便以后可以通过terms
聚合进行存储桶划分。索引器枚举并存储每个时间段的字段的所有值。对于高基数字段(例如 IP 地址),尤其是在时间存储桶特别稀疏的情况下,这可能会代价高昂。虽然汇总的大小不太可能大于原始数据,但在多个高基数字段上定义
terms
组可以有效地在很大程度上降低汇总的压缩率。出于这个原因,您应该明智地选择包含哪些高基数字段。terms
的属性-
fields
- (必需,字符串)要收集术语的字段集。此数组可以包含
keyword
和数字的字段。顺序无关紧要。
-
-
-
index_pattern
-
(必需,字符串)要汇总的索引或索引模式。支持通配符样式模式(
logstash-*
)。该作业尝试汇总整个索引或索引模式。index_pattern
不能是与目标rollup_index
也匹配的模式。例如,模式foo-*
将匹配汇总索引foo-rollup
。这种情况会引发问题,因为汇总作业会在运行时尝试汇总自己的数据。如果您尝试配置与rollup_index
匹配的模式,则会发生异常以防止此行为。
-
metrics
-
(可选,对象)定义为每个分组元组收集的指标。默认情况下,仅为每个组收集 doc_counts。为了使汇总有用,您通常会添加平均值、最小值、最大值等指标。指标是基于每个字段定义的,并且对于每个字段,您都配置应收集哪个指标。
metrics
配置接受对象数组,其中每个对象都有两个参数。度量对象的属性
-
field
- (必需,字符串)要为其收集度量的字段。这必须是某种类型的数字。
-
metrics
- (必需,数组)要为该字段收集的度量数组。必须配置至少一个度量。可接受的度量包括
min
、max
、sum
、avg
和value_count
。
-
-
page_size
- (必需,整数)在汇总索引器的每次迭代中处理的存储桶结果数。较大的值往往执行速度更快,但在处理期间需要更多的内存。此值对数据的汇总方式没有影响;它仅用于调整索引器的速度或内存成本。
-
rollup_index
- (必需,字符串)包含汇总结果的索引。该索引可以与其他汇总作业共享。数据存储的方式不会干扰不相关的作业。
-
timeout
- (可选,时间值)等待请求完成的时间。默认为
20s
(20 秒)。
示例
编辑以下示例创建一个名为 sensor
的汇总作业,该作业的目标是 sensor-*
索引模式
resp = client.rollup.put_job( id="sensor", index_pattern="sensor-*", rollup_index="sensor_rollup", cron="*/30 * * * * ?", page_size=1000, groups={ "date_histogram": { "field": "timestamp", "fixed_interval": "1h", "delay": "7d" }, "terms": { "fields": [ "node" ] } }, metrics=[ { "field": "temperature", "metrics": [ "min", "max", "sum" ] }, { "field": "voltage", "metrics": [ "avg" ] } ], ) print(resp)
const response = await client.rollup.putJob({ id: "sensor", index_pattern: "sensor-*", rollup_index: "sensor_rollup", cron: "*/30 * * * * ?", page_size: 1000, groups: { date_histogram: { field: "timestamp", fixed_interval: "1h", delay: "7d", }, terms: { fields: ["node"], }, }, metrics: [ { field: "temperature", metrics: ["min", "max", "sum"], }, { field: "voltage", metrics: ["avg"], }, ], }); console.log(response);
PUT _rollup/job/sensor { "index_pattern": "sensor-*", "rollup_index": "sensor_rollup", "cron": "*/30 * * * * ?", "page_size": 1000, "groups": { "date_histogram": { "field": "timestamp", "fixed_interval": "1h", "delay": "7d" }, "terms": { "fields": [ "node" ] } }, "metrics": [ { "field": "temperature", "metrics": [ "min", "max", "sum" ] }, { "field": "voltage", "metrics": [ "avg" ] } ] }
此配置使日期直方图可以在 |
|
此配置定义了两个字段上的指标: |
创建作业后,您将收到以下结果
{ "acknowledged": true }