すべてのプロダクト
Search
ドキュメントセンター

Elasticsearch:ロールアップメカニズムを使用してトラフィックデータを要約する

最終更新日:Jan 11, 2025

時系列データの場合、データ量は時間の経過とともに増加します。 大量のデータを保存する場合、ストレージコストは直線的に増加します。 このシナリオでは、Elasticsearch のロールアップメカニズムを使用して、わずかなコストでデータを保存できます。 次の手順では、ロールアップメカニズムを使用して Logstash トラフィックデータを要約する方法を示します。

前提条件

  • manage または manage_rollup 権限を持っている。

    ロールアップメカニズムを使用するには、manage または manage_rollup 権限が必要です。 詳細については、「セキュリティ権限」をご参照ください。

  • Alibaba Cloud Elasticsearch インスタンスを作成している。

    詳細については、「Alibaba Cloud Elasticsearch クラスタを作成する」をご参照ください。 このトピックでは、Standard Edition の Alibaba Cloud Elasticsearch V7.4 インスタンスを例として使用します。

    説明

    このトピックにリストされているロールアップコマンドは Elasticsearch V7.4 のものです。 Elasticsearch V6.x のコマンドの詳細については、「ロールアップジョブの説明」をご参照ください。

背景情報

要件:

  • Elasticsearch は、networkoutTraffic フィールドと networkinTraffic フィールドの 15 分間隔の 1 時間ごとのサマリーを提供します。 networkoutTraffic フィールドと networkinTraffic フィールドは、特定のインスタンス ID に対応します。

  • Elasticsearch は、Kibana コンソールに表示されるチャートを使用して、networkoutTraffic フィールドと networkinTraffic フィールドのデータを視覚化します。

このトピックでは、monitordata-logstash-sls-* で始まるインデックスを例として使用します。 * は YYYY-MM-DD 形式の日付を示します。 このタイプのインデックスは毎日生成されます。 インデックスのマッピング形式:

"monitordata-logstash-sls-2020-04-05" : {
    "mappings" : {
      "properties" : {
        "@timestamp" : {
          "type" : "date"
        },
        "__source__" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "disk_type" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "host" : {
          "type" : "keyword"
        },
        "instanceId" : {
          "type" : "keyword"
        },
        "metricName" : {
          "type" : "keyword"
        },
        "monitor_type" : {
          "type" : "keyword"
        },
        "networkinTraffic" : {
          "type" : "double"
        },
        "networkoutTraffic" : {
          "type" : "double"
        },
        "node_spec" : {
          "type" : "keyword"
        },
        "node_stats_node_master" : {
          "type" : "keyword"
        },
        "resource_uid" : {
          "type" : "keyword"
        }
      }
    }
  }
}
説明

このトピックで提供されているコマンドは、Kibana コンソールで実行できます。 詳細については、「Kibana コンソールにログオンする」をご参照ください。

手順

  1. 手順 1: ロールアップジョブを作成する

  2. 手順 2: ロールアップジョブを開始し、ジョブ情報を表示する

  3. 手順 3: ロールアップインデックスのデータをクエリする

  4. 手順 4: ロールアップインデックスパターンを作成する

  5. 手順 5: Kibana コンソールでトラフィック監視用のチャートを作成する

  6. 手順 6: Kibana コンソールでトラフィック監視ダッシュボードを作成する

手順 1: ロールアップジョブを作成する

この手順では、ジョブの実行方法、ドキュメントのインデックス作成時期、およびロールアップインデックスで実行されるクエリについて説明します。 次の例では、PUT _rollup/job コマンドを使用して、1 時間以内にロールアップジョブを定義します。

PUT _rollup/job/ls-monitordata-sls-1h-job1
{
    "index_pattern": "monitordata-logstash-sls-*",
    "rollup_index": "monitordata-logstash-rollup-1h-1",
    "cron": "0 */15 * * * ?",
    "page_size" :1000,
    "groups" : {
      "date_histogram": {
        "field": "@timestamp",
        "fixed_interval": "1h"
      },
      "terms": {
        "fields": ["instanceId"]
      }
    },
    "metrics": [
        {
            "field": "networkoutTraffic",
            "metrics": ["sum"]
        },
        {
            "field": "networkinTraffic",
            "metrics": ["sum"]
        }
    ]
}

パラメータ

必須

タイプ

説明

index_pattern

はい

string

ロールアップジョブのインデックスまたはインデックスパターン。 ワイルドカード (*) がサポートされています。

rollup_index

はい

string

ロールアップサマリーのインデックス。 ワイルドカードはサポートされておらず、完全な名前が必要です。

cron

はい

string

ロールアップジョブの間隔。 データがロールアップされる間隔とは無関係です。

page_size

はい

integer

ロールアップインデックスの各反復で処理されるバケット結果の数。 値が大きいほど、処理が速くなり、処理中のメモリ使用量が多くなります。

groups

はい

object

ジョブのグループ化フィールドと集計方法を定義できます。

date_histogram

はい

object

日付フィールドを時間ベースのバケットにロールアップできます。

field

はい

string

ロールアップする日付フィールド。

fixed_interval

はい

時間単位

データがロールアップされる間隔。 たとえば、このパラメータが 1h に設定されている場合、field パラメータで指定された日付フィールドは 1 時間ごとにロールアップされます。 このパラメータは、データがロールアップされる最小間隔を指定します。

terms

いいえ

object

なし。

fields

はい

string

terms フィールドセット。 この配列のフィールドはキーワード型または数値型にすることができ、順序は必要ありません。

metrics

いいえ

object

なし。

field

はい

string

収集するメトリックのフィールド。 前述のコードでは、このパラメータは networkoutTraffic と networkinTraffic に設定されています。

metrics

はい

array

集計に使用する演算子。 このパラメータが sum に設定されている場合、networkinTraffic フィールドの合計が計算されます。 このパラメータは、min、max、sum、average、または値カウントに設定できます。

説明

└ は子パラメータを示します。

これらのパラメータの詳細については、「ロールアップジョブ API を作成する」をご参照ください。 パラメータを設定する際は、次の点に注意してください。

  • index_pattern がワイルドカードパターンに設定されている場合、index_pattern の値が rollup_index の値と異なることを確認してください。 そうしないと、エラーが返されます。

  • rollup_index のマッピングはオブジェクト型です。 index_pattern が rollup_index と同じ値に設定されていないことを確認してください。 そうしないと、エラーが返されます。

  • ロールアップジョブは、日付ヒストグラム集計、ヒストグラム集計、および terms 集計のみをサポートします。 詳細については、「ロールアップ集計の制限」をご参照ください。

手順 2: ロールアップジョブを開始し、ジョブ情報を表示する

  1. ロールアップジョブを開始します。

    POST _rollup/job/ls-monitordata-sls-1h-job1/_start
  2. ロールアップジョブの構成、統計、およびステータスを表示します。

    GET _rollup/job/ls-monitordata-sls-1h-job1/

    詳細については、「ロールアップジョブ API を取得する」をご参照ください。

    コマンドが正常に実行されると、次の結果が返されます。

    {
         ........
          "status" : {
            "job_state" : "indexing",
            "current_position" : {
              "@timestamp.date_histogram" : 1586775600000,
              "instanceId.terms" : "ls-cn-ddddez****"
            },
            "upgraded_doc_id" : true
          },
          "stats" : {
            "pages_processed" : 3,
            "documents_processed" : 11472500,
            "rollups_indexed" : 3000,
            "trigger_count" : 1,
            "index_time_in_ms" : 766,
            "index_total" : 3,
            "index_failures" : 0,
            "search_time_in_ms" : 68559,
            "search_total" : 3,
            "search_failures" : 0
          }
    }

手順 3: ロールアップインデックスのデータをクエリする

ロールアップジョブが実行されると、ロールアップドキュメントの構造は生データの構造とは異なります。 ロールアップクエリポートは、Query DSL をロールアップドキュメントに一致するパターンに再構築し、レスポンスを取得し、Query DSL を元のクエリに使用されたクライアントが予期するパターンに復元します。

  1. match_all を使用して、ロールアップインデックスのすべてのデータを取得します。

    GET monitordata-logstash-rollup-1h-1/_search
    {
      "query": {
        "match_all": {}
      }
    }
    • クエリには 1 つのロールアップインデックスのみを指定できます。 あいまい一致はサポートされていません。 リアルタイムデータクエリには複数のインデックスを指定できます。

    • term クエリ、terms クエリ、範囲クエリ、match all クエリ、および任意の複合クエリがサポートされています。 複合クエリはクエリの組み合わせであり、ブールクエリ、ブースティングクエリ、および定数スコアが含まれます。 詳細な制限については、「ロールアップ検索の制限」をご参照ください。

  2. _rollup_search を使用して、networkoutTraffic の合計を取得します。

    GET /monitordata-logstash-rollup-1h-1/_rollup_search
    {
        "size": 0,
        "aggregations": {
            "sum_temperature": {
                "sum": {
                    "field": "networkoutTraffic"
                }
            }
        }
    }

    _rollup_search は、一般的な検索操作機能のサブセットをサポートしています。

    _rollup_search は、次の機能をサポートしていません。

    • size: このパラメータを 0 に設定するか、このパラメータを指定しないでください。 これは、ロールアップがデータ集計のみに使用され、クエリ結果を返すことができないためです。

    • highlighter、suggestors、post_filter、profile、explain などのパラメータはサポートされていません。

手順 4: ロールアップインデックスパターンを作成する

  1. Kibana コンソールにログオンします。

    詳細については、「Kibana コンソールにログオンする」をご参照ください。

  2. 左側のナビゲーションペインで、[管理] アイコンをクリックします。

    Management icon

  3. [kibana] 領域で、[インデックスパターン] をクリックします。

  4. オプション:[インデックスパターンについて] ページを閉じます。

    説明

    インデックスパターンを初めて作成するのではない場合は、この手順をスキップします。

  5. [インデックスパターンの作成] > [ロールアップインデックスパターン] を選択します。

    Rollup index pattern

  6. [インデックスパターン] フィールドに、monitordata-logstash-rollup-1h-1 などのインデックスパターン名を入力し、[次の手順] をクリックします。

    Index pattern field

  7. [時間フィルターフィールド名] ドロップダウンリストから、[@timestamp] を選択します。

    Time Filter field name drop-down list

  8. [インデックスパターンの作成] をクリックします。

手順 5: Kibana コンソールでトラフィック監視用のチャートを作成する

次の手順では、Kibana コンソールでロールアップインデックスの networkinTraffic チャートと networkoutTraffic チャートを作成する方法を示します。

  1. Kibana コンソールにログオンします。

    詳細については、「Kibana コンソールにログオンする」をご参照ください。

  2. 折れ線グラフを作成します。

    1. 左側のナビゲーションペインで、[視覚化] アイコンをクリックします。

      Visualize icon

    2. [新しい視覚化を作成] をクリックします。

    3. 表示される [新しい視覚化] ダイアログボックスで、[折れ線] をクリックします。

    4. インデックスパターンリストで、作成したロールアップインデックスパターンをクリックします。

  3. [メトリック][バケット] でパラメータを指定します。

    1. [メトリック] セクションで、Y-axis drop-down arrow をクリックします。

    2. [Y 軸] パラメータを指定します。

      パラメータ

      説明

      [集計]

      パラメータ値を [合計] に設定します。

      [フィールド]

      パラメータ値を networkinTraffic または networkoutTraffic に設定します。

      [カスタムラベル]

      カスタム Y 軸ラベルを入力します。

    3. [バケット] セクションで、[追加] > [X 軸] を選択します。

    4. [X 軸] パラメータを指定します。

      パラメータ

      説明

      [集計]

      group に対して定義された date_histogram にパラメーター値を設定します (手順 1: ロールアップジョブの作成 を参照してください)。

      [フィールド]

      パラメータ値を [@timestamp] に設定します。

      [最小間隔]

      デフォルト値は、ロールアップジョブで定義されている集計時間粒度です。 値は、2h や 3h など、ロールアップ間隔の整数倍である必要があります。

    5. Apply Changes icon アイコンをクリックします。

  4. 上部のナビゲーションバーで、[保存] をクリックします。

  5. 同様にゲージチャートを作成します。

手順 6: Kibana コンソールでトラフィック監視ダッシュボードを作成する

  1. Kibana コンソールで、左側のナビゲーションペインの [ダッシュボード] アイコンをクリックします。

    Dashboard icon

  2. [新しいダッシュボードの作成] をクリックします。

  3. 上部のナビゲーションバーで、[追加] をクリックします。

  4. [パネルの追加] ページで、手順 5 で構成したチャートをクリックします。

  5. [パネルの追加] ページを閉じます。 上部のナビゲーションバーで、[保存] をクリックします。

  6. ダッシュボード名を変更し、[保存の確認] をクリックします。

    ダッシュボードの構成が保存されると、ダッシュボードを表示できます。

  7. [+ フィルターを追加] をクリックし、フィルター項目を選択し、フィルター条件を構成し、[保存] をクリックします。