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

Simple Log Service:クエリ高速化

最終更新日:Mar 25, 2025

Simple Log Service は、メトリックに対するクエリを高速化するためにグローバルキャッシュと並列計算をサポートしています。このトピックでは、グローバルキャッシュと並列計算の原則、および関連パラメーターについて説明します。

原則

以下の内容は、グローバルキャッシュと並列計算の原則について説明しています。

グローバルキャッシュ

imageデフォルトでは、Prometheus クエリ コンピュートエンジンはクエリ結果をキャッシュしません。データをクエリするたびに、すべてのデータが計算されます。データ量が多く、クエリ時間範囲が長いシナリオでは、クエリは非効率的です。グローバルキャッシュ機能は、同じクエリに対して特定の結果の再利用をサポートします。クエリに指定した PromQL 文と step パラメーターが以前のクエリに指定した設定と同じ場合、2 つのクエリは同じと見なされ、以前のクエリの結果を再利用できます。この機能は、同じクエリ時間範囲内でクエリ結果を再利用し、時間範囲を超えるデータを個別にクエリします。

重要
  • グローバルキャッシュ機能を有効にすると、この機能は、start パラメーターと end パラメーターで指定されたクエリ時間範囲を、step パラメーターで指定された値の整数倍に基づいてキャッシュと照合します。これにより、キャッシュヒット率が大幅に向上し、クエリ効率が向上します。クエリが完了すると、クエリ結果はキャッシュ内で更新されます。

  • データ整合性への影響を軽減するために、不完全なクエリ結果はキャッシュされません。キャッシュデータの時間範囲内にないデータのクエリ結果はキャッシュされません。

並列計算

デフォルトでは、標準の Prometheus クエリ文を実行して取得されたデータは、単一のコルーチンのサーバー上で計算されます。複数の時系列、長いクエリ時間範囲、複雑な計算ロジックが関係するシナリオでは、クエリ速度が遅くなります。 Simple Log Service は、Prometheus エンジンへの適応を組み込んで、並列および分散 Prometheus クエリをサポートしています。並列計算機能は、時間間隔または時系列ごとに PromQL クエリを分割し、実行するために複数のサーバーにクエリをスケジュールします。複数のサーバーでのクエリの パフォーマンス は、単一のサーバーでのクエリと比較して 2 ~ 10 倍向上します。

  • 時間間隔による分割

    この例では、クエリの実行間隔は 12 時間です。クエリは、2 時間間隔で実行される 6 つのサブクエリに分割されます。 6 つのサブクエリは計算のために同時に実行されます。サブクエリの結果はマージされます。

    query:    sum(metric)
    interval: 12h
    step:     2m
  • 時系列による分割

    この例では、メトリックには 500,000 の時系列が含まれており、グローバルな同時タスク数は 10 に設定されています。合計 10 個のタスクが同時に実行されます。各タスクは、50,000 の時系列に関連するデータを計算します。タスクが実行された後、タスクの結果がマージされます。

重要
  • 並列計算が PromQL クエリに適用可能かどうかを心配する必要はありません。 Simple Log Service の時系列 コンピュートエンジンは、並列計算が適用可能な PromQL クエリを自動的に識別し、実行するために複数のノードにクエリをスケジュールします。

  • 並列計算は、クエリ時間範囲が長い場合、またはメトリックの時系列の数が多い場合に適しています。ただし、クエリに関連するデータ量が小さい場合、並列計算はクエリに影響を与えたり、クエリ パフォーマンス を低下させたりする可能性があります。ビジネスシナリオでクエリ時間範囲が長い場合、またはメトリックの時系列の数が多い場合は、HTTP FormValue モードで並列計算のパラメーターを構成することをお勧めします。

  • 集約計算シナリオでは、Aggregation without() を使用しても、計算 パフォーマンス はわずかにしか向上しません。たとえば、agg without() metric{} を使用してクエリを実行できます。このクエリでは、by 操作はすべてのラベルに対して実行されます。大量の中間結果を要約して集約する必要があるため、結果セット内のサンプル数はほとんど減りません。計算 パフォーマンス はわずかに向上します。多数の時系列が関係する場合、パフォーマンス の低下が発生することさえあります。複数のラベルに対して by 操作を実行する場合も、計算 パフォーマンス はわずかに向上します。

構成の説明

次の表に、クエリ高速化のために構成できるパラメーターを示します。 MetricsConfig モードまたは HTTP FormValue モードでパラメーターを構成できます。

カテゴリ

パラメーター

説明

MetricsConfig

FormValue

説明

parallel_config

(並列計算のパラメーター)

enable

並列計算を有効にするかどうかを指定します。デフォルトでは、並列計算は無効になっています。

サポートされています

サポートされています

並列計算は、クエリを複数のサブクエリに分割し、複数の 子 計算ノードに実行するようにスケジュールします。サブクエリの結果はプライマリ計算ノードで集約されます。

mode

並列計算の構成に使用するモード。有効な値:

  • auto: システムは、最新のクエリの結果に基づいて、並列度を自動的に選択します。

  • static: 時間分割と並列度を手動で構成する必要があります。

サポートされています

サポートされていません

auto モードまたは static モードで並列計算を構成できます。 static モードで並列計算を構成するには、Simple Log Service のテクニカルサポートに相談することをお勧めします。

timePieceInterval

クエリを分割する時間間隔。単位:秒。有効な値:[3600、86400 × 30]。デフォルト値:21600(6 時間に相当)。

サポートされています

サポートされています

クエリを分割する時間間隔。単位:秒。 Simple Log Service コンソールでは、時間単位で正確な値を指定する必要があります。

timePieceCount

指定した時間間隔に基づいて分割した後に取得できるサブクエリの数。有効な値:1 ~ 16。デフォルト値:8。

サポートされています

サポートされています

指定した時間間隔に基づいて分割した後に取得できるサブクエリの数。

totalParallelCount

グローバルな同時タスクの数。有効な値:2 ~ 64。デフォルト値:8。

サポートされています

サポートされています

時系列ごとにクエリを分割できます。このパラメーターは、メトリックに対して生成できるタスクの総数を指定します。たとえば、メトリックに 500 万の時系列が含まれており、グローバルな同時タスク数が 10 に設定されているとします。合計 10 個のタスクが同時に実行されます。各タスクは、500,000 の時系列に関連するデータを計算します。

parallelCountPerHost

サーバー上の同時タスクの数。有効な値:1 ~ 8。デフォルト値:2。

サポートされています

サポートされています

時系列ごとにクエリを分割できます。分割後に取得されたタスクは、実行するために異なるサーバーにスケジュールされます。このパラメーターは、サーバー上で分割後に取得されるタスクの数を指定します。

query_cache_config

(グローバルキャッシュのパラメーター)

enable

グローバルキャッシュを有効にするかどうかを指定します。デフォルトでは、グローバルキャッシュは無効になっています。

サポートされています

サポートされています

グローバルキャッシュを有効にすると、この機能は同じクエリのいくつかの結果を再利用できます。

MetricsConfig モードでクエリ高速化を構成する

MetricsConfig は、Simple Log Service が各 Metricstore に提供する独立したパラメーターです。 Simple Log Service コンソールまたは SDK を使用して、MetricsConfig パラメーターを構成できます。 MetricsConfig パラメーターを構成または更新した後、構成が有効になるまで 3 分間待つ必要があります。

Simple Log Service コンソールで Metricstore のクエリ高速化設定を構成する

[メトリックストア属性] ページで、次の操作を実行します。 [メトリックストア属性] ページへのアクセス方法の詳細については、「Metricstore の構成を変更する」をご参照ください。

次のモードで並列計算を構成できます。

  • auto モードでは、Simple Log Service は、最新のクエリタスクの結果における同じクエリによってプルされたデータ量に基づいて、現在の並列計算タスクの並列度を推定します。

  • static モードでは、並列度を手動で構成できます。 static モードで並列計算を構成するには、Simple Log Service のテクニカルサポートに相談することをお勧めします。

image

SDK を使用して Metricstore の MetricsConfig パラメーターを構成する

Simple Log Service Java 用 SDK は、MetricsConfig パラメーターを変更するために使用できる操作を提供します。 JSON 形式で MetricsConfig パラメーターのフィールドを構成できます。例:

{
  "parallel_config": {
    "enable": true,
    "mode": "static",
    "parallel_count_per_host": 2,
    "time_piece_count": 8,
    "time_piece_interval": 21600,
    "total_parallel_count": 8
  },
  "query_cache_config": {
    "enable": true
  }
}

次の表に、クエリ高速化の構成に使用するパラメーター、JSON 形式の MetricsConfig パラメーターのフィールド、および FormValue パラメーターのキーフィールド間のマッピングを示します。

カテゴリ

パラメーター

MetricsConfig

FormValue

parallel_config

enable

enable

x-sls-parallel-enable

mode

mode

なし

timePieceInterval

time_piece_interval

x-sls-parallel-time-piece-interval

timePieceCount

time_piece_count

x-sls-parallel-time-piece-count

totalParallelCount

total_parallel_count

x-sls-parallel-count

parallelCountPerHost

parallel_count_per_host

x-sls-parallel-count-per-host

query_cache_config

enable

enable

x-sls-global-cache-enable

HTTP FormValue モードでクエリ高速化を構成する

MetricsConfig モードでクエリ高速化を構成できます。 HTTP FormValue モードでクエリ高速化を構成することもできます。後者の構成モードを使用する場合、設定は現在のリクエストに対してのみ有効になります。 Metricstore 関連の HTTP API の詳細については、「メトリッククエリ用の API 操作」をご参照ください。

次の例では、HTTP FormValue モードでグローバルキャッシュと並列計算を構成する方法について説明します。

グローバルキャッシュ

x-sls-global-cache-enable=true を追加して、グローバルキャッシュを有効にします。

https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/query_range?query=sum(up)&start=1690876800&end=1690877800&step=10&x-sls-global-cache-enable=true

並列計算

x-sls-parallel-enable=true&x-sls-parallel-count=16 を追加して、並列計算を有効にし、並列度を 16 に設定します。

https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/query_range?query=sum(up)&start=1690876800&end=1690877800&step=10&x-sls-parallel-enable=true&x-sls-parallel-count=16