ロールアップジョブの機能 API
8.11.0で非推奨。
ロールアップは将来のバージョンで削除されます。代わりに ダウンサンプリング を使用してください。
特定のインデックスまたはインデックスパターンに対して構成されたロールアップジョブの機能を返します。
リクエスト
GET _rollup/data/<index>
前提条件
- Elasticsearchのセキュリティ機能が有効になっている場合、このAPIを使用するには
monitor
、monitor_rollup
、manage
、またはmanage_rollup
のクラスター権限が必要です。詳細については、セキュリティ権限を参照してください。
説明
このAPIは、ロールアップジョブが通常、ソースインデックスからのフィールドのサブセットのみをロールアップするように構成されるため、便利です。さらに、さまざまなフィールドに対して構成できる集約は限られており、その構成に応じて機能のサブセットが制限されます。
このAPIを使用すると、インデックスを検査し、次のことを判断できます:
- 1. このインデックスには、クラスター内のどこかに関連するロールアップデータがありますか?
- 2. 最初の質問に「はい」と答えた場合、どのフィールドがロールアップされ、どの集約が実行でき、データはどこに存在しますか?
パスパラメータ
<index>
- (文字列) ロールアップ機能を返すインデックス、インデックスまたはインデックスパターン。
_all
を使用して、すべてのジョブからロールアップ機能を取得できます。
例
#### Python
``````python
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)
`
Js
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-*
)のロールアップ機能を取得できます:
Python
resp = client.rollup.get_rollup_caps(
id="sensor-*",
)
print(resp)
Ruby
response = client.rollup.get_rollup_caps(
id: 'sensor-*'
)
puts response
Js
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、ロールアップデータを保持するインデックス、およびジョブがターゲットにしていたインデックスパターンです。
次に、ロールアップ検索に適格なデータを含むフィールドのリストが表示されます。ここでは、node
、temperature
、timestamp
、voltage
の4つのフィールドが表示されます。これらのフィールドには、可能な集約がリストされています。たとえば、temperature
フィールドに対しては最小、最大、または合計の集約を使用できますが、timestamp
に対してはdate_histogram
のみです。
同じ情報を`````_all`````へのリクエストで取得することもできます:
#### Python
``````python
resp = client.rollup.get_rollup_caps(
id="_all",
)
print(resp)
`
Ruby
response = client.rollup.get_rollup_caps(
id: '_all'
)
puts response
Js
const response = await client.rollup.getRollupCaps({
id: "_all",
});
console.log(response);
コンソール
GET _rollup/data/_all
ただし、具体的なインデックス名(sensor-1
)を使用すると、ロールアップ機能は取得できません:
Python
resp = client.rollup.get_rollup_caps(
id="sensor-1",
)
print(resp)
Ruby
response = client.rollup.get_rollup_caps(
id: 'sensor-1'
)
puts response
Js
const response = await client.rollup.getRollupCaps({
id: "sensor-1",
});
console.log(response);
コンソール
GET _rollup/data/sensor-1
コンソール-結果
{
}
なぜこれが起こるのでしょうか?元のロールアップジョブは、具体的なインデックス(sensor-1
)ではなく、特定のインデックスパターン(sensor-*
)に対して構成されていました。したがって、インデックスはパターンに属しますが、ロールアップジョブはそのパターン全体に対してのみ有効であり、その中の1つのインデックスに対してのみ有効ではありません。そのため、ロールアップ機能を取得するAPIは、元々構成されたインデックス名またはパターンに基づいて情報を返します。