플랫폼 로그 액세스 및 사용

Artifact Registry에 플랫폼 로그를 구성하여 Artifact Registry 저장소에 대한 성공한 요청과 실패한 요청에 관한 정보를 볼 수 있습니다. 플랫폼 로그는 Cloud Logging에 의해 생성되며 로그 탐색기에서 볼 수 있습니다. Artifact Registry 플랫폼 로그를 검토하여 실패한 요청을 해결하고, 성공한 요청 기록을 유지하고, 아티팩트의 다운로드 수를 확인할 수 있습니다.

플랫폼 로그는 LogEntry로 형식이 지정됩니다.

개요

Artifact Registry는 데이터 영역 API 호출 및 컨트롤 플레인 API 호출에 대한 플랫폼 로그를 생성합니다. 컨트롤 플레인 작업에는 저장소 생성, 저장소 설명 수정, 저장소 삭제와 같은 저장소 관리 작업과 아티팩트 나열, 아티팩트 태그 지정, 아티팩트 삭제와 같은 아티팩트 관리 작업이 포함됩니다. 데이터 영역 작업에는 Artifact Registry 저장소에서 아티팩트를 푸시하고 가져오는 등의 작업이 포함됩니다.

두 유형의 통화 로그에는 다음 정보가 포함됩니다.

  • 요청 세부정보
  • 대답 세부정보
  • 상태
  • 라벨
    • 메서드 이름
    • 리소스 이름
    • 리소스 위치
    • 작업 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. 요청을 입력한 다음 Artifact Registry 헤더 아래에서 요청 체크박스를 선택합니다.

  4. 적용을 클릭합니다.

    로깅은 데이터 플레인 및 컨트롤 플레인 API 호출의 로그를 쿼리 결과 창에 표시합니다.

  5. 로그 콘텐츠를 보려면 쿼리 결과에 나열된 로그 옆에 있는 화살표를 클릭합니다.

로그 탐색기에서 쿼리 결과를 이해하는 방법에 대한 자세한 내용은 쿼리 결과 보기를 참고하세요.

모니터링 가능성 분석으로 플랫폼 로그 분석

Observability Analytics를 사용하여 Artifact Registry 로그에 대해 SQL 쿼리를 실행하여 로그를 더 자세히 분석할 수 있습니다. 이 섹션에는 일반적인 사용 사례에 대한 몇 가지 샘플 쿼리가 포함되어 있습니다. LogEntry 구조 내에서 다른 필드를 필터링하여 Artifact Registry 사용의 다른 측면을 분석하도록 이러한 쿼리를 조정할 수 있습니다.

모니터링 가능성 분석을 사용하기 전에 다음을 수행하세요.

  1. 모니터링 가능성 분석을 사용하도록 로그 버킷을 구성합니다.

  2. 관측 가능성 분석을 사용하려면 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;