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

Elasticsearch:ロールアップ機構を用いたトラフィックデータの集約

最終更新日:Mar 26, 2026

時系列データが蓄積されるにつれて、ストレージコストはデータ量に比例して線形に増加します。Elasticsearch のロールアップ機構では、元のストレージコストの一部で履歴データをコンパクトな集約結果にまとめることができ、同時に Kibana を通じた集約クエリもサポートします。

本チュートリアルでは、Logstash トラフィック監視データを対象とした一連のロールアップワークフローを説明します。具体的には、ロールアップタスクの作成、ロールアップインデックスへのクエリ実行、およびインスタンス ID 単位・時間単位の粒度で networkoutTraffic および networkinTraffic メトリックを可視化する Kibana ダッシュボードの構築手順について解説します。

本チュートリアルで使用するコマンドは Elasticsearch V7.4 に対応しています。V6.x 向けのコマンドについては、「ロールアップの概要」をご参照ください。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

本チュートリアルで紹介するすべての API コマンドは、Kibana コンソールから実行してください。

背景情報

本チュートリアルで使用するソースインデックスの名前は、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"
        }
      }
    }
  }
}

ステップ 1:ロールアップタスクの作成

ロールアップタスクでは、集約対象のソースインデックス、グループ化対象のフィールド、計算対象のメトリック、および実行頻度を定義します。

以下のタスクでは、monitordata-logstash-sls-* からデータを読み込み、時間単位およびインスタンス ID 単位でデータをグループ化し、各トラフィックフィールドの合計値を計算します。また、15 分ごとに実行されます。

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はい文字列ソースインデックスまたはインデックスパターン。ワイルドカード (*) を使用できます。
rollup_indexはい文字列ロールアップ集約結果の送信先インデックス。完全な名前を指定する必要があります。ワイルドカードは使用できません。
cronはい文字列ロールアップタスクの実行頻度。これはタスクの実行間隔を制御するものであり、集約の粒度を制御するものではありません。
page_sizeはい整数1 回の反復処理で処理されるバケット結果の数。値を大きくすると処理速度が向上しますが、メモリ使用量も増加します。
groupsはいオブジェクトグループ化フィールドおよび集約方法を定義します。
groups.date_histogramはいオブジェクト日付フィールドを時間単位のバケットにグループ化します。
groups.date_histogram.fieldはい文字列集約対象の日付フィールド。
groups.date_histogram.fixed_intervalはい時間単位集約の粒度。1h は 1 時間単位のバケットにデータをグループ化します。これはロールアップインデックスでサポートされる最小クエリ間隔です。
groups.termsいいえオブジェクト指定されたタームフィールドでグループ化します。
groups.terms.fieldsはい文字列グループ化対象のフィールド。任意の順序で keyword 型または数値型フィールドを指定できます。
metricsいいえオブジェクト集約対象の数値フィールドを定義します。
metrics[].fieldはい文字列集約対象のフィールド。
metrics[].metricsはい配列適用する集約演算子:minmaxsumavg、または value_count

パラメーターの全リファレンスについては、「ロールアップタスクの作成 API」をご参照ください。

構成ルール:

  • index_patternrollup_index は異なる名前を指定する必要があります。index_pattern がワイルドカードで、そのパターンが rollup_index と一致する場合、API はエラーを返します。

  • rollup_index のマッピングにはオブジェクトタイプを使用します。index_pattern と同じ値を設定するとエラーになります。

  • ロールアップタスクでは、日付ヒストグラム集約、ヒストグラム集約、およびターム集約のみがサポートされています。詳細については、「ロールアップ集約の制限事項」をご参照ください。

ステップ 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:ロールアップインデックスへのクエリ実行

ロールアップドキュメントは、生データとは異なる内部構造を持ちます。ロールアップインデックスに対してクエリを実行すると、Elasticsearch はクエリ DSL をロールアップ形式に書き換え、その後クライアントが期待する形式で結果を復元します。

  1. ロールアップインデックス内のすべてのドキュメントを取得します。

    GET monitordata-logstash-rollup-1h-1/_search
    {
      "query": {
        "match_all": {}
      }
    }
  2. _rollup_search を使用して networkoutTraffic の合計値を計算します。

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

_rollup_search では、標準検索機能のサブセットがサポートされています。

機能サポート備考
queryサポート制限付きのクエリ DSL。サポートされるタイプ:term、terms、range、match_all、および複合クエリ(ブール値、ブースティング、定数スコア)。
集計サポート標準の集約パラメーター。
size0 のみ、または省略必須ロールアップは集約専用であり、生のドキュメントは返されません。
highlightersuggestorspost_filterprofileexplain非サポート

制限事項の全リストについては、「ロールアップ検索の制限事項」および「ロールアップ集約の制限事項」をご参照ください。

クエリ制限事項:

  • 1 回のクエリで指定できるロールアップインデックスは 1 つだけです。ロールアップインデックス名のあいまい一致はサポートされていません。リアルタイムデータのクエリでは複数のインデックスを指定できます。

ステップ 4:ロールアップインデックスパターンの作成

Kibana でロールアップデータを可視化する前に、Kibana がロールアップインデックスを認識できるよう、ロールアップインデックスパターンを作成します。

  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:トラフィック監視チャートの作成

ロールアップインデックスパターンを使用して、networkinTraffic および networkoutTraffic の折れ線グラフを作成します。

  1. Kibana コンソールにログインします。ログイン手順については、「Kibana コンソールへのログイン」をご参照ください。

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

    1. 左側ナビゲーションウィンドウで、可視化 アイコンをクリックします。Visualize图标

    2. 新しい可視化の作成 をクリックします。

    3. 新しい可視化 ダイアログボックスで、折れ線グラフ をクリックします。

    4. インデックスパターン一覧から、ステップ 4 で作成したロールアップインデックスパターンを選択します。

  3. メトリックス および バケット の設定を構成します。

    1. メトリックス セクションで、Y 軸のドロップダウン矢印 Y-axi下拉箭头 をクリックします。

    2. Y 軸のパラメーターを設定します。

      パラメーター
      集約 合計
      フィールド networkinTraffic または networkoutTraffic
      カスタムラベル Y 軸のラベルを入力します
    3. バケット セクションで、追加X 軸 を選択します。

    4. X 軸のパラメーターを設定します。

      パラメーター
      集約 date_histogram(ステップ 1 の groups で定義)
      フィールド @timestamp
      最小間隔 ロールアップ間隔の整数倍(例: 2h または 3h)。デフォルト値は、ロールアップタスクで設定した集約粒度です。
    5. 変更の適用 アイコン Apply Changes图标 をクリックします。

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

  5. 上記の手順を繰り返して、ゲージチャートを作成します。

ステップ 6:トラフィック監視ダッシュボードの作成

  1. 左側ナビゲーションウィンドウで、ダッシュボード アイコンをクリックします。

    Dashboard icon

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

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

  4. パネルの追加 ページで、ステップ 5 で作成したチャートをクリックします。

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

  6. ダッシュボード名を入力し、保存の確認 をクリックします。これでダッシュボードが表示されます。

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