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

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

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

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

始める前に

このセクションでは、ログ分析を使用する前に完了しておく必要のある手順について説明します。

ログバケットを構成する

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

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

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

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

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

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

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

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

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

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

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

  • 分析ビューへのクエリ実行に必要な権限を取得するには、プロジェクトに対する Observability Analytics ユーザーroles/observability.analyticsUser)IAM ロールを付与するよう管理者に依頼してください。

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

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

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

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

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

    [ログ分析] に移動

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

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

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

    • : 表形式のみ。

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

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

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

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

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

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

グラフの種類を変更する

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

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

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

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

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

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

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

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

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

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

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

      たとえば、次のクエリはログビューに対して実行され、データが時間単位で集計され、上限が適用され、結果が並べ替えられます。

      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 に設定します。

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

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

    ログ分析を使用して時間ベースの集計を実行する場合は、次の操作を行います。

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

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

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

  • ディメンション

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

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

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

  • メジャー

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

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

内訳を追加する

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

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

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

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

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

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

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

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

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

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

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

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

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

    [ログ分析] に移動

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

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

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

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

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 パスをグラフに表示するには、文字列と数値にキャストする必要があります。

次のステップ