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

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 プラットフォーム ログの作成をトリガーするアクションのタイプを決定します。INFOERROR を入力するか、--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 プラットフォーム ログの作成をトリガーするアクションのタイプを決定します。INFOERROR を入力するか、--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」と入力し、[Artifact Registry] ヘッダーの [requests] チェックボックスをオンにします。

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

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

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

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

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

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

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

  1. Observability Analytics を使用するようにログバケットを構成します。

  2. Observability Analytics を使用するように Identity and Access Management のロールと権限を構成します。

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

例: ダウンロードされた容量が多い上位 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;