Rollupからダウンサンプリングへの移行

Rollupとダウンサンプリングは、履歴メトリクスを集約するための2つの異なる機能です。高レベルでは、Rollupはダウンサンプリングに比べて柔軟性がありますが、ダウンサンプリングはメトリクスをダウンサンプリングするためのより堅牢で簡単な機能です。

ダウンサンプリングの以下の側面は、より簡単または堅牢です:

  • ジョブをスケジュールする必要がありません。ダウンサンプリングは、インデックスライフサイクル管理(ILM)およびデータストリームライフサイクル(DSL)と統合されています。
  • 別の検索APIは必要ありません。ダウンサンプリングされたインデックスは、検索APIおよびes|qlを介してアクセスできます。
  • 別のRollup設定は必要ありません。ダウンサンプリングは、マッピングからの時系列次元とメトリクス設定を使用します。

すべてのRollupの使用をダウンサンプリングに移行することはできません。主な要件は、データがElasticsearchに時系列データストリーム(TSDS)として保存されている必要があることです。基本的に時間とすべての次元でデータを集約するRollupの使用は、ダウンサンプリングに移行できます。

ダウンサンプリングに移行できるRollupの使用例:

Python

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

Js

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

コンソール

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

ダウンサンプリングを使用する時系列データストリーム(TSDS)の同等の設定:

Python

  1. resp = client.indices.put_index_template(
  2. name="sensor-template",
  3. index_patterns=[
  4. "sensor-*"
  5. ],
  6. data_stream={},
  7. template={
  8. "lifecycle": {
  9. "downsampling": [
  10. {
  11. "after": "1d",
  12. "fixed_interval": "1h"
  13. }
  14. ]
  15. },
  16. "settings": {
  17. "index.mode": "time_series"
  18. },
  19. "mappings": {
  20. "properties": {
  21. "node": {
  22. "type": "keyword",
  23. "time_series_dimension": True
  24. },
  25. "temperature": {
  26. "type": "half_float",
  27. "time_series_metric": "gauge"
  28. },
  29. "voltage": {
  30. "type": "half_float",
  31. "time_series_metric": "gauge"
  32. },
  33. "@timestamp": {
  34. "type": "date"
  35. }
  36. }
  37. }
  38. },
  39. )
  40. print(resp)

Ruby

  1. response = client.indices.put_index_template(
  2. name: 'sensor-template',
  3. body: {
  4. index_patterns: [
  5. 'sensor-*'
  6. ],
  7. data_stream: {},
  8. template: {
  9. lifecycle: {
  10. downsampling: [
  11. {
  12. after: '1d',
  13. fixed_interval: '1h'
  14. }
  15. ]
  16. },
  17. settings: {
  18. 'index.mode' => 'time_series'
  19. },
  20. mappings: {
  21. properties: {
  22. node: {
  23. type: 'keyword',
  24. time_series_dimension: true
  25. },
  26. temperature: {
  27. type: 'half_float',
  28. time_series_metric: 'gauge'
  29. },
  30. voltage: {
  31. type: 'half_float',
  32. time_series_metric: 'gauge'
  33. },
  34. "@timestamp": {
  35. type: 'date'
  36. }
  37. }
  38. }
  39. }
  40. }
  41. )
  42. puts response

Js

  1. const response = await client.indices.putIndexTemplate({
  2. name: "sensor-template",
  3. index_patterns: ["sensor-*"],
  4. data_stream: {},
  5. template: {
  6. lifecycle: {
  7. downsampling: [
  8. {
  9. after: "1d",
  10. fixed_interval: "1h",
  11. },
  12. ],
  13. },
  14. settings: {
  15. "index.mode": "time_series",
  16. },
  17. mappings: {
  18. properties: {
  19. node: {
  20. type: "keyword",
  21. time_series_dimension: true,
  22. },
  23. temperature: {
  24. type: "half_float",
  25. time_series_metric: "gauge",
  26. },
  27. voltage: {
  28. type: "half_float",
  29. time_series_metric: "gauge",
  30. },
  31. "@timestamp": {
  32. type: "date",
  33. },
  34. },
  35. },
  36. },
  37. });
  38. console.log(response);

コンソール

  1. PUT _index_template/sensor-template
  2. {
  3. "index_patterns": ["sensor-*"],
  4. "data_stream": { },
  5. "template": {
  6. "lifecycle": {
  7. "downsampling": [
  8. {
  9. "after": "1d",
  10. "fixed_interval": "1h"
  11. }
  12. ]
  13. },
  14. "settings": {
  15. "index.mode": "time_series"
  16. },
  17. "mappings": {
  18. "properties": {
  19. "node": {
  20. "type": "keyword",
  21. "time_series_dimension": true
  22. },
  23. "temperature": {
  24. "type": "half_float",
  25. "time_series_metric": "gauge"
  26. },
  27. "voltage": {
  28. "type": "half_float",
  29. "time_series_metric": "gauge"
  30. },
  31. "@timestamp": {
  32. "type": "date"
  33. }
  34. }
  35. }
  36. }
  37. }

ダウンサンプリングの設定は、時系列データストリーム(TSDS)の上記のテンプレートに含まれています。ダウンサンプリングを有効にするために必要なのは、downsampling部分だけで、どの固定間隔にダウンサンプリングするかを示します。

Rollupジョブでは、cronフィールドがRollupドキュメントのタイミングを決定します。インデックステンプレートでは、

afterフィールドがダウンサンプリングがドキュメントをRollupするタイミングを決定します(ロールオーバーが実行された後の時間であることに注意してください)。
Rollupジョブでは、groupsフィールドがグループドキュメントのすべての次元が集約される場所を決定します。インデックステンプレートでは、

time_series_dimensionが設定されたフィールドtrue@timestampフィールドがグループを決定します。
Rollupジョブでは、fixed_intervalフィールドがタイムスタンプがグループ化の一部としてどのように集約されるかを決定します。

インデックステンプレートでは、fixed_intervalフィールドが同じ目的を持っています。ダウンサンプリングはカレンダー間隔をサポートしていないことに注意してください。
Rollupジョブでは、metricsフィールドがメトリクスとこれらのメトリクスをどのように保存するかを定義します。インデックステンプレートでは、

time_series_metricを持つすべてのフィールドがメトリクスフィールドです。フィールドがgaugetime_series_metric属性値として持つ場合、

このフィールドの最小、最大、合計、および値のカウントがダウンサンプリングされたインデックスに保存されます。フィールドが

countertime_series_metric属性値として持つ場合、ダウンサンプリングされたインデックスにこのフィールドの最後の値のみが保存されます。