ロールアップジョブの機能 API

8.11.0で非推奨。

ロールアップは将来のバージョンで削除されます。代わりに ダウンサンプリング を使用してください。

特定のインデックスまたはインデックスパターンに対して構成されたロールアップジョブの機能を返します。

リクエスト

GET _rollup/data/<index>

前提条件

  • Elasticsearchのセキュリティ機能が有効になっている場合、このAPIを使用するにはmonitormonitor_rollupmanage、またはmanage_rollupのクラスター権限が必要です。詳細については、セキュリティ権限を参照してください。

説明

このAPIは、ロールアップジョブが通常、ソースインデックスからのフィールドのサブセットのみをロールアップするように構成されるため、便利です。さらに、さまざまなフィールドに対して構成できる集約は限られており、その構成に応じて機能のサブセットが制限されます。

このAPIを使用すると、インデックスを検査し、次のことを判断できます:

  • 1. このインデックスには、クラスター内のどこかに関連するロールアップデータがありますか?
  • 2. 最初の質問に「はい」と答えた場合、どのフィールドがロールアップされ、どの集約が実行でき、データはどこに存在しますか?

パスパラメータ

  • <index>
  • (文字列) ロールアップ機能を返すインデックス、インデックスまたはインデックスパターン。_allを使用して、すべてのジョブからロールアップ機能を取得できます。

  1. #### Python
  2. ``````python
  3. resp = client.rollup.put_job(
  4. id="sensor",
  5. index_pattern="sensor-*",
  6. rollup_index="sensor_rollup",
  7. cron="*/30 * * * * ?",
  8. page_size=1000,
  9. groups={
  10. "date_histogram": {
  11. "field": "timestamp",
  12. "fixed_interval": "1h",
  13. "delay": "7d"
  14. },
  15. "terms": {
  16. "fields": [
  17. "node"
  18. ]
  19. }
  20. },
  21. metrics=[
  22. {
  23. "field": "temperature",
  24. "metrics": [
  25. "min",
  26. "max",
  27. "sum"
  28. ]
  29. },
  30. {
  31. "field": "voltage",
  32. "metrics": [
  33. "avg"
  34. ]
  35. }
  36. ],
  37. )
  38. print(resp)
  39. `

Js

  1. const response = await client.rollup.putJob({
  2. id: "sensor",
  3. index_pattern: "sensor-*",
  4. rollup_index: "sensor_rollup",
  5. cron: "*/30 * * * * ?",
  6. page_size: 1000,
  7. groups: {
  8. date_histogram: {
  9. field: "timestamp",
  10. fixed_interval: "1h",
  11. delay: "7d",
  12. },
  13. terms: {
  14. fields: ["node"],
  15. },
  16. },
  17. metrics: [
  18. {
  19. field: "temperature",
  20. metrics: ["min", "max", "sum"],
  21. },
  22. {
  23. field: "voltage",
  24. metrics: ["avg"],
  25. },
  26. ],
  27. });
  28. console.log(response);

コンソール

  1. PUT _rollup/job/sensor
  2. {
  3. "index_pattern": "sensor-*",
  4. "rollup_index": "sensor_rollup",
  5. "cron": "*/30 * * * * ?",
  6. "page_size": 1000,
  7. "groups": {
  8. "date_histogram": {
  9. "field": "timestamp",
  10. "fixed_interval": "1h",
  11. "delay": "7d"
  12. },
  13. "terms": {
  14. "fields": [ "node" ]
  15. }
  16. },
  17. "metrics": [
  18. {
  19. "field": "temperature",
  20. "metrics": [ "min", "max", "sum" ]
  21. },
  22. {
  23. "field": "voltage",
  24. "metrics": [ "avg" ]
  25. }
  26. ]
  27. }

次のコマンドを使用して、そのインデックスパターン(sensor-*)のロールアップ機能を取得できます:

Python

  1. resp = client.rollup.get_rollup_caps(
  2. id="sensor-*",
  3. )
  4. print(resp)

Ruby

  1. response = client.rollup.get_rollup_caps(
  2. id: 'sensor-*'
  3. )
  4. puts response

Js

  1. const response = await client.rollup.getRollupCaps({
  2. id: "sensor-*",
  3. });
  4. console.log(response);

コンソール

  1. GET _rollup/data/sensor-*

次の応答が得られます:

コンソール-結果

  1. {
  2. "sensor-*" : {
  3. "rollup_jobs" : [
  4. {
  5. "job_id" : "sensor",
  6. "rollup_index" : "sensor_rollup",
  7. "index_pattern" : "sensor-*",
  8. "fields" : {
  9. "node" : [
  10. {
  11. "agg" : "terms"
  12. }
  13. ],
  14. "temperature" : [
  15. {
  16. "agg" : "min"
  17. },
  18. {
  19. "agg" : "max"
  20. },
  21. {
  22. "agg" : "sum"
  23. }
  24. ],
  25. "timestamp" : [
  26. {
  27. "agg" : "date_histogram",
  28. "time_zone" : "UTC",
  29. "fixed_interval" : "1h",
  30. "delay": "7d"
  31. }
  32. ],
  33. "voltage" : [
  34. {
  35. "agg" : "avg"
  36. }
  37. ]
  38. }
  39. }
  40. ]
  41. }
  42. }

返される応答には、元のロールアップ構成に似た情報が含まれていますが、形式が異なります。まず、いくつかの管理詳細があります:ロールアップジョブID、ロールアップデータを保持するインデックス、およびジョブがターゲットにしていたインデックスパターンです。

次に、ロールアップ検索に適格なデータを含むフィールドのリストが表示されます。ここでは、nodetemperaturetimestampvoltageの4つのフィールドが表示されます。これらのフィールドには、可能な集約がリストされています。たとえば、temperatureフィールドに対しては最小、最大、または合計の集約を使用できますが、timestampに対してはdate_histogramのみです。

  1. 同じ情報を`````_all`````へのリクエストで取得することもできます:
  2. #### Python
  3. ``````python
  4. resp = client.rollup.get_rollup_caps(
  5. id="_all",
  6. )
  7. print(resp)
  8. `

Ruby

  1. response = client.rollup.get_rollup_caps(
  2. id: '_all'
  3. )
  4. puts response

Js

  1. const response = await client.rollup.getRollupCaps({
  2. id: "_all",
  3. });
  4. console.log(response);

コンソール

  1. GET _rollup/data/_all

ただし、具体的なインデックス名(sensor-1)を使用すると、ロールアップ機能は取得できません:

Python

  1. resp = client.rollup.get_rollup_caps(
  2. id="sensor-1",
  3. )
  4. print(resp)

Ruby

  1. response = client.rollup.get_rollup_caps(
  2. id: 'sensor-1'
  3. )
  4. puts response

Js

  1. const response = await client.rollup.getRollupCaps({
  2. id: "sensor-1",
  3. });
  4. console.log(response);

コンソール

  1. GET _rollup/data/sensor-1

コンソール-結果

  1. {
  2. }

なぜこれが起こるのでしょうか?元のロールアップジョブは、具体的なインデックス(sensor-1)ではなく、特定のインデックスパターン(sensor-*)に対して構成されていました。したがって、インデックスはパターンに属しますが、ロールアップジョブはそのパターン全体に対してのみ有効であり、その中の1つのインデックスに対してのみ有効ではありません。そのため、ロールアップ機能を取得するAPIは、元々構成されたインデックス名またはパターンに基づいて情報を返します。