プラットフォームのログにアクセスして使用する

Artifact Registry リポジトリに対して行われたリクエストの成功と失敗に関する情報を表示できるように、Artifact Registry でプラットフォーム ログを構成します。プラットフォーム ログは Cloud Logging によって生成され、 ログ エクスプローラで表示できます。 Artifact Registry プラットフォーム ログを確認すると、失敗したリクエストのトラブルシューティング、成功したリクエストの記録の維持、アーティファクトのダウンロード数の確認に役立ちます。

プラットフォーム ログは LogEntryとしてフォーマットされます。

概要

Artifact Registry は、データプレーン API 呼び出しとコントロール プレーン API 呼び出しのプラットフォーム ログを生成します。コントロール プレーン アクションには、リポジトリの作成、リポジトリの説明の編集、リポジトリの削除などのリポジトリ管理オペレーションと、アーティファクトの一覧表示、アーティファクトのタグ付け、アーティファクトの削除などのアーティファクト管理アクションが含まれます。データプレーン アクションには、Artifact Registry リポジトリからのアーティファクトの push と pull などのオペレーションが含まれます。

どちらのタイプの呼び出しのログにも、次の情報が含まれています。

  • リクエストの詳細
  • レスポンスの詳細
  • ステータス
  • ラベル
    • メソッド名
    • リソース名
    • リソース ロケーション
    • オペレーション ID(長時間実行オペレーションの場合)
    • リポジトリ形式(リポジトリ リソースの場合)
    • リポジトリ モード(リポジトリ リソースの場合)

また、コントロール プレーン API 呼び出しのログには、次の情報が含まれています。

  • HTTP 情報
    • リクエスト メソッド
    • リクエスト URL
    • リクエスト サイズ(バイト単位)
    • ステータス
    • レスポンス サイズ(バイト単位)
    • ユーザー エージェント
    • リモート IP(リクエストを発行したクライアント IP)
    • プロトコル
    • リファラー
    • レイテンシ

Artifact Registry のプラットフォーム ログは、 ログ エクスプローラで表示できます。

始める前に

Logging API を有効にします

必要なロール

プラットフォーム ログの管理に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

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

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

プラットフォーム ロギングを有効にする

プラットフォーム ロギングは、プロジェクト全体 Google Cloud または 特定のリポジトリに対して有効にできます。

プロジェクトのプラットフォーム ロギングを有効にする

プロジェクトのプラットフォーム ロギングを有効にするには、次のコマンドを実行します。 Google Cloud

gcloud CLI

gcloud artifacts projects update --enable-platform-logs --severity=SEVERITY --location LOCATION --project PROJECT

curl

curl -v -H "Authorization: Bearer $(gcloud auth print-access-token)" -X PATCH -H "X-GFE-SSL: yes" -H "Content-Type: application/json" -d '{"name": "projects/'PROJECT'/locations/'LOCATION'/projectConfig", "platformLogsConfig": {"logging_state": "ENABLED", "severity_level": "SEVERITY"}}' "https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/projectConfig"

ここで

  • SEVERITY は、 Artifact Registry プラットフォーム ログの作成をトリガーするアクションのタイプを決定します。 INFO または ERROR を入力するか、--severity フィールドを除外して、サポートされているすべてのアクションのプラットフォーム ログを作成できます。
  • LOCATION はリポジトリのロケーションです。
  • PROJECT はプロジェクト ID です。このフラグを省略すると、 現在のプロジェクトまたは デフォルトのプロジェクトが使用されます。

リポジトリのプラットフォーム ロギングを有効にする

gcloud CLI

gcloud artifacts repositories update --enable-platform-logs --severity=SEVERITY REPOSITORY --location LOCATION --project PROJECT

curl

curl -v -H "Authorization: Bearer $(gcloud auth print-access-token)" -X PATCH \
-H "X-GFE-SSL: yes" -H "Content-Type: application/json" \
-d '{"name": "projects/'PROJECT'/locations/'LOCATION'/repositories/'REPOSITORY'", "platformLogsConfig": {"loggingState": "ENABLED", "severityLevel": "SEVERITY"}' \
"https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY?updateMask=platformLogsConfig"

ここで

  • SEVERITY は、 Artifact Registry プラットフォーム ログの作成をトリガーするアクションのタイプを決定します。 INFO または ERROR を入力するか、--severity フィールドを除外して、サポートされているすべてのアクションのプラットフォーム ログを作成できます。
  • REPOSITORY は、 Artifact Registry 内のリポジトリの名前です。
  • LOCATION はリポジトリのロケーションです。
  • PROJECT はプロジェクト ID です。このフラグを省略すると、 現在のプロジェクトまたは デフォルトのプロジェクトが使用されます。

プラットフォーム ロギングの構成を確認する

Artifact Registry プラットフォーム ロギングがプロジェクトまたは特定のリポジトリで有効になっているかどうかを確認できます。

プロジェクトのプラットフォーム ロギングを確認する

Artifact Registry プラットフォーム ロギングがプロジェクトで有効になっているかどうかを確認するには、次のコマンドを実行します。

gcloud CLI

gcloud artifacts projects describe --location LOCATION --project PROJECT

curl

curl -v -H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/projectConfig"

ここで

  • LOCATION はリポジトリのロケーションです。
  • PROJECT はプロジェクト ID です。このフラグを省略すると、 現在のプロジェクトまたは デフォルトのプロジェクトが使用されます。

出力は次のようになります。

{
  "name": "projects/PROJECT/locations/{"<var>LOCATION</var>"}}/projectConfig"
  "platformLogsConfig": {
    "loggingState": "ENABLED"
    "severityLevel": "INFO"
  }
}

リポジトリのプラットフォーム ロギングを確認する

Artifact Registry プラットフォーム ロギングがリポジトリで有効になっているかどうかを確認するには、次のコマンドを実行します。

gcloud CLI

gcloud artifacts repositories describe REPOSITORY --location LOCATION --project PROJECT

curl

curl -v -H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY"

ここで

  • REPOSITORY はリポジトリの名前です。
  • LOCATION はリポジトリのロケーションです。
  • PROJECT はプロジェクト ID です。このフラグを省略すると、 現在のプロジェクトまたは デフォルトのプロジェクトが使用されます。

出力は次のようになります。

{
  "name": "projects/PROJECT/locations/LOCATION/repositories/REPOSITORY"
  "platformLogsConfig": {
    "loggingState": "ENABLED",
    "severityLevel": "INFO"
  }
}

プラットフォーム ロギングを無効にする

プラットフォーム ロギングは、プロジェクト全体または特定のリポジトリに対して無効にできます。 Google Cloud

プロジェクトのプラットフォーム ロギングを無効にする

プロジェクトのプラットフォーム ロギングを無効にするには、次のコマンドを実行します。 Google Cloud

gcloud CLI

gcloud artifacts projects update --disable-platform-logs --location LOCATION --project PROJECT

curl

curl -v -H "Authorization: Bearer $(gcloud auth print-access-token)" -X PATCH \
-H "X-GFE-SSL: yes" -H "Content-Type: application/json" \
-d '{"name": "projects/'PROJECT'/locations/'LOCATION'/projectConfig", "platformLogsConfig": {"logging_state": "DISABLED"}}' \
"https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/projectConfig"

ここで

  • LOCATION はリポジトリのロケーションです。
  • PROJECT はプロジェクト ID です。このフラグを省略すると、 現在のプロジェクトまたは デフォルトのプロジェクトが使用されます。

リポジトリのプラットフォーム ロギングを無効にする

リポジトリのプラットフォーム ロギングを無効にするには、次のコマンドを実行します。

gcloud CLI

gcloud artifacts repositories update --disable-platform-logs REPOSITORY --location LOCATION --project PROJECT

curl

curl -v -H "Authorization: Bearer $(gcloud auth print-access-token)" -X PATCH \
-H "X-GFE-SSL: yes" -H "Content-Type: application/json" \
-d '{"name": "projects/'PROJECT'/locations/'LOCATION'/repositories/'REPOSITORY'", "platformLogsConfig": {"loggingState": "DISABLED", "severityLevel": "INFO"}' \
"https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY?updateMask=platformLogsConfig"

ここで

  • REPOSITORY は、 Artifact Registry 内のリポジトリの名前です。
  • LOCATION はリポジトリのロケーションです。
  • PROJECT はプロジェクト ID です。このフラグを省略すると、 現在のプロジェクトまたは デフォルトのプロジェクトが使用されます。

プラットフォーム ロギングの構成をクリアする

プロジェクトまたはリポジトリのプラットフォーム ロギングの構成をクリアできます。クリア コマンドを実行すると、プロジェクトまたはリポジトリの loggingStateseverityLevel が null に設定されます。

プロジェクトの構成をクリアすると、プラットフォーム ロギングがすでに有効になっているリポジトリのみがプラットフォーム ログを生成します。 リポジトリの構成をクリアすると、そのリポジトリはプロジェクトからプラットフォーム ロギングの構成を継承します。

プロジェクトのプラットフォーム ロギングの構成をクリアする

プロジェクトのプラットフォーム ロギングの構成をクリアするには、次のコマンドを実行します。 Google Cloud

gcloud CLI

gcloud artifacts projects update --clear-platform-logs --location LOCATION --project PROJECT

curl

curl -v -H "Authorization: Bearer $(gcloud auth print-access-token)" -X PATCH \
-H "X-GFE-SSL: yes" -H "Content-Type: application/json" \
-d '{"name": "projects/'PROJECT'/locations/'LOCATION'/projectConfig", "platformLogsConfig": {}}' \
"https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/projectConfig"

ここで

  • LOCATION はリポジトリのロケーションです。
  • PROJECT はプロジェクト ID です。このフラグを省略すると、 現在のプロジェクトまたは デフォルトのプロジェクトが使用されます。

リポジトリのプラットフォーム ロギングの構成をクリアする

リポジトリのプラットフォーム ロギングの構成をクリアするには、次のコマンドを実行します。

gcloud CLI

gcloud artifacts repositories update --clear-platform-logs REPOSITORY --location LOCATION --project PROJECT

curl

curl -v -H "Authorization: Bearer $(gcloud auth print-access-token)" -X PATCH \
-H "X-GFE-SSL: yes" -H "Content-Type: application/json" \
-d '{"name": "projects/'PROJECT'/locations/'LOCATION'/repositories/'REPOSITORY'", "platformLogsConfig": {}' \
"https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY?updateMask=platformLogsConfig"

ここで

  • REPOSITORY は、 Artifact Registry 内のリポジトリの名前です。
  • LOCATION はリポジトリのロケーションです。
  • PROJECT はプロジェクト ID です。このフラグを省略すると、 現在のプロジェクトまたは デフォルトのプロジェクトが使用されます。

プラットフォーム ログを表示する

プラットフォーム ログを表示するには、次の操作を行います。

  1. コンソールで [ログ エクスプローラ] ページを開きます。 Google Cloud

    [ログ エクスプローラ] ページを開く

  2. クエリペインで、 [ログ名] プルダウンをクリックします。

  3. requests」と入力し、[requests] チェックボックスを [Artifact Registry] ヘッダーの下でオンにします。

  4. [適用] をクリックします。

    Logging の [クエリ結果] ペインに、データプレーンとコントロール プレーンの API 呼び出しのログが表示されます。

  5. ログの内容を表示するには、クエリ結果に表示されているログの横にある矢印をクリックします。

ログ エクスプローラでのクエリ結果の解釈の詳細については、 クエリ結果を表示するをご覧ください。

オブザーバビリティ分析でプラットフォーム ログを分析する

オブザーバビリティ分析 を使用すると、Artifact Registry ログに対して SQL クエリを実行して、 ログを詳細に分析できます。このセクションでは、一般的なユースケースのサンプルクエリをいくつか紹介します。これらのクエリを調整して、LogEntry 構造内のさまざまなフィールドでフィルタすることで、Artifact Registry の使用状況の他の 側面を分析できます。

オブザーバビリティ分析の使用を開始する前に、次の操作を行います。

  1. ログバケットを オブザーバビリティ分析を使用するように構成します。

  2. オブザーバビリティ分析を使用するように Identity and Access Management のロールと権限を構成します

次に、 カスタムクエリを入力して実行するの手順に沿って操作します。 SQL の [Query] ペインが表示されたら、次のサンプルクエリのいずれかを入力します。

例: ダウンロードされたボリューム別の上位 10 件の IP アドレス

このクエリは、Artifact Registry プラットフォーム ログを評価し、過去 7 日間にリポジトリから最も多くのデータをダウンロードした上位 10 件の IP アドレスを返します。

SELECT
  http_request.remote_ip AS client_ip,
  SUM(http_request.response_size) AS total_download_bytes
FROM
  `YOUR_PROJECT.YOUR_LOCATION.YOUR_BUCKET._AllLogs`
WHERE
  log_id = "artifactregistry.googleapis.com/requests"
  AND JSON_VALUE(resource.labels.repository_id) IS NOT NULL
  AND http_request.request_method = "GET"
  AND http_request.status >= 200 AND http_request.status < 300
  AND http_request.response_size > 0
  AND CAST(http_request.response_size AS INT64) > 0
  AND timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
GROUP BY
  client_ip
ORDER BY
  total_download_bytes DESC
LIMIT 10;

例: リポジトリごとのリクエスト数

このクエリは、Artifact Registry プラットフォーム ログを評価し、過去 24 時間に各リポジトリに対して行われたリクエストの数を返します。

SELECT
  JSON_VALUE(resource.labels.repository_id) AS repository,
  JSON_VALUE(resource.labels.location) AS location,
  COUNT(*) AS request_count
FROM
  `YOUR_PROJECT.YOUR_LOCATION.YOUR_BUCKET._AllLogs`
WHERE
  log_id = "artifactregistry.googleapis.com/requests"
  AND JSON_VALUE(resource.labels.repository_id) IS NOT NULL
  AND timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
GROUP BY
  repository,
  location
ORDER BY
  request_count DESC;

例: 失敗したリクエスト

このクエリは、Artifact Registry プラットフォーム ログを評価し、過去 1 時間に失敗した最新の 10 件のリクエストの詳細を一覧表示します。

SELECT
  timestamp,
  http_request.status,
  http_request.request_method,
  http_request.request_url,
  http_request.remote_ip,
  JSON_VALUE(resource.labels.repository_id) AS repository,
  JSON_VALUE(labels.resource_name) AS artifact_name,
  trace
FROM
  `YOUR_PROJECT.YOUR_LOCATION.YOUR_BUCKET._AllLogs`
WHERE
  log_id = "artifactregistry.googleapis.com/requests"
  AND JSON_VALUE(resource.labels.repository_id) IS NOT NULL
  AND http_request.status >= 400
  AND timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)
ORDER BY
  timestamp DESC
LIMIT 10;