コンテンツにスキップ

サービスデータソース定義とDQLクエリ

サービスパフォーマンスデータソース定義

TM インデックス空間には、サービスリストとパフォーマンスメトリクス関連データが保存されています。アプリケーションパフォーマンスモニタリング(APM) > パフォーマンスメトリクスのデータは、主にこのインデックス空間からクエリされます。TM は、各サービスに対して、分、時、日の3つの異なる粒度でサービスメトリクスデータを集約し、データのクエリ効率を向上させています。

例えば、2024-03-19 15:00:002024-03-19 15:15:00 の15分間の全サービスメトリクスデータをクエリするには、DQLを使用できます:

TM::`*`:(){source="service_list_1m"} [1710831600000:1710832500000]

これにより、以下のような結果が返されます:

クエリ結果の例
[
  {
    "time": 1710835681000,
    "time_us": 1710835681000000,
    "__docid": "T_cnskg71jdosvib6m44s0",
    "__source": "service_list_1m",
    "source": "service_list_1m",
    "__namespace": "tracing",
    "r_env": "demo",
    "r_error_count": 0,
    "r_max_duration": 2293857,
    "r_psketch": "Av1KgVq/UvA/AAAAAAAAAAAJAbgL",
    "r_request_count": 1,
    "r_resp_time": 2293857,
    "r_service": "go-profiling-demo-1",
    "r_service_sub": "go-profiling-demo-1:demo:v0.8.888",
    "r_type": "custom",
    "r_version": "v0.8.888",
    "create_time": 1710835740447,
    "date": 1710835681000,
    "date_ns": 0
  },
  {
    "time": 1710835201000,
    "time_us": 1710835201000000,
    "__docid": "T_cnskcf9jdosvib6jl4kg",
    "__source": "service_list_1m",
    "source": "service_list_1m",
    "__namespace": "tracing",
    "r_env": "demo",
    "r_error_count": 0,
    "r_max_duration": 2370648,
    "r_psketch": "Av1KgVq/UvA/AAAAAAAAAAAJAboL",
    "r_request_count": 1,
    "r_resp_time": 2370648,
    "r_service": "go-profiling-demo-1",
    "r_service_sub": "go-profiling-demo-1:demo:v0.8.888",
    "r_type": "custom",
    "r_version": "v0.8.888",
    "create_time": 1710835261477,
    "date": 1710835201000,
    "date_ns": 0
  }
]

主なフィールドの説明は以下の通りです:

フィールド 説明
source string データ集約の粒度。以下の区分があります:
  • 毎分(source="service_list_1m")
  • 毎時(source="service_list_1h"
  • 毎日(source="service_list_1d"
  • r_env string サービスのデプロイ環境
    r_error_count int サービスエラー回数
    r_max_duration int 時間粒度内の最大応答時間(単位:マイクロ秒)
    r_request_count int リクエスト回数
    r_resp_time int 時間粒度内に集計された応答時間の合計
    r_service string サービス名
    r_service_sub string <サービス名>:<デプロイ環境>:<サービスバージョン>
    r_type string サービス種別(http/web/db/gateway...)
    r_version string サービスバージョン
    date int ミリ秒タイムスタンプ。対応するもの:
  • 毎分の0秒(hh:mm:00source="service_list_1m" の場合)
  • 毎時の0分(hh:00source="service_list_1h" の場合)
  • 毎日の0時(00:00:00source="service_list_1d" の場合)
  • 同様に、2024-03-19 15:00:002024-03-19 17:00:00 の2時間のデータをクエリするには、DQLを使用できます:

    TM::`*`:(){source="service_list_1h"} [1710831600000:1710838800000]
    

    2024-03-19 00:00:002024-03-21 00:00:00 の2日間のデータをクエリするには、DQLを使用できます:

    TM::`*`:(){source="service_list_1d"} [1710777600000:1710950400000]
    

    異なる時間粒度を組み合わせて使用することもできます。例えば、2024-03-19 15:00:002024-03-19 17:30:00 の2時間半のデータをクエリするには、DQLを使用できます:

    TM::`*`:(){ (source="service_list_1h" and date >= 1710831600000 and date < 1710838800000) or (source="service_list_1m" and date >= 1710838800000 and date <= 1710840600000) }
    
    Abstract

    もちろん、ここでは分単位 source="service_list_1m" のみを使用して、2024-03-19 15:00:002024-03-19 17:30:00 のような時間帯や日をまたぐ範囲のデータをクエリすることも可能ですが、クエリ効率が大幅に低下し、返されるデータ量も倍増するため、このようなクエリは推奨しません。

    クエリ結果をさらに二次加工することで、関連するサービスレベルのメトリクスを計算できます。例えば:

    total_count = SUM(r_request_count)
    error_count = SUM(r_error_count)
    error_rate = SUM(r_error_count) / SUM(r_request_count)
    max_duration = MAX(r_max_duration)
    sum_resp_time = SUM(r_resp_time)
    avg_per_second = SUM(r_request_count) / <クエリの時間範囲>
    avg_resp_time = SUM(r_resp_time) / SUM(r_request_count)
    p50: 配列 [(r_resp_time1/r_request_count1)...{r_request_count1回繰り返し}, (r_resp_time2/r_request_count2)...{r_request_count2回繰り返し}, (r_resp_time3/r_request_count3)...{r_request_count3回繰り返し}, ...] を生成し、配列をソートした後、インデックス SUM(r_request_count)*0.5 を取得
    

    例えば、各サービスの一定期間内のQPS(1秒あたりのリクエスト数)をクエリするには、以下を使用できます:

    TM::`*`:(r_service, sum(r_request_count) / (1737099000000 - 1737093600000) * 1000 as QPS){ (source="service_list_1h" and date >= 1737093600000 and date < 1737097200000) or (source="service_list_1m" and date >= 1737097200000 and date <= 1737099000000) } by r_service
    

    サービスマップデータソース定義

    TSM インデックス空間には、主にサービス間の呼び出しトポロジー関係データが保存されています。分単位でデータの事前集約が行われています。例えば、2024-03-19 15:00:002024-03-19 15:15:00 の15分間のすべてのサービス呼び出し関係をクエリするには、DQLを使用できます:

    TSM::`*`:(){} [1710831600000:1710832500000]
    

    これにより、以下のようなクエリ結果が返されます:

    クエリ結果の例
    [
        {
            "time": 1710835700438,
            "time_us": 1710835700438064,
            "__docid": "6340252d-331c-6e1dd9338-0ed04e818c4d",
            "__source": "relationship",
            "source_service": "go-profiling-demo-1",
            "source_wsuuid": "wksp_8d351d83bdf14b8b8270ab75fe29a990",
            "source_env": "demo",
            "source_project": "",
            "source_version": "v0.8.888",
            "source_type": "custom",
            "source_organization": "",
            "source_status": "ok",
            "source_start": 1710835700059433,
            "source_duration": 220210272,
            "target_service": "go-profiling-demo-2",
            "target_wsuuid": "wksp_8d351d83bdf14b8b8270ab75fe29a990",
            "target_env": "demo",
            "target_project": "",
            "target_version": "v0.8.888",
            "target_type": "custom",
            "target_organization": "",
            "target_status": "ok",
            "target_start": 1710835700438064,
            "target_duration": 886040,
            "count": 96,
            "unique_id": "XTzHH-jScNjXgBSXNIdFcSOVpHwWKyAZroh71ttyPnXK9nl3jW0re0hlKOeHj6PYgo-profiling-demo-1go-profiling-demo-2",
            "unique_id_env_version": "Zp-9KKvEb4m9aU0OeUMon8MiH2isxqXU742YFlVtokgL2Vy73NwtykkG3vA3X0z1go-profiling-demo-1go-profiling-demo-2",
            "error_count": 0
        },
        {
            "time": 1710835243699,
            "time_us": 1710835243699376,
            "__docid": "f4c7de67-ca1b-6e17fd78e-e8bcb4d1d64d",
            "__source": "relationship",
            "source_service": "go-profiling-demo-1",
            "source_wsuuid": "wksp_8d351d83bdf14b8b8270ab75fe29a990",
            "source_env": "demo",
            "source_project": "",
            "source_version": "v0.8.888",
            "source_type": "custom",
            "source_organization": "",
            "source_status": "ok",
            "source_start": 1710835243379392,
            "source_duration": 227582208,
            "target_service": "go-profiling-demo-2",
            "target_wsuuid": "wksp_8d351d83bdf14b8b8270ab75fe29a990",
            "target_env": "demo",
            "target_project": "",
            "target_version": "v0.8.888",
            "target_type": "custom",
            "target_organization": "",
            "target_status": "ok",
            "target_start": 1710835243699376,
            "target_duration": 856217,
            "count": 96,
            "unique_id": "XTzHH-jScNjXgBSXNIdFcSOVpHwWKyAZroh71ttyPnXK9nl3jW0re0hlKOeHj6PYgo-profiling-demo-1go-profiling-demo-2",
            "unique_id_env_version": "Zp-9KKvEb4m9aU0OeUMon8MiH2isxqXU742YFlVtokgL2Vy73NwtykkG3vA3X0z1go-profiling-demo-1go-profiling-demo-2",
            "error_count": 0
        }
    ]
    

    主なフィールドの説明は以下の通りです:

    フィールド 説明
    time int ミリ秒タイムスタンプ。サービス呼び出しが発生した時間
    time_us int サービス呼び出しが発生した時間(マイクロ秒単位)
    source_service string 呼び出し元サービス名
    source_wsuuid string 呼び出し元サービスの報告先ワークスペースID
    source_env string 呼び出し元サービスのデプロイ環境
    source_project string 呼び出し元サービスのプロジェクト名
    source_version string 呼び出し元サービスのバージョン
    source_type string 呼び出し元サービスの種別
    source_organization string 呼び出し元サービスの報告先ワークスペースが属する組織
    source_status string 呼び出し元サービスのステータス(ok/error)
    source_start int 呼び出し元サービスのスパン開始時間(マイクロ秒タイムスタンプ)
    source_duration int 1分間における呼び出し元サービススパンの継続時間の合計(単位:マイクロ秒)
    target_service string 呼び出し先サービス名
    target_wsuuid string 呼び出し先サービスの報告先ワークスペースID
    target_env string 呼び出し先サービスのデプロイ環境
    target_project string 呼び出し先サービスのプロジェクト名
    target_version string 呼び出し先サービスのバージョン
    target_type string 呼び出し先サービスの種別
    target_organization string 呼び出し先サービスの報告先ワークスペースが属する組織
    target_status string 呼び出し先サービスのステータス(ok/error)
    target_start int 呼び出し先サービスのスパン開始時間(サービス呼び出しが発生した時間)(マイクロ秒タイムスタンプ)
    target_duration int 1分間における呼び出し先サービススパンの継続時間の合計(単位:マイクロ秒)
    count int 1分間における呼び出し回数
    unique_id string 呼び出し元サービス名と呼び出し先サービス名のみから生成される一意のID
    unique_id_env_version int 呼び出し元サービス、環境、バージョンと呼び出し先サービス、環境、バージョンを区別して生成される一意のID
    error_count int 1分間における呼び出し失敗回数

    サービス呼び出し関係やサービス呼び出しレベルのメトリクスについては、例えば以下のDQLを使用してサービス間の呼び出し関係をクエリできます:

    TSM::`*`:(first(source_service) as source_service,
    first(source_wsuuid) as source_wsuuid,
    first(target_service) as target_service,
    first(target_wsuuid) as target_wsuuid,
    sum(count) as total_count,
    sum(error_count) as total_error_count,
    sum(target_duration) as total_duration
    ){} by unique_id
    

    フィードバック

    このページは役に立ちましたか?