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

このドキュメントでは、Log Analytics のクエリ結果をグラフ化する方法について説明します。これにより、ログデータのパターンと傾向を識別できます。ログ分析では、SQL クエリを使用してログの検索と集計を行い、有用な分析情報を生成できます。

クエリを実行した後、クエリ結果をテーブルで表示したり、グラフに変換したりできます。また、クエリとその可視化をダッシュボードに保存することもできます。たとえば、ログが生成する重大度の種類を確認するには、過去 12 時間にわたって生成されたログの数を表示するグラフを作成し、ログを severity で分類します。次のスクリーンショットは、さまざまな重大度の種類に分割されたデータポイントを示しています。

重大度別の内訳を示すグラフの例。

始める前に

このセクションでは、Log Analytics を使用する前に完了する必要がある手順について説明します。

ログバケットを構成する

ログバケットがログ分析を使用できるようにアップグレードされていることを確認します。

  1. Google Cloud コンソールで、[ログストレージ] ページに移動します。

    [ログストレージ] に移動

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

  2. クエリを実行するログビューを含むログバケットごとに、[ログ分析を使用可能] 列に [開く] が表示されていることを確認します。[アップグレード] が表示されたら、[アップグレード] をクリックしてダイアログを完了します。

IAM のロールと権限を構成する

このセクションでは、ログ分析の使用に必要な IAM ロールまたは権限について説明します。

  • Log Analytics の使用とログビューのクエリ実行に必要な権限を取得するには、プロジェクトに対する次の IAM ロールの付与を管理者に依頼してください。

    • _Required および _Default のログバケットに対してクエリを実行するには:   ログ閲覧者roles/logging.viewer
    • プロジェクト内のすべてのログビューをクエリするには: ログビューアクセサー roles/logging.viewAccessor

    プリンシパルを特定のログビューに制限するには、プロジェクト レベルで行われたログビュー アクセサー ロールの付与に IAM 条件を追加するか、ログビューのポリシー ファイルに IAM バインディングを追加します。詳細については、ログビューへのアクセスを制御するをご覧ください。

    これらの権限は、[ログ エクスプローラ] ページでログエントリを表示するために必要な権限と同じです。ユーザー定義バケットに対するビューのクエリ実行、または _Default ログバケットの _AllLogs ビューのクエリ実行のために必要な追加のロールについて詳しくは、Cloud Logging のロールをご覧ください。

  • グラフの作成に必要な権限を取得するには、プロジェクトに対する Monitoring 編集者 roles/monitoring.editor)の IAM ロールを付与するよう管理者に依頼してください。

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

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

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

  1. Google Cloud コンソールで、[ログ分析] ページに移動します。

    [ログ分析] に移動

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

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

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

    • : 表形式のみ。

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

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

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

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

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

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

グラフの種類を変更する

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

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

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

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

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

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

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

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

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

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

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

      たとえば、次のクエリは、データを 1 時間単位で集計し、上限を適用して結果を並べ替えます。

      SELECT TIMESTAMP_TRUNC(timestamp, HOUR) AS hour, severity, COUNT(*) AS count
      FROM `TABLE_NAME_OF_LOG_VIEW`
      WHERE severity IS NOT NULL AND severity = "DEFAULT"
      GROUP BY hour,severity
      ORDER BY hour DESC
      LIMIT 10
      
    • 時間単位を報告する列と一致するように [ディメンション] を設定します。たとえば、クエリで 1 時間ごとにデータを集計し、hour という名前の列を作成する場合、[ディメンション] メニューを hour に設定します。

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

    • [測定] を数値列に設定し、関数を [none] に設定します。

    Log Analytics を使用して時間ベースの集計を行う場合は、次の操作を行います。

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

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

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

  • ディメンション

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

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

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

  • 測定

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

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

内訳を追加する

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

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

たとえば、ディメンション フィールドがタイプメジャー フィールドが行数をカウントする内訳フィールドが重要度に設定されている、次のグラフ構成をご覧ください。

内訳を追加するグラフ構成の例。

次のグラフは、内訳が追加されたグラフの例です。

重大度別の内訳を含むグラフの例。

前のスクリーンショットでは、積み重ねられたデータ系列が表示され、ここではリソースタイプ k8s_container が異なる severity タイプに分割されています。これにより、特定のリソースによって重大度タイプごとに生成されたログの数を特定できます。

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

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

たとえば、Cloud Storage バケットの使用状況の詳細を示すダッシュボードを作成できます。

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

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

  1. Google Cloud コンソールで、[ログ分析] ページに移動します。

    [ログ分析] に移動

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

  2. クエリを実行してグラフを生成し、[グラフ] タブで [グラフを保存] をクリックします。

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

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

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

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

ダッシュボードに保存されているログ分析 SQL クエリによって生成されたグラフを編集するには、ウィジェットの構成を変更するをご覧ください。[ウィジェットを構成する] ダイアログでは、グラフの生成に使用されるクエリを編集できます。また、グラフの構成をカスタマイズしてさまざまなデータを可視化することもできます。

制限事項

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

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

サンプルクエリ

このセクションでは、クエリ結果をグラフ化する SQL クエリの例を示します。ログからより有用な分析情報を得るには、グラフ構成をカスタマイズします。サンプルクエリを使用するには、次のようにします。

  1. Google Cloud コンソールで、[ログ分析] ページに移動します。

    [ログ分析] に移動

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

  2. クエリを実行するログビューのテーブル名を特定します。

    この名前を特定するには、[ログビュー] リストに移動し、ログビューを見つけて、[クエリ] を選択します。[クエリ] ペインには、クエリ対象のログビューのテーブル名を含むデフォルトのクエリが入力されます。テーブル名の形式は project_ID.region.bucket_ID.view_ID です。

    デフォルトのクエリにアクセスする方法については、ログビューをクエリするをご覧ください。

  3. TABLE_NAME_OF_LOG_VIEW は、クエリを実行するログビューのテーブル名に置き換えてから、クエリをコピーします。

  4. クエリを [クエリ] ペインに貼り付けて [クエリを実行] をクリックします。

ログエントリをロケーションと重大度でグラフ化する

次のクエリでは、ロケーション キャストを文字列として、locationseverity を選択します。

SELECT
  CAST(JSON_VALUE(resource.labels.location) AS STRING) AS location,
  severity,
FROM
  `TABLE_NAME_OF_LOG_VIEW`

グラフとグラフ構成の例は次のとおりです。

ロケーションと重大度に対してログエントリをグラフ化するグラフの例。

前のスクリーンショットでは、グラフ構成が次のグラフ構成をとります。

  • グラフの種類: 棒グラフ、水平方向
  • ディメンション: location(上限 10)
  • メジャー: 行をカウントする
  • 内訳: severity(上限 5)

BigQuery データアクセス監査ログをグラフ化する

次のクエリは、BigQuery data_access 監査ログをフィルタし、user_emailipauth_permissionjob_execution_project などの特定のフィールドを選択します。たとえば、各プリンシパルの BigQuery API の使用頻度の推移位を可視化するグラフを作成できます。

SELECT
  timestamp,
  proto_payload.audit_log.authentication_info.principal_email as user_email,
  proto_payload.audit_log.request_metadata.caller_ip as ip,
  auth.permission as auth_permission,
  auth.granted as auth_granted,
  JSON_VALUE(data_access.resource.labels.project_id) AS job_execution_project,
  SPLIT(proto_payload.audit_log.resource_name, '/')[SAFE_OFFSET(1)] AS referenced_project,
  SPLIT(proto_payload.audit_log.resource_name, '/')[SAFE_OFFSET(3)] AS referenced_dataset,
  SPLIT(proto_payload.audit_log.resource_name, '/')[SAFE_OFFSET(5)] AS referenced_table
FROM `TABLE_NAME_OF_LOG_VIEW` as data_access,
  UNNEST(proto_payload.audit_log.authorization_info) AS auth
WHERE
  log_id="cloudaudit.googleapis.com/data_access"
  AND data_access.resource.type = 'bigquery_dataset'

グラフとグラフ構成の例は次のとおりです。

BigQuery データアクセス監査ログの例のグラフ

前のスクリーンショットでは、グラフ構成が次のグラフ構成をとります。

  • グラフの種類: 棒グラフ、垂直方向
  • ディメンション: user_email(上限 5)
  • メジャー: 行をカウントする
  • 内訳: auth_permission(上限 5)

制限事項

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

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

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

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

次のステップ