이 튜토리얼에서는 Cloud 감사 로그를 사용하여 Cloud Storage의 이벤트를 인증되지 않은 Cloud Run 서비스로 Eventarc를 사용해 라우팅할 때 발생하는 런타임 오류 문제를 해결하는 방법을 설명합니다.
Artifact Registry 표준 저장소 만들기
컨테이너 이미지를 저장할 Artifact Registry 표준 저장소를 만듭니다.
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$REGION
REPOSITORY
를 저장소의 고유한 이름으로 바꿉니다.
Cloud Storage 버킷 만들기
두 리전 각각에 Cloud Run 서비스의 이벤트 소스로 Cloud Storage 버킷을 만듭니다.
us-east1
에 버킷을 만듭니다.export BUCKET1="troubleshoot-bucket1-PROJECT_ID" gcloud storage buckets create gs://${BUCKET1} --location=us-east1
us-west1
에 버킷을 만듭니다.export BUCKET2="troubleshoot-bucket2-PROJECT_ID" gcloud storage buckets create gs://${BUCKET2} --location=us-west1
이벤트 소스가 생성되면 Cloud Run에 이벤트 수신자 서비스를 배포합니다.
이벤트 수신자 배포
이벤트를 수신하고 로깅하는 Cloud Run 서비스를 배포합니다.
GitHub 저장소를 클론하여 코드 샘플을 검색합니다.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git cd golang-samples/eventarc/audit_storage
자바
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git cd java-docs-samples/eventarc/audit-storage
.NET
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git cd dotnet-docs-samples/eventarc/audit-storage
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git cd nodejs-docs-samples/eventarc/audit-storage
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/eventarc/audit-storage
다음과 같이 구성된 이 튜토리얼의 코드를 검토합니다.
HTTP
POST
요청 내에서 들어오는 이벤트를 CloudEvent로 수신하는 이벤트 핸들러:Go
자바
.NET
Node.js
Python
이벤트 핸들러를 사용하는 서버:
Go
자바
.NET
Node.js
Python
서비스의 작동 환경을 정의하는 Dockerfile입니다. Dockerfile의 콘텐츠는 언어별로 다릅니다.
Go
자바
.NET
Node.js
Python
Cloud Build로 컨테이너 이미지를 빌드하고 해당 이미지를 Artifact Registry에 업로드합니다.
export PROJECT_ID=$(gcloud config get-value project) export SERVICE_NAME=troubleshoot-service gcloud builds submit --tag $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
컨테이너 이미지를 Cloud Run에 배포합니다.
gcloud run deploy ${SERVICE_NAME} \ --image $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1 \ --allow-unauthenticated
배포가 성공하면 명령줄에 서비스 URL이 표시됩니다.
트리거 만들기
Cloud Run 서비스를 배포한 후 감사 로그를 통해 Cloud Storage의 이벤트를 리슨하도록 트리거를 설정합니다.
Cloud 감사 로그를 사용하여 라우팅되는 Cloud Storage 이벤트를 리슨하는 Eventarc 트리거를 만듭니다.
gcloud eventarc triggers create troubleshoot-trigger \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com
그러면
troubleshoot-trigger
라는 트리거가 생성됩니다.troubleshoot-trigger
가 생성되었는지 확인하려면 다음을 실행합니다.gcloud eventarc triggers list
출력은 다음과 비슷하게 표시됩니다.
NAME: troubleshoot-trigger TYPE: google.cloud.audit.log.v1.written DESTINATION: Cloud Run service: troubleshoot-service ACTIVE: By 20:03:37 LOCATION: us-central1
이벤트 생성 및 확인
서비스가 성공적으로 배포되었고 Cloud Storage에서 이벤트를 수신할 수 있는지 확인합니다.
파일을 만들고
BUCKET1
스토리지 버킷에 업로드합니다.echo "Hello World" > random.txt gcloud storage cp random.txt gs://${BUCKET1}/random.txt
로그를 모니터링하여 서비스에서 이벤트가 수신되었는지 확인합니다. 로그 항목을 보려면 다음 단계를 완료하세요.
로그 항목을 필터링하고 JSON 형식으로 출력을 반환합니다.
gcloud logging read "resource.labels.service_name=troubleshoot-service \ AND textPayload:random.txt" \ --format=json
다음과 같은 로그 항목을 찾습니다.
"textPayload": "Detected change in Cloud Storage bucket: ..."
처음에는 로그 항목이 반환되지 않습니다. 이는 조사해야 하는 설정에 문제가 있음을 나타냅니다.
문제 조사
서비스에서 이벤트를 수신하지 않는 이유를 조사하는 프로세스를 진행합니다.
초기화 시간
트리거는 즉시 생성되지만 트리거에서 이벤트를 전파하고 필터링하는 데 최대 2분이 걸릴 수 있습니다. 다음 명령어를 실행하여 트리거가 활성 상태인지 확인합니다.
gcloud eventarc triggers list
출력에 트리거 상태가 표시됩니다. 다음 예시에서 troubleshoot-trigger
는 14:16:56에 활성화됩니다.
NAME TYPE DESTINATION_RUN_SERVICE ACTIVE
troubleshoot-trigger google.cloud.audit.log.v1.written troubleshoot-service By 14:16:56
트리거가 활성화되면 스토리지 버킷에 파일을 다시 업로드합니다. 이벤트는 Cloud Run 서비스 로그에 기록됩니다. 서비스가 이벤트를 수신하지 않는 경우 이벤트 크기와 관련이 있을 수 있습니다.
감사 로그
이 튜토리얼에서는 Cloud Storage 이벤트가 Cloud 감사 로그를 사용하여 라우팅되고 Cloud Run으로 전송됩니다. Cloud Storage에 감사 로그가 사용 설정되어 있는지 확인합니다.
Google Cloud 콘솔에서 감사 로그 페이지로 이동합니다.
- Google Cloud Storage 체크박스를 선택합니다.
- 관리자 읽기, 데이터 읽기, 데이터 쓰기 로그 유형이 선택되어 있는지 확인합니다.
Cloud 감사 로그를 사용 설정한 후에는 파일을 스토리지 버킷에 다시 업로드하고 로그를 확인합니다. 서비스가 여전히 이벤트를 수신하지 않으면 트리거 위치와 관련이 있을 수 있습니다.
트리거 위치
서로 다른 위치에 여러 리소스가 있을 수 있으며, Cloud Run 대상과 동일한 리전에 있는 소스의 이벤트를 필터링해야 합니다. 자세한 내용은 Eventarc에서 지원되는 위치와 Eventarc 위치 이해를 참조하세요.
이 튜토리얼에서는 Cloud Run 서비스를 us-central1
에 배포했습니다. eventarc/location
을 us-central1
으로 설정했으므로 동일한 위치에 트리거도 만들었습니다.
그러나 us-east1
및 us-west1
위치에 두 개의 Cloud Storage 버킷을 만들었습니다. 이러한 위치에서 이벤트를 수신하려면 해당 위치에 Eventarc 트리거를 만들어야 합니다.
us-east1
에 있는 Eventarc 트리거를 만듭니다.
기존 트리거의 위치를 확인합니다.
gcloud eventarc triggers describe troubleshoot-trigger
위치 및 리전을
us-east1
으로 설정합니다.gcloud config set eventarc/location us-east1 gcloud config set run/region us-east1
컨테이너 이미지를 빌드하고 Cloud Run에 배포하여 다시 이벤트 수신자를 배포합니다.
us-east1
에 있는 새 트리거를 만듭니다.gcloud eventarc triggers create troubleshoot-trigger-new \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com
트리거가 생성되었는지 확인합니다.
gcloud eventarc triggers list
트리거가 이벤트를 라우팅하기 시작하기 전에 초기화하는 데 최대 2분이 걸릴 수 있습니다.
트리거가 이제 올바르게 배포되었는지 확인하려면 이벤트를 생성하고 확인합니다.
발생할 수 있는 기타 문제
Eventarc를 사용할 때 다른 문제가 발생할 수 있습니다.
이벤트 크기
전송하는 이벤트가 이벤트 크기 한도를 초과해서는 안 됩니다.
이전에 이벤트를 전달한 트리거의 작동이 중지됨
소스가 이벤트를 생성하는지 확인합니다. Cloud 감사 로그를 확인하고 모니터링되는 서비스가 로그를 내보내는지 확인합니다. 로그가 기록되지만 이벤트가 전송되지 않으면 지원팀에 문의합니다.
트리거 이름이 동일한 Pub/Sub 주제가 있는지 확인합니다. Eventarc는 Pub/Sub를 전송 계층으로 사용하고 기존 Pub/Sub 주제를 사용하거나 자동으로 주제를 생성하고 관리합니다.
- 트리거를 나열하려면
gcloud eventarc triggers list
를 참조하세요. Pub/Sub 주제를 나열하려면 다음을 실행합니다.
gcloud pubsub topics list
Pub/Sub 주제 이름에 생성된 트리거의 이름이 포함되어 있는지 확인합니다. 예를 들면 다음과 같습니다.
name: projects/PROJECT_ID/topics/eventarc-us-east1-troubleshoot-trigger-new-123
Pub/Sub 주제가 누락된 경우 특정 제공업체, 이벤트 유형, Cloud Run 대상에 대한 트리거를 다시 만듭니다.
- 트리거를 나열하려면
서비스에 트리거가 구성되었는지 확인합니다.
Google Cloud 콘솔에서 서비스 페이지로 이동합니다.
서비스 이름을 클릭하여 서비스 세부정보 페이지를 엽니다.
트리거 탭을 클릭합니다.
서비스와 연결된 Eventarc 트리거가 나열됩니다.
Pub/Sub 측정항목 유형을 사용하여 Pub/Sub 주제 및 구독의 상태를 확인합니다.
subscription/dead_letter_message_count
측정항목을 사용하여 전달된 전송할 수 없는 메시지를 모니터링할 수 있습니다. 이 측정항목에서는 Pub/Sub가 구독에서 전달하는 전송할 수 없는 메시지 수를 보여줍니다.메시지가 주제에 게시되지 않으면 Cloud 감사 로그를 확인하고 모니터링되는 서비스가 로그를 내보내는지 확인합니다. 로그가 기록되지만 이벤트가 전송되지 않으면 지원팀에 문의합니다.
subscription/push_request_count
측정항목을 사용하고response_code
및subcription_id
로 측정항목을 그룹화하여 푸시 구독을 모니터링할 수 있습니다.푸시 오류가 보고되면 Cloud Run 서비스 로그를 확인합니다. 수신 엔드포인트가 OK가 아닌 상태 코드를 반환하면 Cloud Run 코드가 예상대로 작동하지 않는다는 의미이며 지원팀에 문의해야 합니다.
자세한 내용은 측정항목 임곗값 알림 정책 만들기를 참조하세요.