時系列データの場合、データ量は時間の経過とともに増加します。 大量のデータを保存する場合、ストレージコストは直線的に増加します。 このシナリオでは、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: ロールアップジョブを作成する
この手順では、ジョブの実行方法、ドキュメントのインデックス作成時期、およびロールアップインデックスで実行されるクエリについて説明します。 次の例では、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"]
}
]
}パラメータ | 必須 | タイプ | 説明 |
| はい | string | ロールアップジョブのインデックスまたはインデックスパターン。 ワイルドカード (*) がサポートされています。 |
| はい | string | ロールアップサマリーのインデックス。 ワイルドカードはサポートされておらず、完全な名前が必要です。 |
| はい | string | ロールアップジョブの間隔。 データがロールアップされる間隔とは無関係です。 |
| はい | integer | ロールアップインデックスの各反復で処理されるバケット結果の数。 値が大きいほど、処理が速くなり、処理中のメモリ使用量が多くなります。 |
| はい | object | ジョブのグループ化フィールドと集計方法を定義できます。 |
└ | はい | object | 日付フィールドを時間ベースのバケットにロールアップできます。 |
└ | はい | string | ロールアップする日付フィールド。 |
└ | はい | 時間単位 | データがロールアップされる間隔。 たとえば、このパラメータが 1h に設定されている場合、field パラメータで指定された日付フィールドは 1 時間ごとにロールアップされます。 このパラメータは、データがロールアップされる最小間隔を指定します。 |
| いいえ | object | なし。 |
└ | はい | string | terms フィールドセット。 この配列のフィールドはキーワード型または数値型にすることができ、順序は必要ありません。 |
| いいえ | object | なし。 |
└ | はい | string | 収集するメトリックのフィールド。 前述のコードでは、このパラメータは networkoutTraffic と networkinTraffic に設定されています。 |
└ | はい | array | 集計に使用する演算子。 このパラメータが sum に設定されている場合、networkinTraffic フィールドの合計が計算されます。 このパラメータは、min、max、sum、average、または値カウントに設定できます。 |
└ は子パラメータを示します。
これらのパラメータの詳細については、「ロールアップジョブ API を作成する」をご参照ください。 パラメータを設定する際は、次の点に注意してください。
index_patternがワイルドカードパターンに設定されている場合、index_pattern の値がrollup_indexの値と異なることを確認してください。 そうしないと、エラーが返されます。rollup_index のマッピングはオブジェクト型です。 index_pattern が rollup_index と同じ値に設定されていないことを確認してください。 そうしないと、エラーが返されます。
ロールアップジョブは、日付ヒストグラム集計、ヒストグラム集計、および terms 集計のみをサポートします。 詳細については、「ロールアップ集計の制限」をご参照ください。
手順 2: ロールアップジョブを開始し、ジョブ情報を表示する
ロールアップジョブを開始します。
POST _rollup/job/ls-monitordata-sls-1h-job1/_startロールアップジョブの構成、統計、およびステータスを表示します。
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 を元のクエリに使用されたクライアントが予期するパターンに復元します。
match_all を使用して、ロールアップインデックスのすべてのデータを取得します。
GET monitordata-logstash-rollup-1h-1/_search { "query": { "match_all": {} } }クエリには 1 つのロールアップインデックスのみを指定できます。 あいまい一致はサポートされていません。 リアルタイムデータクエリには複数のインデックスを指定できます。
term クエリ、terms クエリ、範囲クエリ、match all クエリ、および任意の複合クエリがサポートされています。 複合クエリはクエリの組み合わせであり、ブールクエリ、ブースティングクエリ、および定数スコアが含まれます。 詳細な制限については、「ロールアップ検索の制限」をご参照ください。
_rollup_searchを使用して、networkoutTraffic の合計を取得します。GET /monitordata-logstash-rollup-1h-1/_rollup_search { "size": 0, "aggregations": { "sum_temperature": { "sum": { "field": "networkoutTraffic" } } } }_rollup_searchは、一般的な検索操作機能のサブセットをサポートしています。query: 特定の制限付き Query DSL パラメータ。 詳細については、「ロールアップ検索の制限」および「ロールアップ集計の制限」をご参照ください。
aggregations: 集計パラメータ。
_rollup_searchは、次の機能をサポートしていません。size: このパラメータを 0 に設定するか、このパラメータを指定しないでください。 これは、ロールアップがデータ集計のみに使用され、クエリ結果を返すことができないためです。
highlighter、suggestors、post_filter、profile、explain などのパラメータはサポートされていません。
手順 4: ロールアップインデックスパターンを作成する
Kibana コンソールにログオンします。
詳細については、「Kibana コンソールにログオンする」をご参照ください。
左側のナビゲーションペインで、[管理] アイコンをクリックします。

[kibana] 領域で、[インデックスパターン] をクリックします。
オプション:[インデックスパターンについて] ページを閉じます。
説明インデックスパターンを初めて作成するのではない場合は、この手順をスキップします。
を選択します。

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

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

[インデックスパターンの作成] をクリックします。
手順 5: Kibana コンソールでトラフィック監視用のチャートを作成する
次の手順では、Kibana コンソールでロールアップインデックスの networkinTraffic チャートと networkoutTraffic チャートを作成する方法を示します。
Kibana コンソールにログオンします。
詳細については、「Kibana コンソールにログオンする」をご参照ください。
折れ線グラフを作成します。
左側のナビゲーションペインで、[視覚化] アイコンをクリックします。

[新しい視覚化を作成] をクリックします。
表示される [新しい視覚化] ダイアログボックスで、[折れ線] をクリックします。
インデックスパターンリストで、作成したロールアップインデックスパターンをクリックします。
[メトリック] と [バケット] でパラメータを指定します。
[メトリック] セクションで、
をクリックします。[Y 軸] パラメータを指定します。
パラメータ
説明
[集計]
パラメータ値を [合計] に設定します。
[フィールド]
パラメータ値を networkinTraffic または networkoutTraffic に設定します。
[カスタムラベル]
カスタム Y 軸ラベルを入力します。
[バケット] セクションで、 を選択します。
[X 軸] パラメータを指定します。
パラメータ
説明
[集計]
groupに対して定義されたdate_histogramにパラメーター値を設定します (手順 1: ロールアップジョブの作成 を参照してください)。[フィールド]
パラメータ値を [@timestamp] に設定します。
[最小間隔]
デフォルト値は、ロールアップジョブで定義されている集計時間粒度です。 値は、2h や 3h など、ロールアップ間隔の整数倍である必要があります。
アイコンをクリックします。
上部のナビゲーションバーで、[保存] をクリックします。
同様にゲージチャートを作成します。
手順 6: Kibana コンソールでトラフィック監視ダッシュボードを作成する
Kibana コンソールで、左側のナビゲーションペインの [ダッシュボード] アイコンをクリックします。

[新しいダッシュボードの作成] をクリックします。
上部のナビゲーションバーで、[追加] をクリックします。
[パネルの追加] ページで、手順 5 で構成したチャートをクリックします。
[パネルの追加] ページを閉じます。 上部のナビゲーションバーで、[保存] をクリックします。
ダッシュボード名を変更し、[保存の確認] をクリックします。
ダッシュボードの構成が保存されると、ダッシュボードを表示できます。
[+ フィルターを追加] をクリックし、フィルター項目を選択し、フィルター条件を構成し、[保存] をクリックします。