SQL クエリ結果をグラフ化する

オブザーバビリティ分析では、SQL クエリの結果をグラフとして可視化し、トレースデータのパターンと傾向を特定できます。クエリを実行してトレースデータを検索して集計すると、結果を表形式で表示したり、グラフに変換したり、可視化をダッシュボードに保存したりできます。

たとえば、次のグラフは、service_name でグループ化された、スパンによって報告されたステータスを時系列で表示しています。

サービス名別の内訳を示すグラフの例。

始める前に

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Enable the Observability API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  4. [オブザーバビリティ分析] ページの読み込み、トレースデータに対するクエリの作成と実行、カスタム ダッシュボードへのグラフの保存に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

    • クエリを実行するオブザーバビリティ ビューに対するオブザーバビリティ ビュー アクセサー (roles/observability.viewAccessor)。このロールは IAM 条件をサポートしています。これにより、特定のビューへの付与を制限できます。ロールの付与に条件を適用しない場合、プリンシパルはすべてのオブザーバビリティ ビューにアクセスできます。
    • プロジェクトに対するモニタリング編集者 (roles/monitoring.editor)。

    ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

    必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

グラフ化するデータを選択する

グラフに表示するデータを構成するには、SQL を使用してクエリを作成します。 [グラフ] タブを選択すると、クエリの結果がグラフに表示されます。クエリを実行してグラフを生成したら、グラフの種類を変更し、異なるデータを表示する列を選択して、グラフをカスタマイズできます。

クエリの結果をグラフとして表示するには、次のようにします。

  1. Google Cloud コンソールで、 [オブザーバビリティ分析] ページに移動します。

    Observability Analytics に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Logging] の結果を選択します。

  2. [クエリ] ペインにクエリを入力して、[実行] をクリックします。

  3. クエリが完了したら、[結果] タブでクエリ結果の表示方法を選択します。

    • 表: 表形式のみ。

    • グラフ: グラフ形式のみ。

    • 両方: グラフと表形式。

      クエリ結果の表示方法を選択したら、選択した可視化のフィールドを構成し、クエリと結果をカスタム ダッシュボードに保存できます。[表] オプションを選択した場合、保存される形式は表形式になります。それ以外の場合は、グラフ形式になります。

      グラフの場合、可視化オプションを使用してグラフの種類を選択し、グラフ化する行と列を選択できます。グラフ構成の詳細については、グラフの構成をカスタマイズするをご覧ください。

グラフの構成をカスタマイズする

グラフの構成をカスタマイズするには、グラフの種類を変更して、グラフにディメンションとメジャーを選択し、内訳を適用します。ディメンションは、行をグループ化または分類するために使用される、X 軸の値です。メジャーまたは Y 軸の値は、Y 軸に対してプロットされるデータ系列です。

グラフの種類を変更する

ディメンションとメジャーとして選択した行と列の種類、データ可視化する方法に応じて、次のグラフの種類から選択できます。

  • 棒グラフ(デフォルト): 棒グラフでは、2 つの軸でデータをプロットします。グラフでカテゴリまたは文字列をディメンションとして使用する場合、棒グラフのグラフ構成は水平方向または垂直方向に設定できます(ディメンションとメジャーの軸が入れ替わります)。

  • 折れ線グラフ: 折れ線グラフを使用すると、経時的なデータの変化を示すことができます。折れ線グラフを使用する場合、各時系列は選択したメジャーに対応する異なる線で示されます。

    X 軸が時間ベースの場合、各データポイントは期間の開始位置に配置されます。各データポイントは線形補間によって接続されています。

  • 積み上げ面グラフ: 面グラフは折れ線グラフに基づいており、各線の下の領域は網掛けされます。面グラフでは、データ系列が積み上げられます。たとえば、2 つの同一の系列が折れ線グラフで重複する場合、網掛けされた領域は面グラフで積み重ねられます。

  • 円グラフまたはドーナツグラフ: 円グラフは、データセット全体に対するデータセット内のカテゴリの割合を示します。円はデータセット全体を表し、円の中の扇形はデータセット内のカテゴリを表します。扇形のサイズは、カテゴリが全体に占める割合を示します。

  • 表: 表には、クエリ結果の行ごとに 1 行が表示されます。表の列は SELECT 句で定義されます。ダッシュボードにデータを表形式で表示する場合は、LIMIT 句を使用して、結果の行数を数百未満に制限します。

  • ゲージまたはスコアカード: ゲージとスコアカードには、最新の値と、その値と一連のしきい値の差に基づいて緑、黄色、赤のインジケーターが表示されます。最新の値に関する情報のみを表示するゲージとは異なり、スコアカードには過去の値に関する情報も含めることができます。

    ゲージとスコアカードにクエリ結果を表示できるのは、クエリ結果に少なくとも 1 つの行が含まれ、その行にタイムスタンプを含む列と数値データを含む列が存在している場合のみです。クエリ結果には、複数の行と 2 つ以上の列を含めることができます。

    クエリの一部として時間ベースの集計を実行する場合は、次の操作を行います。

    • 期間にわたってデータを集計し、結果をタイムスタンプが降順になるように並べ替え、結果の行数を制限するようにクエリを構成します。LIMIT 句を使用するか、期間セレクタを使用して、クエリ結果の行数を制限できます。

      たとえば、次のクエリはトレースデータに対して実行され、データが 1 時間間隔で集計され、上限が適用され、結果が並べ替えられます。

      SELECT TIMESTAMP_TRUNC(start_time, HOUR) AS hour,
         COALESCE(
            JSON_VALUE(resource.attributes, '$."service.name"'),
            JSON_VALUE(attributes, '$."service.name"'),
            JSON_VALUE(attributes, '$."g.co/gae/app/module"')) AS service_name,
         status.code AS status,
         COUNT(*) AS count
      FROM `PROJECT_ID.LOCATION._Trace.Spans._AllSpans`
      GROUP BY hour, service_name, status
      ORDER BY hour DESC
      LIMIT 1000

      前の式のフィールドの意味は次のとおりです。

      このドキュメントの冒頭に示した図は、前のクエリを使用して生成されたものです。この図には、グラフの構成も示されています。

    • 時間単位を報告する列と一致するようにディメンションを設定します。たとえば、クエリで 1 時間ごとにデータを集計し、hour という名前の列を作成する場合、[ディメンション] メニューを hour に設定します。

    • クエリで集計間隔がすでに指定されているため、[Disable interval] を選択します。この例では、間隔は 1 時間です。

    • [メジャー] を数値列に設定し、関数を [なし] に設定します。

    オブザーバビリティ分析を使用して時間ベースの集計を実行する場合は、次の操作を行います。

    • 期間セレクタを構成します。これは、クエリ結果の行数に影響します。
    • 時間単位を報告する列と一致するようにディメンションを設定します。たとえば、このメニューを timestamp に設定できます。
    • [間隔] メニューで、特定の集計間隔を設定します。たとえば、このフィールドの値を 1 hour に設定します。[Automatic interval] は選択しないでください。
    • [メジャー] を数値列に設定し、sum などの関数を選択します。

ディメンションとメジャーを変更する

ディメンションとメジャーのフィールドを選択することで、グラフ化する行と列を選択できます。

  • ディメンション

    ディメンションは、タイムスタンプ、数値、または文字列の列である必要があります。デフォルトでは、ディメンションはスキーマ内の最初のタイムスタンプ ベースの列に設定されます。クエリにタイムスタンプが含まれていない場合は、最初の文字列の列がディメンションとして選択されます。[グラフを表示] パネルでディメンションの定義をカスタマイズすることもできます。ディメンションとしてタイムスタンプ列を選択すると、時間の経過とともにデータがどのように変化するかがグラフに示されます。棒グラフのディメンションとして文字列の列を選択した場合は、昇順または降順でデータを並べ替えることができます。これにより、ディメンションが辞書順で並べ替えられます。デフォルトの並べ替え順序を維持することもできます。この場合、対応する指標の値に基づいてディメンションが降順で並べ替えられます。

    タイムスタンプの間隔はデフォルトで自動的に設定されますが、カスタムの間隔を選択することもできます。自動間隔は、期間セレクタに基づいて値を変更し、サイズが類似したグループを維持します。

    期間を無効にすることもできます。これにより、クエリ内で独自の集計と期間を指定して、より複雑な分析を行うことができます。間隔を無効にすると、メジャーの集計関数が none に設定されます。ディメンション間隔が無効になっている場合、数値のメジャーのみが許可されます。

  • 測定

    [グラフを表示] パネルで複数のメジャーを選択できます。メジャーを選択する場合は、グループ化された値(count、sum、average、percentile-99 など)に実行する集計関数も選択する必要があります。たとえば、count-distinct は指定した列内の一意の値の数を返します。

    ディメンションの [Disable interval] チェックボックスをオンにすると、none 集計関数のオプションを使用できます。ディメンションが文字列値の場合、[Disable interval] チェックボックスは表示されません。ただし、メジャーの集計関数を none に設定すると、間隔も無効になります。

内訳を追加する

単一のデータ系列を別の列に基づいて複数のデータ系列に分割するには、内訳を追加します。

内訳を選択した場合は、region_name など、少数の短い、意味のあるラベルを含む列を選択します。多数の文字列や長い文字列(textPayload など)を含むフィールドは選択しないでください。

たとえば、次のグラフは、各サービスによって作成されたスパンの数と、スパン名で分類されたデータを表示しています。

Cloud Storage バケットの使用状況を示すダッシュボードの例。

トレース エグザンプラを生成して表示する

トレースデータを分析する SQL ベースのグラフを構成して、動的に生成されたエグザンプラを表示できます。エグザンプラは、指標測定に関連付けられた代表サンプル リクエストまたはスパンです。各エグザンプラはトレースにリンクしています。エグザンプラを選択すると、トレースを表示するフライアウトが開きます。

設定要件

エグザンプラを表示するには、次の条件を満たす必要があります。

  • グラフのクエリは SQL で記述され、クエリのターゲットはトレースデータです。
  • グラフで折れ線グラフまたは棒グラフの可視化が使用されている。
  • trace_id と start_time はクエリ結果の一部です。

エグザンプラを非表示にするには、グラフのツールバーに移動して、 [エグザンプラを非表示] を選択します。

システムがエグザンプラを生成する方法

システムは、インテリジェントなサンプリング選択戦略を適用して、エグザンプラを読み取り可能で関連性の高いものに保ちます。

  • AVG や PERCENTILE などの統計的尺度の場合は、未加工のスパン値がグラフの補間されたトレンドラインと比較され、サンプルが偏差プールにグループ化されます。各プールから比例サンプルがプロットされ、時間の経過とともに均等に配置されます。
  • COUNT などの頻度カウントの場合: システムは、グラフ ウィンドウの上部境界に沿ってエグザンプラを配置し、時間とデータ系列の内訳に均等に配置します。

制限事項

  • グラフに複数の時系列が表示されている場合、表示されるエグザンプラの数が減ります。
  • エグザンプラは、グラフの時間間隔で均等に分散されない場合があります。
  • Y 軸の目盛りによって、視覚的な表示が歪むことがあります。歪みは、グラフで対数 Y 軸を使用している場合や、時系列に外れ値が含まれている場合に発生する可能性が高くなります。
  • システムがエグザンプラを生成する方法を構成することはできません。

カスタム ダッシュボードにグラフを保存する

クエリからグラフを生成したら、そのグラフをカスタム ダッシュボードに保存できます。カスタム ダッシュボードでは、さまざまな種類のウィジェットを使用して、有用な情報を表示し、整理できます。また、これらのダッシュボードでは、特定のウィジェットにのみ適用されるダッシュボード レベルのフィルタである変数を定義することもできます。変数をウィジェットに適用するには、クエリを変更する必要があります。詳細については、ウィジェットに変数を適用するをご覧ください。

クエリが BigQuery エンジンで実行され、クエリ対象のリソースが同じオーナーシップ境界にない場合、ダッシュボードには SQL クエリを含むウィジェットの警告メッセージが表示されます。所有権の境界はいくつかの要因によって決まります。その 1 つは、クエリで使用されるリソースの階層です。これらの警告を回避するには、サービス境界を設定します。

グラフをダッシュボードに保存する手順は次のとおりです。

  1. Google Cloud コンソールで、 [オブザーバビリティ分析] ページに移動します。

    Observability Analytics に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Logging] の結果を選択します。

  2. クエリを実行してグラフを生成し、[ ダッシュボードに保存] をクリックします。

  3. [Save to dashboard] ダイアログで、グラフのタイトルを入力し、グラフを保存するダッシュボードを選択します。

  4. 省略可: カスタム ダッシュボードを表示するには、トーストで [ダッシュボードを表示] をクリックします。

SQL クエリで生成されたグラフを含むカスタム ダッシュボードのリストを表示するには、[ダッシュボードに保存] ボタンに移動し、[ メニュー] をクリックします。

カスタム ダッシュボードに保存されたグラフを編集する

ダッシュボードに保存した後でグラフを変更できます。詳細については、ウィジェットの構成を変更するをご覧ください。[ウィジェットを構成する] ダイアログで、次の操作を行います。

  • クエリするデータを変更します。
  • グラフの生成に使用されるクエリを編集します。
  • グラフの構成をカスタマイズして、さまざまなデータを可視化します。

制限事項

  • Google Cloud プロジェクトが Assured Workloads を使用するフォルダ内にある場合、生成したグラフはカスタム ダッシュボードに表示されません。

  • ダッシュボード レベルのフィルタは、SQL クエリから生成されたグラフには適用されません。

  • 選択した列には、NULL 以外の値を持つ行が少なくとも 1 つ必要です。

  • クエリを保存してグラフ構成をカスタマイズした場合、カスタムグラフの構成は保存されません。

  • クエリにすでに集計が含まれている場合、オブザーバビリティ分析によって自動的に適用される追加の集計が原因で、生成されるグラフが異なることがあります。

  • JSON パスをグラフに表示するには、文字列と数値にキャストする必要があります。

次のステップ