获取汇总作业功能 API

编辑

在 8.11.0 中已弃用。

汇总将在未来版本中删除。请改用降采样

返回已为特定索引或索引模式配置的任何汇总作业的功能。

请求

编辑

GET _rollup/data/<index>

先决条件

编辑
  • 如果启用了 Elasticsearch 安全功能,您必须拥有 monitormonitor_rollupmanagemanage_rollup 集群权限才能使用此 API。有关更多信息,请参阅安全权限

描述

编辑

此 API 非常有用,因为通常配置汇总作业仅汇总源索引中的一部分字段。此外,只能为各种字段配置某些聚合,从而导致功能受限,具体取决于该配置。

此 API 使您可以检查索引并确定

  1. 此索引是否在集群中的某个位置具有关联的汇总数据?
  2. 如果第一个问题的答案是肯定的,那么汇总了哪些字段、可以执行哪些聚合以及数据存储在哪里?

路径参数

编辑
<index>
(字符串) 返回汇总功能的索引、多个索引或索引模式。可以使用 _all 从所有作业中获取汇总功能。

示例

编辑

假设我们有一个名为 sensor-1 的索引,其中包含原始数据。我们知道数据会随着时间的推移而增长,因此会有 sensor-2sensor-3 等。让我们创建一个针对索引模式 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" ]
    }
  ]
}

然后,我们可以通过以下命令检索该索引模式 (sensor-*) 的汇总功能

resp = client.rollup.get_rollup_caps(
    id="sensor-*",
)
print(resp)
response = client.rollup.get_rollup_caps(
  id: 'sensor-*'
)
puts response
const response = await client.rollup.getRollupCaps({
  id: "sensor-*",
});
console.log(response);
GET _rollup/data/sensor-*

这将产生以下响应

{
  "sensor-*" : {
    "rollup_jobs" : [
      {
        "job_id" : "sensor",
        "rollup_index" : "sensor_rollup",
        "index_pattern" : "sensor-*",
        "fields" : {
          "node" : [
            {
              "agg" : "terms"
            }
          ],
          "temperature" : [
            {
              "agg" : "min"
            },
            {
              "agg" : "max"
            },
            {
              "agg" : "sum"
            }
          ],
          "timestamp" : [
            {
              "agg" : "date_histogram",
              "time_zone" : "UTC",
              "fixed_interval" : "1h",
              "delay": "7d"
            }
          ],
          "voltage" : [
            {
              "agg" : "avg"
            }
          ]
        }
      }
    ]
  }
}

返回的响应包含与原始汇总配置类似的信息,但格式不同。首先,有一些内务处理详细信息:汇总作业 ID、保存汇总数据的索引以及作业所针对的索引模式。

接下来,它显示了一个字段列表,其中包含符合汇总搜索条件的数据。在这里,我们看到四个字段:nodetemperaturetimestampvoltage。这些字段中的每一个都列出了可能的聚合。例如,您可以在 temperature 字段上使用 min、max 或 sum 聚合,但只能在 timestamp 上使用 date_histogram

请注意,rollup_jobs 元素是一个数组;可以为单个索引或索引模式配置多个独立的作业。这些作业中的每一个可能具有不同的配置,因此 API 会返回所有可用配置的列表。

我们还可以通过向 _all 发出请求来检索相同的信息

resp = client.rollup.get_rollup_caps(
    id="_all",
)
print(resp)
response = client.rollup.get_rollup_caps(
  id: '_all'
)
puts response
const response = await client.rollup.getRollupCaps({
  id: "_all",
});
console.log(response);
GET _rollup/data/_all

但请注意,如果我们使用具体的索引名称 (sensor-1),我们将检索不到任何汇总功能

resp = client.rollup.get_rollup_caps(
    id="sensor-1",
)
print(resp)
response = client.rollup.get_rollup_caps(
  id: 'sensor-1'
)
puts response
const response = await client.rollup.getRollupCaps({
  id: "sensor-1",
});
console.log(response);
GET _rollup/data/sensor-1
{

}

这是为什么?原始汇总作业是针对特定的索引模式 (sensor-*) 配置的,而不是具体的索引 (sensor-1)。因此,虽然该索引属于该模式,但汇总作业仅在整个模式上有效,而不仅仅是其中一个包含的索引。因此,出于这个原因,获取汇总功能 API 仅根据最初配置的索引名称或模式返回信息。