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

Simple Log Service:負荷分散の測定関数

最終更新日:Jun 21, 2026

分散システムで負荷分散を実装するには、まずその状態を正確に測定する必要があります。このトピックでは、関数の基本構文を説明し、例を示します。

背景情報

  • サンプルログには 6 つのフィールドが含まれます:クラスター ID、サーバー ID、時刻、CPU 負荷、メモリ負荷、ネットワーク帯域幅負荷。詳細については、「インデックスの作成」をご参照ください。

    6 つのフィールドは次のように設定されています: cluster_id (text)、server_id (text)、time_period (text)、cpu_load (double)、ram_load (double)、network_load (double)。すべてのフィールドはクエリ可能であり、text フィールドにはトークナイザーが設定されています。

  • 以下はサンプルログです:

    {"cluster_id":"C001","cpu_load":"0.1","network_load":"0.6","ram_load":"0.7","server_id":"S001","time_period":"2024-01-01 00:00:00"}
    {"cluster_id":"C001","cpu_load":"0.2","network_load":"0.5","ram_load":"0.8","server_id":"S002","time_period":"2024-01-01 00:01:00"}
    {"cluster_id":"C001","cpu_load":"0.1","network_load":"0.6","ram_load":"0.7","server_id":"S001","time_period":"2024-01-01 00:02:00"}
    {"cluster_id":"C001","cpu_load":"0.2","network_load":"0.5","ram_load":"0.8","server_id":"S002","time_period":"2024-01-01 00:03:00"}
    {"cluster_id":"C001","cpu_load":"0.1","network_load":"0.6","ram_load":"0.7","server_id":"S001","time_period":"2024-01-01 00:04:00"}
    {"cluster_id":"C001","cpu_load":"0.2","network_load":"0.5","ram_load":"0.8","server_id":"S002","time_period":"2024-01-01 00:05:00"}
    {"cluster_id":"C001","cpu_load":"0.1","network_load":"0.6","ram_load":"0.7","server_id":"S001","time_period":"2024-01-01 00:06:00"}
    {"cluster_id":"C001","cpu_load":"0.2","network_load":"0.5","ram_load":"0.8","server_id":"S002","time_period":"2024-01-01 00:07:00"}
    {"cluster_id":"C001","cpu_load":"0.1","network_load":"0.6","ram_load":"0.7","server_id":"S001","time_period":"2024-01-01 00:08:00"}
    {"cluster_id":"C001","cpu_load":"0.2","network_load":"0.5","ram_load":"0.8","server_id":"S002","time_period":"2024-01-01 00:09:00"}

負荷分散の測定関数

関数名

構文

説明

戻り値の型

how_balanced 関数

how_balanced(array(array(double)) load_matrix)

array_agg 関数と併用すると、分散システムにおける負荷分散の度合いを測定します。戻り値は (0, 1] の範囲で、1 に近いほど負荷が均等であることを示し、1 は完全に均等な状態を表します。

double

how_balanced 関数

array_agg 関数と併用して、分散システムにおける負荷分散の度合いを測定します。

double how_balanced(array(array(double)) load_matrix)

パラメーター

説明

load_matrix

各行が 1 台のサーバー負荷の時系列ベクトルを表す負荷行列です。

  • クエリと分析文

    * | with server_time_series as
    (
        select cluster_id,
            server_id,
            array_agg(to_unixtime(date_parse(time_period, '%Y-%m-%d %H:%i:%s'))) as time_periods,
            array_agg(cpu_load + ram_load + network_load) as metric_values
        from log
        where time_period >= '2024-01-01 00:00:00'
          and time_period < '2024-01-02 00:00:00'
        group by cluster_id, server_id
    ),
    imputed_server_series as
    (
        select cluster_id,
            server_id,
            ts_fill_missing(
                time_periods,
                metric_values,
                to_unixtime(date_parse('2024-01-01 00:00:00', '%Y-%m-%d %H:%i:%s')),
                to_unixtime(date_parse('2024-01-02 00:00:00', '%Y-%m-%d %H:%i:%s')),
                '1 minute', 'value=0') as imputed_time_series
        from server_time_series
    )
    select cluster_id,
        how_balanced(array_agg(imputed_time_series[1])) as balance
    from imputed_server_series
    group by cluster_id
  • 結果

    返された balance 値は、(0, 1] のスケールで負荷分散の度合いを表します。1 に近いほど負荷が均等であることを示します。

    クラスター ID

    バランス

    C001

    0.5