ロールアップジョブAPI

8.11.0で非推奨。

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

ロールアップジョブの設定、統計、およびステータスを取得します。

リクエスト

GET _rollup/job/<job_id>

前提条件

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

説明

このAPIは、単一のロールアップジョブまたはすべてのロールアップジョブの詳細を返すことができます。

このAPIは、アクティブな(STARTEDおよびSTOPPEDの両方)ジョブのみを返します。ジョブが作成され、しばらく実行された後に削除された場合、このAPIはそのジョブに関する詳細を返しません。

過去のロールアップジョブの詳細については、ロールアップ機能APIがより便利かもしれません。

パスパラメータ

  • <job_id>
  • (オプション、文字列)ロールアップジョブの識別子。_allの場合、または省略された場合、APIはすべてのロールアップジョブを返します。

レスポンスボディ

  • jobs
  • (配列)ロールアップジョブリソースの配列。
    ロールアップジョブリソースのプロパティ
    • config
    • (オブジェクト)ロールアップジョブの設定を含みます。この情報は、ジョブ作成APIを介してジョブを作成する際に提供された設定と同じです。
    • stats
    • (オブジェクト)ロールアップジョブに関する一時的な統計を含みます。たとえば、処理されたドキュメントの数やインデックスされたロールアップサマリードキュメントの数などです。これらの統計は永続化されません。ノードが再起動されると、これらの統計はリセットされます。
    • status
    • (オブジェクト)ロールアップジョブのインデクサーの現在のステータスを含みます。可能な値とその意味は次のとおりです:
      • stoppedは、インデクサーが一時停止しており、cron間隔がトリガーされてもデータを処理しないことを意味します。
      • startedは、インデクサーが実行中ですが、データを積極的にインデックスしていないことを意味します。cron間隔がトリガーされると、ジョブのインデクサーはデータの処理を開始します。
      • indexingは、インデクサーがデータを積極的に処理し、新しいロールアップドキュメントを作成していることを意味します。この状態では、以降のcron間隔のトリガーは無視されます。なぜなら、ジョブはすでに前のトリガーでアクティブだからです。
      • abortは一時的な状態であり、通常はユーザーによって目撃されません。タスクを何らかの理由でシャットダウンする必要がある場合(ジョブが削除された、回復不可能なエラーが発生したなど)に使用されます。abort状態が設定された後、ジョブはクラスタから自らを削除します。

すでにsensorという名前のロールアップジョブを作成している場合、ジョブに関する詳細を次のように取得できます:

Python

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

Ruby

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

Js

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

コンソール

  1. GET _rollup/job/sensor

APIは次のレスポンスを返します:

コンソール-結果

  1. {
  2. "jobs": [
  3. {
  4. "config": {
  5. "id": "sensor",
  6. "index_pattern": "sensor-*",
  7. "rollup_index": "sensor_rollup",
  8. "cron": "*/30 * * * * ?",
  9. "groups": {
  10. "date_histogram": {
  11. "fixed_interval": "1h",
  12. "delay": "7d",
  13. "field": "timestamp",
  14. "time_zone": "UTC"
  15. },
  16. "terms": {
  17. "fields": [
  18. "node"
  19. ]
  20. }
  21. },
  22. "metrics": [
  23. {
  24. "field": "temperature",
  25. "metrics": [
  26. "min",
  27. "max",
  28. "sum"
  29. ]
  30. },
  31. {
  32. "field": "voltage",
  33. "metrics": [
  34. "avg"
  35. ]
  36. }
  37. ],
  38. "timeout": "20s",
  39. "page_size": 1000
  40. },
  41. "status": {
  42. "job_state": "stopped"
  43. },
  44. "stats": {
  45. "pages_processed": 0,
  46. "documents_processed": 0,
  47. "rollups_indexed": 0,
  48. "trigger_count": 0,
  49. "index_failures": 0,
  50. "index_time_in_ms": 0,
  51. "index_total": 0,
  52. "search_failures": 0,
  53. "search_time_in_ms": 0,
  54. "search_total": 0,
  55. "processing_time_in_ms": 0,
  56. "processing_total": 0
  57. }
  58. }
  59. ]
  60. }

jobs配列には、エンドポイントのURLで単一のジョブを要求したため、単一のジョブ(id: sensor)が含まれています。別のジョブを追加すると、複数のジョブレスポンスがどのように処理されるかを見ることができます:

Python

  1. resp = client.rollup.put_job(
  2. id="sensor2",
  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": [
  15. "node"
  16. ]
  17. }
  18. },
  19. metrics=[
  20. {
  21. "field": "temperature",
  22. "metrics": [
  23. "min",
  24. "max",
  25. "sum"
  26. ]
  27. },
  28. {
  29. "field": "voltage",
  30. "metrics": [
  31. "avg"
  32. ]
  33. }
  34. ],
  35. )
  36. print(resp)
  37. resp1 = client.rollup.get_jobs(
  38. id="_all",
  39. )
  40. print(resp1)

Js

  1. const response = await client.rollup.putJob({
  2. id: "sensor2",
  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);
  29. const response1 = await client.rollup.getJobs({
  30. id: "_all",
  31. });
  32. console.log(response1);

コンソール

  1. PUT _rollup/job/sensor2
  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. }
  28. GET _rollup/job/_all
名前sensor2の2番目のジョブを作成します
次に、GetJobs APIで_allを使用してすべてのジョブを要求します

次のレスポンスが得られます:

Js

  1. {
  2. "jobs": [
  3. {
  4. "config": {
  5. "id": "sensor2",
  6. "index_pattern": "sensor-*",
  7. "rollup_index": "sensor_rollup",
  8. "cron": "*/30 * * * * ?",
  9. "groups": {
  10. "date_histogram": {
  11. "fixed_interval": "1h",
  12. "delay": "7d",
  13. "field": "timestamp",
  14. "time_zone": "UTC"
  15. },
  16. "terms": {
  17. "fields": [
  18. "node"
  19. ]
  20. }
  21. },
  22. "metrics": [
  23. {
  24. "field": "temperature",
  25. "metrics": [
  26. "min",
  27. "max",
  28. "sum"
  29. ]
  30. },
  31. {
  32. "field": "voltage",
  33. "metrics": [
  34. "avg"
  35. ]
  36. }
  37. ],
  38. "timeout": "20s",
  39. "page_size": 1000
  40. },
  41. "status": {
  42. "job_state": "stopped"
  43. },
  44. "stats": {
  45. "pages_processed": 0,
  46. "documents_processed": 0,
  47. "rollups_indexed": 0,
  48. "trigger_count": 0,
  49. "index_failures": 0,
  50. "index_time_in_ms": 0,
  51. "index_total": 0,
  52. "search_failures": 0,
  53. "search_time_in_ms": 0,
  54. "search_total": 0,
  55. "processing_time_in_ms": 0,
  56. "processing_total": 0
  57. }
  58. },
  59. {
  60. "config": {
  61. "id": "sensor",
  62. "index_pattern": "sensor-*",
  63. "rollup_index": "sensor_rollup",
  64. "cron": "*/30 * * * * ?",
  65. "groups": {
  66. "date_histogram": {
  67. "fixed_interval": "1h",
  68. "delay": "7d",
  69. "field": "timestamp",
  70. "time_zone": "UTC"
  71. },
  72. "terms": {
  73. "fields": [
  74. "node"
  75. ]
  76. }
  77. },
  78. "metrics": [
  79. {
  80. "field": "temperature",
  81. "metrics": [
  82. "min",
  83. "max",
  84. "sum"
  85. ]
  86. },
  87. {
  88. "field": "voltage",
  89. "metrics": [
  90. "avg"
  91. ]
  92. }
  93. ],
  94. "timeout": "20s",
  95. "page_size": 1000
  96. },
  97. "status": {
  98. "job_state": "stopped"
  99. },
  100. "stats": {
  101. "pages_processed": 0,
  102. "documents_processed": 0,
  103. "rollups_indexed": 0,
  104. "trigger_count": 0,
  105. "index_failures": 0,
  106. "index_time_in_ms": 0,
  107. "index_total": 0,
  108. "search_failures": 0,
  109. "search_time_in_ms": 0,
  110. "search_total": 0,
  111. "processing_time_in_ms": 0,
  112. "processing_total": 0
  113. }
  114. }
  115. ]
  116. }