점프 스타트 솔루션: 로그 분석 파이프라인

Last reviewed 2023-04-10 UTC

이 문서는 애플리케이션 데이터의 스트림이 여러 소스에서 캡처되고 분석에 제공되는 방법을 보여주는 로그 분석 파이프라인 점프 스타트 솔루션을 이해하고, 배포하고, 사용하는 데 도움이 되는 가이드입니다.

애플리케이션에서 웹 로그를 추출 및 분석하도록 솔루션을 배포하면 다음을 수행할 수 있습니다.

  • 애플리케이션 리소스에 대한 액세스 추적하기
  • 애플리케이션에서 사용 패턴을 식별하고 대응하기
  • 성능 문제를 분석하고 해결하기

로깅 구현 및 권장사항에 대한 자세한 내용은 리소스 모니터링 및 로깅을 참조하세요.

이 문서는 애플리케이션 로그 데이터 처리 및 분석 경험이 있는 개발자를 대상으로 작성되었습니다. 여기에서는 사용자가 Google Cloud는 아니더라도 기본 클라우드 개념에 익숙하다고 가정합니다. Terraform 사용 경험이 도움이 됩니다.

목표

이 솔루션 가이드는 다음을 수행하는 데 도움이 됩니다.

  • 클라우드 및 온프레미스 소스에서부터 다양한 Cloud Storage 옵션과 분석 워크플로에 이르기까지 데이터가 어떻게 전송되는지 알아보기
  • Cloud Run에서 실행되는 애플리케이션에서 샘플 웹 로그를 캡처, 저장, 처리하는 예시 파이프라인 배포하기
  • BigQuery 테이블에 저장된 데이터를 쿼리하고 Looker Studio 보고서에서 데이터를 시각화하여 로그 정보 분석하기

아키텍처

이 솔루션에는 로그인, 요청, 데이터 수정 등 웹 애플리케이션과의 사용자 상호작용을 캡처하는 샘플 웹 로그가 포함됩니다. 다음은 솔루션 아키텍처를 보여주는 다이어그램입니다.

로그 분석 파이프라인 점프 스타트 솔루션 다이어그램

요청 흐름

다음은 이 솔루션이 배포하는 로그 분석 파이프라인의 요청 처리 흐름입니다. 흐름의 단계에는 앞의 아키텍처 다이어그램에 표시된 대로 번호가 지정되어 있습니다.

  1. Cloud Run에 배포된 웹 서버는 사용자가 웹 서버에 배포된 웹사이트를 방문할 때 웹 로그를 생성합니다. 웹 로그는 Cloud Logging으로 자동 전송됩니다.

  2. Cloud Logging은 Cloud Logging 싱크 구성의 일정에 따라 BigQuery의 지정된 테이블로 웹 로그를 라우팅합니다.

  3. 다른 클라우드 또는 온프레미스에서 실행되는 애플리케이션은 Cloud Storage 버킷에 웹 로그 파일을 업로드합니다(이 배포에는 JSON 형식의 샘플 웹 로그 파일이 포함된 텍스트 파일이 포함됩니다).

  4. BigQuery Data Transfer Service는 BigQuery Data Transfer Service 전송 구성을 기반으로 웹 로그 파일을 BigQuery에 지정된 테이블로 주기적으로 전송합니다.

  5. 테이블의 웹 로그에 대한 쿼리를 실행하거나 Looker Studio를 사용하여 웹 로그를 시각화하세요.

구성요소 및 구성

아키텍처에는 다음 구성요소가 포함됩니다.

구성요소 제품 설명 이 솔루션의 용도
Cloud Run 서버리스 컨테이너화된 앱을 빌드하고 배포할 수 있는 완전 관리형 서비스입니다. Google Cloud에서 확장과 기타 인프라 태스크를 처리하여 코드의 비즈니스 로직에 집중할 수 있습니다. 애플리케이션을 호스팅하고 웹 로그를 실행하고 생성할 수 있도록 합니다.
Cloud Logging Google Cloud와 다른 클라우드의 로깅 데이터 및 이벤트를 저장, 검색, 분석, 모니터링하고 알림을 받을 수 있는 서비스입니다. 일정에 따라 Cloud Run에서 호스팅되는 애플리케이션의 웹 로그를 데이터 웨어하우스로 라우팅합니다.
BigQuery 머신러닝 기능이 내장된 확장성이 우수한 완전 관리형 데이터 웨어하우스입니다. 애플리케이션에서 생성한 로그를 저장하고 데이터 분석을 위한 도구를 제공합니다.
BigQuery Data Transfer Service 클라우드 또는 온프레미스 소스의 데이터를 BigQuery 데이터 웨어하우스에 저렴한 비용으로 안전하게 전송하는 서비스입니다. (다른 클라우드 및 온프레미스에서 실행되는 애플리케이션에 의해) 생성된 로그 파일을 Cloud Storage에서 BigQuery 데이터 웨어하우스로 주기적으로 이동합니다.
Cloud Storage 다양한 데이터 유형에 맞게 저비용, 무제한 객체 스토리지를 제공하는 엔터프라이즈급 서비스입니다. Google Cloud 내부 및 외부에서 데이터에 액세스할 수 있고 지리적으로 중복되도록 데이터를 복제할 수 있습니다. 다른 클라우드 및 온프레미스에서 실행되는 애플리케이션이 웹 로그 파일을 업로드하는 데이터 레이크 역할을 합니다. 이러한 파일은 결국 BigQuery 데이터 웨어하우스로 전송됩니다. 이 배포에는 예시 웹 로그 파일이 포함되어 있습니다.
Looker Studio 데이터 통계를 만들고 공유할 수 있는 셀프서비스 비즈니스 인텔리전스 플랫폼입니다. 웹 로그 정보에서 시각화를 만드는 방법을 제공합니다.

비용

로그 분석 파이프라인 솔루션에서 사용하는 Google Cloud 리소스의 예상 비용을 보려면 Google Cloud 가격 계산기에서 미리 계산된 추정치를 참조하세요.

예상 비용을 시작점으로 배포 비용을 계산합니다. 솔루션에 사용된 리소스에 적용할 모든 구성 변경사항을 반영하도록 예상 비용을 수정할 수 있습니다.

사전 계산된 예상 비용은 다음과 같은 특정 요소에 대한 가정을 기반으로 합니다.

  • 리소스가 배포된 Google Cloud 위치
  • 리소스가 사용된 시간의 양

  • BigQuery로 저장하고 분석하는 데이터의 양

솔루션 배포

이 섹션에서는 솔루션 배포 과정을 안내합니다.

Google Cloud 프로젝트 만들기 또는 선택

솔루션을 배포할 때 리소스가 배포되는 Google Cloud 프로젝트를 선택합니다. 기존 프로젝트를 사용할지 아니면 새 프로젝트를 만들지 결정할 때는 다음 요소를 고려하세요.

  • 솔루션에 대한 프로젝트를 만들 경우 배포가 더 이상 필요하지 않으면 프로젝트를 삭제하고 비용이 계속 청구되지 않도록 할 수 있습니다. 기존 프로젝트를 사용하는 경우 더 이상 필요하지 않을 때 배포를 삭제해야 합니다.
  • 새 프로젝트를 사용하면 프로덕션 워크로드에 사용되는 리소스와 같이 이전에 프로비저닝된 리소스와의 충돌을 방지할 수 있습니다.

새 프로젝트에 솔루션을 배포하려면 배포를 시작하기 전에 프로젝트를 만듭니다.

프로젝트를 만들려면 다음 단계를 수행합니다.

  1. Google Cloud Console에서 프로젝트 선택기 페이지로 이동합니다.

    프로젝트 선택기로 이동

  2. Google Cloud 프로젝트 만들기를 시작하려면 프로젝트 만들기를 클릭합니다.

  3. 프로젝트 이름을 지정합니다. 생성된 프로젝트 ID를 기록합니다.

  4. 필요에 따라 다른 필드를 수정합니다.

  5. 프로젝트를 만들려면 만들기를 클릭합니다.

필수 IAM 권한 가져오기

배포 프로세스를 시작하려면 다음 표에 나온 Identity and Access Management(IAM) 권한이 필요합니다. 솔루션을 배포하려는 프로젝트에 대한 roles/owner 기본 역할이 있으면 이미 모든 필수 권한을 갖춘 것입니다. roles/owner 역할이 없으면 관리자에게 연락하여 해당 권한(또는 이러한 권한이 포함된 역할)을 부여해 달라고 요청하세요.

필수 IAM 권한 필수 권한이 포함된 사전 정의된 역할

serviceusage.services.enable

서비스 사용량 관리자
(roles/serviceusage.serviceUsageAdmin)

iam.serviceAccounts.create

서비스 계정 관리자
(roles/iam.serviceAccountAdmin)

resourcemanager.projects.setIamPolicy

프로젝트 IAM 관리자
(roles/resourcemanager.projectIamAdmin)
config.deployments.create
config.deployments.list
Cloud Config Manager 관리자
(roles/config.admin)

솔루션을 위해 생성된 서비스 계정

배포 프로세스를 시작하면 솔루션 배포를 위해 서비스 계정이 자동으로 생성됩니다(이후 필요할 때 배포 삭제 가능). 이 서비스 계정에는 특정 일시적으로 IAM 권한이 할당됩니다. 즉, 솔루션 배포 및 삭제 작업이 완료되면 권한이 자동으로 취소됩니다. 이 가이드 뒷부분에서 설명한 대로 배포를 삭제한 후에는 서비스 계정을 삭제하는 것이 좋습니다.

서비스 계정에 할당된 역할 보기

이러한 역할은 관리자에게 이 정보가 필요한 경우를 대비해서 여기에 나열되어 있습니다.

  • roles/bigquery.admin
  • roles/iam.serviceAccountAdmin
  • roles/iam.serviceAccountUser
  • roles/logging.configWriter
  • roles/resourcemanager.projectIamAdmin
  • roles/run.admin
  • roles/serviceusage.serviceUsageAdmin
  • roles/storage.admin

배포 방법 선택

다음 방법을 사용하여 이 솔루션을 배포할 수 있습니다.

  • 콘솔에서: 솔루션을 있는 그대로 사용하여 작동 방식을 보려면 이 방법을 사용합니다. Cloud Build는 솔루션에 필요한 모든 리소스를 배포합니다. 배포된 솔루션이 더 이상 필요하지 않으면 콘솔을 사용하여 삭제할 수 있습니다. 솔루션을 배포한 후 만든 모든 리소스는 개별적으로 삭제해야 할 수 있습니다.

    이 배포 방법을 사용하려면 콘솔에서 배포 안내를 따르세요.

  • Terraform 사용: 솔루션을 맞춤설정하거나 코드형 인프라(IaC) 접근 방식을 사용하여 리소스 프로비저닝 및 관리를 자동화하려면 이 방법을 사용합니다. GitHub에서 Terraform 구성을 다운로드하고, 원하는 경우 필요에 따라 코드를 맞춤설정하고, Terraform을 사용하여 솔루션을 배포합니다. 솔루션을 배포한 후 계속 Terraform을 사용하여 솔루션을 관리할 수 있습니다.

    이 배포 방법을 사용하려면 Terraform을 사용하여 배포의 안내를 따르세요.

콘솔에서 배포

사전 구성된 솔루션을 있는 그대로 배포하려면 다음 단계를 수행합니다.

  1. Google Cloud 점프 스타트 솔루션 카탈로그에서 로그 분석 파이프라인 페이지로 이동합니다.

  2. 솔루션의 예상 비용 및 배포 시간 등 페이지에 제공된 정보를 검토합니다.

  3. 솔루션 배포를 시작할 준비가 되면 배포를 클릭합니다.

    단계별 대화형 가이드가 표시됩니다.

  4. 대화형 가이드의 단계를 완료합니다.

    1. 솔루션에서 배포한 리소스를 만들려는 프로젝트를 선택하고 계속을 클릭합니다.

    2. 배포 이름 필드에 이 프로젝트에서 이전에 사용하지 않은 이름을 입력합니다.

    3. 필요한 경우 배포에 식별 라벨을 추가합니다. (솔루션 표시기 및 배포 이름 라벨이 자동으로 추가됩니다.) 라벨을 사용하여 비용 센터, 환경 또는 상태와 같은 기준에 따라 리소스를 정리할 수 있습니다.

      라벨에 대한 자세한 내용은 라벨 만들기 및 관리를 참조하세요.

    4. 리전 목록에서 리소스를 만들 리전을 선택합니다.

      리전에 대한 자세한 내용은 위치 및 리전을 참조하세요.

  5. 옵션을 모두 지정했으면 배포를 클릭합니다.

    솔루션 배포 페이지가 표시됩니다. 이 페이지의 상태 필드에 배포 중이 표시됩니다.

  6. 솔루션이 배포될 때까지 기다립니다.

    배포가 실패하면 상태 필드에 실패가 표시됩니다. Cloud Build 로그를 사용하여 오류를 진단할 수 있습니다. 자세한 내용은 콘솔에서 배포 시 오류를 참조하세요.

    배포가 완료되면 상태 필드가 배포됨으로 변경됩니다.

  7. 배포된 Google Cloud 리소스와 구성을 보려면 대화형 둘러보기를 사용합니다.

    둘러보기 시작

솔루션 사용

솔루션 배포가 완료되면 컨테이너와 상호작용하여 컨테이너가 실행 중인지 확인하고 분석을 시작할 수 있습니다. 솔루션을 사용하려면 다음 단계를 완료하세요.

  1. 솔루션 배포 페이지에서 작업 메뉴를 클릭합니다.

  2. Cloud Run 컨테이너 이미지의 데모 사이트를 보려면 데모 사이트 보기를 클릭합니다.

    데모 사이트에는 컨테이너 이미지의 기본 정보와 실행 상태가 포함되어 있습니다.

  3. 초기 데이터 전송이 완료될 때까지 최대 15분 정도 기다립니다.

  4. 로그 정보를 시각화하려면 솔루션 배포 페이지로 돌아가 작업 메뉴를 클릭한 후 Looker Studio 보고서 보기를 클릭합니다.

    Looker Studio 보고서는 생성된 샘플 로그의 호스트 및 상태 정보를 시각화하는 데 유용합니다. 데이터와 상호작용하는 방법에 대한 자세한 내용은 BI Engine Looker Studio로 데이터 분석을 참조하세요.

  5. 자세한 로그 정보를 보려면 솔루션 배포 페이지로 돌아가서 작업 메뉴를 클릭한 후 다음을 수행합니다.

    1. BigQuery에서 로그 보기를 클릭합니다. 탐색기 페이지가 열리고 이 배포에 사용 중인 logink 데이터 세트에 대한 정보가 표시됩니다.

    2. 탐색기 창에서 logsink 리소스를 펼칩니다.

    3. transferred_logs 테이블을 클릭합니다.

    4. transferred_logs 창에서 미리보기 탭을 클릭합니다. 테이블의 모든 로그 데이터가 표시됩니다.

    BigQuery 테이블에서 데이터를 분석하는 방법에 대한 자세한 내용은 BigQuery 분석 개요를 참조하세요.

예시 솔루션을 배포하고, 샘플 보고서와 상호작용하고, 데이터 웨어하우스에서 로그 정보를 미리 살펴봤습니다. 조직의 고유한 로그 분석 요구사항을 해결하기 위한 설계 권장사항에 대해 알아보려면 설계 권장사항을 참조하세요.

솔루션이 더 이상 필요하지 않으면 Google Cloud 리소스 비용이 계속 청구되지 않도록 배포를 삭제할 수 있습니다. 자세한 내용은 배포 삭제를 참조하세요.

Terraform을 사용하여 배포

이 섹션에서는 Terraform을 사용하여 솔루션을 맞춤설정하거나 솔루션 프로비저닝 및 관리를 자동화하는 방법을 설명합니다. Terraform 코드를 사용하여 배포하는 솔루션은 Google Cloud 콘솔에서 솔루션 배포 페이지에 표시되지 않습니다.

Terraform 클라이언트 설정

Cloud Shell 또는 로컬 호스트에서 Terraform을 실행할 수 있습니다. 이 가이드에서는 Google Cloud에서 인증을 수행하기 위해 Terraform이 사전 설치되어 구성된 Cloud Shell에서 Terraform을 실행하는 방법을 설명합니다.

이 솔루션의 Terraform 코드는 GitHub 저장소에서 사용할 수 있습니다.

  1. GitHub 저장소를 Cloud Shell에 클론합니다.

    Cloud Shell에서 열기

    GitHub 저장소를 Cloud Shell로 다운로드하는 것을 확인하는 메시지가 표시됩니다.

  2. 확인을 클릭합니다.

    Cloud Shell이 별도의 브라우저 탭에서 시작되고 Terraform 코드가 Cloud Shell 환경의 $HOME/cloudshell_open 디렉터리에 다운로드됩니다.

  3. Cloud Shell에서 현재 작업 디렉터리가 $HOME/cloudshell_open/terraform-google-log-analysis/examples/simple_example인지 확인합니다. 이 디렉터리에 솔루션에 대한 Terraform 구성 파일이 포함되어 있습니다. 해당 디렉터리로 변경해야 하는 경우 다음 명령어를 실행합니다.

    cd $HOME/cloudshell_open/terraform-google-log-analysis/examples/simple_example
    
  4. 다음 명령어를 실행하여 Terraform을 초기화합니다.

    terraform init
    

    다음 메시지가 표시될 때까지 기다립니다.

    Terraform has been successfully initialized!
    

Terraform 변수 구성

다운로드한 Terraform 코드에는 요구사항에 따라 배포를 맞춤설정하는 데 사용할 수 있는 변수가 포함되어 있습니다. 예를 들어 Google Cloud 프로젝트와 솔루션을 배포할 리전을 지정할 수 있습니다.

  1. 현재 작업 디렉터리가 $HOME/cloudshell_open/terraform-google-log-analysis/examples/simple_example인지 확인합니다. 그렇지 않으면 해당 디렉터리로 이동합니다.

  2. 동일한 디렉터리에서 terraform.tfvars라는 텍스트 파일을 만듭니다.

  3. terraform.tfvars 파일에서 다음 코드 스니펫을 복사하고 필수 변수의 값을 설정합니다.

    • 코드 스니펫에서 주석으로 제공된 안내를 따릅니다.
    • 이 코드 스니펫에는 값을 설정해야 하는 변수만 포함됩니다. Terraform 구성에는 기본값이 있는 다른 변수가 포함됩니다. 모든 변수 및 기본값을 검토하려면 $HOME/cloudshell_open/terraform-google-log-analysis/examples/simple_example 디렉터리에서 사용할 수 있는 variables.tf 파일을 참조하세요.
    • terraform.tfvars 파일에 설정한 각 값이 variables.tf 파일에 선언된 변수 유형과 일치하는지 확인합니다. 예를 들어 variables.tf 파일의 변수에 정의된 유형이 bool인 경우 terraform.tfvars 파일에서 해당 변수 값으로 true 또는 false를 지정해야 합니다.
      # This is an example of the terraform.tfvars file.
      # The values that you set in this file must match the variable types, as declared in variables.tf.
      # The values in this file override any defaults in variables.tf.
    
      # The project to provision resources to (required)
      project_id = "PROJECT_ID"
    
      # Google Cloud region where you want to deploy the solution (optional)
      # Example: us-central1
      region = "REGION"
    
      # The name used when resources are provisioned (optional)
      # Example: log-analysis
      deployment_name = project_id = "DEPLOYMENT_NAME"
    
      # A set of key/value label pairs to assign to the resources deployed by this solution (optional)
      # Example: {"team"="monitoring", "environment"="test"}
      labels = {"KEY1"="VALUE1",..."KEYn"="VALUEn"}
    
      # Whether to enable underlying APIs (optional)
      # Example: true
      enable_apis = "ENABLE_APIS"
    
      # Whether to delete all BigQuery resources when the solution is deleted (optional)
      # Example: false
      delete_content_on_destroy = "DELETE_CONTENT_ON_DESTROY"
    

필수 변수에 할당할 수 있는 값에 대한 자세한 내용은 다음을 참조하세요.

  • project_id 필드는 필수 항목입니다. 이 값에 대한 자세한 내용은 프로젝트 식별을 참조하세요.

  • 다른 변수에는 기본값이 포함되어 있습니다. deployment_namelabels와 같은 일부는 변경할 수 있습니다.

Terraform 구성 검증 및 검토

  1. 현재 작업 디렉터리가 $HOME/cloudshell_open/terraform-google-log-analysis/examples/simple_example인지 확인합니다. 그렇지 않으면 해당 디렉터리로 이동합니다.

  2. Terraform 구성에 오류가 없는지 확인합니다.

    terraform validate
    

    명령어가 오류를 반환하면 구성에서 수정이 필요한 항목을 변경한 후 terraform validate 명령어를 다시 실행합니다. 명령어가 다음 메시지를 반환할 때까지 이 단계를 반복합니다.

    Success! The configuration is valid.
    
  3. 구성에서 정의된 리소스를 검토합니다.

    terraform plan
    
  4. 앞에서 설명한 대로 terraform.tfvars 파일을 만들지 않은 경우 Terraform에서 기본값이 없는 변수의 값을 입력하라는 메시지를 표시합니다. 필수 값을 입력합니다.

    terraform plan 명령어 출력은 구성을 적용할 때 Terraform이 프로비저닝하는 리소스 목록입니다.

    변경하려면 구성을 수정한 후 terraform validateterraform plan 명령어를 다시 실행합니다.

리소스 프로비저닝

Terraform 구성을 더 이상 변경할 필요가 없으면 리소스를 배포합니다.

  1. 현재 작업 디렉터리가 $HOME/cloudshell_open/terraform-google-log-analysis/examples/simple_example인지 확인합니다. 그렇지 않으면 해당 디렉터리로 이동합니다.

  2. Terraform 구성을 적용합니다.

    terraform apply
    
  3. 앞에서 설명한 대로 terraform.tfvars 파일을 만들지 않은 경우 Terraform에서 기본값이 없는 변수의 값을 입력하라는 메시지를 표시합니다. 필수 값을 입력합니다.

    Terraform에서 생성될 리소스 목록을 표시합니다.

  4. 작업을 수행하라는 메시지가 표시되면 yes를 입력합니다.

    Terraform에서 배포 진행 상황을 보여주는 메시지가 표시됩니다.

    배포를 완료할 수 없으면 Terraform에서 실패를 일으킨 오류가 표시됩니다. 오류 메시지를 검토하고 구성을 업데이트하여 오류를 해결합니다. 그런 후 terraform apply 명령어를 다시 실행합니다. Terraform 오류 문제 해결에 도움이 필요하면 Terraform을 사용하여 솔루션 배포 시 오류를 참조하세요.

    모든 리소스가 만들어지면 Terraform에 다음 메시지가 표시됩니다.

    Apply complete!
    

    모든 리소스가 만들어지면 Terraform에 다음과 비슷한 메시지가 표시됩니다(배포에 따라 일부 값이 다름).

      bigquery_dataset_name = "<DEPLOYMENT_NAME>_logsink"
      bigquery_dataset_url = "https://console.cloud.google.com/bigquery?project=<PROJECT_ID>&ws=!1m4!1m3!3m2!1sPROJECT_ID!2s<DEPLOYMENT_NAME_logsink"
      bigquery_table_name = "transferred_logs"
      bucket_name = "<DEPLOYMENT_NAME>-ingest-cce5ab38"
      cloud_run_url="<VALUE>"
      lookerstudio_report_url = "https://lookerstudio.google.com/reporting/create?c.mode=edit&ds.connector=BIG_QUERY&ds.type=TABLE&ds.projectId=<PROJECT_ID>&ds.datasetId=<DEPLOYMENT_NAME>_logsink&ds.tableId=transferred_logs"
    

    다음 세부정보가 표시됩니다.

    • BigQuery 데이터 세트 이름: 웹 로그가 저장되는 데이터 세트입니다.
    • BigQuery 데이터 세트 URL: Google Cloud 콘솔의 데이터 세트 세부정보 링크입니다.
    • BigQuery 테이블 이름: 데이터 세트 내에 데이터가 저장되는 테이블입니다.
    • 버킷 이름: 다른 클라우드와 온프레미스에서 실행되는 애플리케이션의 웹 로그 파일을 저장하는 스토리지 버킷입니다.
    • Looker Studio 보고서 URL: 웹 로그를 시각화할 수 있는 보고서 링크입니다.

솔루션 사용

솔루션 배포가 완료되면 컨테이너와 상호작용하여 컨테이너가 실행 중인지 확인하고 분석을 시작할 수 있습니다. 솔루션을 사용하려면 다음 단계를 완료하세요.

  1. 나중에 사용할 수 있도록 bigquery_dataset_urllookerstudio_report_url에 대한 값을 복사합니다.

  2. 초기 데이터 전송이 완료될 때까지 최대 15분 정도 기다립니다.

  3. 로그 정보의 시각화를 보려면 브라우저에 Looker Studio URL을 붙여넣으세요.

    Looker Studio 보고서는 샘플 웹 로그에 대한 호스트 및 상태 정보를 시각화하는 데 유용합니다. 데이터와 상호작용하는 방법에 대한 자세한 내용은 BI Engine Looker Studio로 데이터 분석을 참조하세요.

  4. 자세한 로그 정보를 보려면 다음을 수행합니다.

    1. 브라우저에 BigQuery 데이터 세트 이름을 붙여넣습니다. 탐색기 페이지가 열리고 이 배포에 사용 중인 데이터 세트 정보가 표시됩니다.

    2. 탐색기 창에서 logsink 리소스를 펼칩니다.

    3. transferred_logs 테이블을 클릭합니다.

    4. 오른쪽 창에서 미리보기를 클릭합니다. 테이블의 모든 로그 데이터가 표시됩니다.

    BigQuery 테이블에서 데이터를 분석하는 방법에 대한 자세한 내용은 BigQuery 분석 개요를 참조하세요.

  5. 배포된 Google Cloud 리소스와 구성을 보려면 대화형 둘러보기를 사용합니다.

    둘러보기 시작

솔루션 맞춤설정

이 섹션에서는 Terraform 개발자가 자체 기술 및 비즈니스 요구사항을 충족하기 위해 로그 분석 파이프라인 솔루션을 수정하는 데 사용할 수 있는 정보를 제공합니다. 이 섹션의 안내는 Terraform을 사용하여 솔루션을 배포할 경우에만 관련이 있습니다.

이 솔루션에서 프로비저닝하는 Google Cloud 리소스에는 사전 구성된 매개변수가 있습니다. 매개변수 수정 워크플로를 설명하기 위한 이 절차는 BigQuery Data Transfer Service 일정 매개변수를 수정하는 데 도움이 되며, 예상 데이터 새로고침 간격에 맞게 수정할 수 있습니다.

솔루션을 맞춤설정하려면 Cloud Shell에서 다음 단계를 완료합니다.

  1. 현재 작업 디렉터리가 $HOME/cloudshell_open/terraform-google-log-analysis/examples/simple_example인지 확인합니다. 그렇지 않은 경우 해당 디렉터리로 이동합니다.

    cd $HOME/cloudshell_open/terraform-google-log-analysis/examples/simple_example
    
  2. main.tf 파일을 열고 다음 표와 같이 필요한 사항을 변경합니다.

    매개변수 main.tf의 Terraform 인수
    BigQuery Data Transfer Service 작업 일정 main.tf 파일의 인수: schedule

    코드 스니펫

    
    resource "google_bigquery_data_transfer_config" "log_transfer" {
          ... template { ...
                  
            schedule = "SCHEDULE" ... } }
  3. Terraform 구성 검증 및 검토

  4. 리소스 프로비저닝

(선택사항) 배포에 자체 웹 로그 파일 추가

솔루션 배포에는 보고서에서 쿼리하거나 시각화할 수 있는 샘플 웹 로그가 포함되어 있습니다. 샘플 데이터를 자체 웹 로그 데이터로 바꾸려면 다음을 수행합니다.

  1. 웹 로그가 JSON 형식이어야 합니다.

  2. 웹 로그를 기반으로 JSON 형식의 데이터 스키마 파일을 만듭니다.

  3. Terraform을 사용하여 솔루션을 배포하고 다음 파일의 콘텐츠를 자체 데이터 및 스키마 정보로 바꿉니다.

    • 웹 로그 데이터: sample_access_log.json
    • 데이터 스키마: sample_access_log_schema.json

설계 권장사항

이 섹션에서는 로그 분석 파이프라인 솔루션을 사용하여 보안, 안정성, 비용, 성능에 대한 요구사항을 충족하는 아키텍처를 개발하기 위한 권장사항을 제공합니다.

제품 대안

고유한 요구사항을 충족하도록 솔루션을 수정하려면 배포 예시에 사용된 제품에 대한 다음 대안을 고려하세요.

  • 이 솔루션은 Cloud Run 컨테이너에서 애플리케이션을 제공합니다. 사용자의 환경에서는 필요에 따라 다른 제품을 사용하여 애플리케이션을 제공할 수 있습니다. 사용 가능한 컴퓨팅 옵션에 대한 자세한 내용은 Google Cloud에서 애플리케이션 호스팅을 참조하세요.

  • 이 솔루션에는 다른 클라우드 플랫폼 또는 온프레미스에서 로그 파일을 업로드할 수 있는 스토리지 버킷이 포함됩니다. 관리형 데이터베이스에 로그 데이터를 저장하는 경우 해당 데이터베이스의 데이터를 BigQuery로 스트리밍하는 것이 좋습니다. 자세한 내용은 Datastream 개요를 참조하세요.

보안

추가된 아키텍처 보안을 위해 다음 가이드의 권장사항을 구현합니다.

신뢰성

이 솔루션의 제품 신뢰성을 개선하려면 다음 가이드라인을 따르세요.

성능

다음 권장사항을 준수하여 성능을 최적화하세요.

비용

다음 설계 원칙을 사용하여 워크플로 비용을 최적화합니다.

다음에 유의하세요.

  • 설계를 변경하기 전에 비용 영향을 평가하고 다른 기능과의 잠재적 장단점을 고려하세요. Google Cloud 가격 계산기를 사용하여 설계 변경으로 인한 비용 영향을 평가할 수 있습니다.
  • 솔루션의 설계 변경사항을 구현하려면 Terraform 코딩에 대한 전문 지식과 솔루션에 사용되는 Google Cloud 서비스에 대한 고급 지식이 필요합니다.
  • Google 제공 Terraform 구성을 수정한 후 오류가 발생하면 GitHub에서 문제를 생성합니다. GitHub 문제는 최선을 다해 검토되며 일반적인 사용 질문을 위한 것이 아닙니다.
  • Google Cloud에서 프로덕션용 환경을 설계하고 설정하는 방법에 대한 자세한 내용은 Google Cloud에서 시작 영역 설계Google Cloud 설정 체크리스트를 참조하세요.

배포 삭제

더 이상 솔루션이 필요하지 않으면 이 솔루션에서 만든 리소스에 대한 요금이 계속 청구되지 않도록 모든 리소스를 삭제합니다.

콘솔을 통해 삭제

콘솔을 통해 솔루션을 배포한 경우 다음 절차를 따릅니다.

  1. Google Cloud 콘솔에서 솔루션 배포 페이지로 이동합니다.

    솔루션 배포로 이동

  2. 삭제할 배포가 포함된 프로젝트를 선택합니다.

  3. 삭제할 배포를 찾습니다.

  4. 작업을 클릭한 다음 삭제를 선택합니다.

  5. 배포 이름을 입력한 후 확인을 클릭합니다.

    상태 필드에 삭제 중이 표시됩니다.

    삭제가 실패하면 배포 삭제 시 오류의 문제 해결 안내를 참조하세요.

솔루션에 사용한 Google Cloud 프로젝트가 더 이상 필요하지 않으면 프로젝트를 삭제할 수 있습니다. 자세한 내용은 선택사항: 프로젝트 삭제를 참조하세요.

Terraform을 사용하여 삭제

Terraform을 사용하여 솔루션을 배포한 경우 이 절차를 사용합니다.

  1. Cloud Shell에서 현재 작업 디렉터리가 $HOME/cloudshell_open/terraform-google-log-analysis/examples/simple_example인지 확인합니다. 그렇지 않으면 해당 디렉터리로 이동합니다.

  2. Terraform에서 프로비저닝한 리소스를 삭제합니다.

    terraform destroy
    

    Terraform에서 소멸될 리소스 목록을 표시합니다.

  3. 작업을 수행하라는 메시지가 표시되면 yes를 입력합니다.

    Terraform에서 진행 상황을 보여주는 메시지가 표시됩니다. 모든 리소스가 삭제되면 Terraform에 다음 메시지가 표시됩니다.

    Destroy complete!
    

    삭제가 실패하면 배포 삭제 시 오류의 문제 해결 안내를 참조하세요.

솔루션에 사용한 Google Cloud 프로젝트가 더 이상 필요하지 않으면 프로젝트를 삭제할 수 있습니다. 자세한 내용은 선택사항: 프로젝트 삭제를 참조하세요.

선택사항: 프로젝트 삭제

새 Google Cloud 프로젝트에 솔루션을 배포했고 프로젝트가 더 이상 필요 없으면 다음 단계에 따라 이를 삭제합니다.

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 프롬프트에서 프로젝트 ID를 입력한 후 종료를 클릭합니다.

프로젝트를 보존하기로 결정한 경우에는 다음 섹션에 설명된 대로 이 솔루션을 위해 만든 서비스 계정을 삭제합니다.

선택사항: 서비스 계정 삭제

솔루션에 사용한 프로젝트를 삭제한 경우에는 이 섹션을 건너뜁니다.

이 가이드의 앞에서 설명한 것처럼 솔루션을 배포할 때 서비스 계정이 자동으로 생성되었습니다. 서비스 계정에 일시적으로 특정 IAM 권한이 할당되었습니다. 즉, 솔루션 배포 및 삭제 작업이 완료된 후 권한이 자동으로 취소되었지만 서비스 계정은 삭제되지 않았습니다. 이 서비스 계정을 삭제하는 것이 좋습니다.

  • Google Cloud 콘솔에서 솔루션을 배포했으면 솔루션 배포 페이지로 이동합니다. 이미 해당 페이지에 있으면 브라우저를 새로고침합니다. 백그라운드에서 프로세스가 트리거되어 서비스 계정이 삭제됩니다. 추가 작업은 필요 없습니다.

  • Terraform을 사용하여 솔루션을 배포한 경우 다음 단계를 완료합니다.

    1. Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.

      서비스 계정으로 이동

    2. 솔루션에 사용한 프로젝트를 선택합니다.

    3. 삭제하려는 서비스 계정을 선택합니다.

      솔루션에서 만든 서비스 계정의 이메일 ID 형식은 다음과 같습니다.

      goog-sc-DEPLOYMENT_NAME-NNN@PROJECT_ID.iam.gserviceaccount.com
      

      이메일 ID에는 다음 값이 포함됩니다.

      • DEPLOYMENT_NAME: 배포 이름입니다.
      • NNN: 임의의 3자리 숫자입니다.
      • PROJECT_ID: 솔루션을 배포한 프로젝트의 ID입니다.
    4. 삭제를 클릭합니다.

오류 문제 해결

오류 진단 및 해결을 위해 수행할 수 있는 작업은 배포 방법 및 오류 복잡성에 따라 달라집니다.

콘솔에서 배포 시 오류

콘솔을 사용할 때 배포가 실패하면 다음을 수행합니다.

  1. 솔루션 배포 페이지로 이동합니다.

    배포가 실패하면 상태 필드에 실패가 표시됩니다.

  2. 실패를 일으킨 오류에 대한 세부정보를 보려면 다음 안내를 따르세요.

    1. 작업을 클릭합니다.

    2. Cloud Build 로그 보기를 선택합니다.

  3. Cloud Build 로그를 검토하고 적절한 조치에 따라 실패를 일으킨 문제를 해결합니다.

Terraform을 사용하여 배포 시 오류

Terraform 사용 시 배포가 실패하면 terraform apply 명령어 출력에 문제 진단을 위해 검토할 수 있는 오류 메시지가 포함됩니다.

다음 섹션의 예시에서는 Terraform을 사용할 때 발생할 수 있는 배포 오류를 보여줍니다.

API가 사용 설정되지 않음 오류

프로젝트를 만든 후 솔루션을 새 프로젝트에 즉시 배포하려고 하면 다음과 같은 오류가 표시되면서 배포가 실패할 수 있습니다.

Error: Error creating Network: googleapi: Error 403: Compute Engine API has not
been used in project PROJECT_ID before or it is disabled. Enable it by visiting
https://console.developers.google.com/apis/api/compute.googleapis.com/overview?project=PROJECT_ID
then retry. If you enabled this API recently, wait a few minutes for the action
to propagate to our systems and retry.

이 오류가 발생하면 몇 분 정도 기다린 후 terraform apply 명령어를 다시 실행합니다.

배포 삭제 시 오류

솔루션 배포 후 솔루션에서 프로비저닝된 리소스를 추가하거나 변경할 경우 그리고 배포 삭제를 시도할 경우 삭제가 실패할 수 있습니다.

예를 들어 솔루션 배포 후 솔루션으로 만든 VPC 네트워크에 서브넷을 추가한 후 해당 솔루션을 삭제하려고 시도하면 삭제가 실패합니다. 콘솔에서 솔루션을 배포했으면 솔루션 배포 페이지의 상태 필드에 실패가 표시되고 Cloud Build 로그에 다음과 같은 오류가 표시됩니다.

Error: running tf destroy: terraform destroy failed: running terraform failed: exit status 1
Step #0 - "Destroy blueprint": running tf destroy: terraform destroy failed: running terraform failed: exit status 1
Step #0 - "Destroy blueprint":
Step #0 - "Destroy blueprint": Error: Error waiting for Deleting Network: The network resource 'projects/mysolutionsproject/global/networks/tiered-web-app-private-network' is already being used by 'projects/mysolutionsproject/regions/asia-east1/subnetworks/mysubnet'

이 오류가 발생하면 솔루션 배포 후 추가한 리소스를 삭제하고 솔루션 삭제를 다시 시도합니다.

BigQuery 리소스 삭제 시 오류

Terraform 사용 시 폐기에 실패하면 terraform destroy 명령어 출력에 문제 진단을 위해 검토할 수 있는 오류 메시지가 포함됩니다.

예를 들어 다음 오류 메시지가 표시될 수 있습니다.

Error: cannot destroy instance without setting deletion_protection=false and running `terraform apply`.

이 오류가 발생해도 솔루션에서 생성된 BigQuery 리소스는 폐기되지 않습니다. BigQuery 리소스를 폐기하려면 콘솔에서 삭제하면 됩니다.

데이터 전송 시 오류

Cloud Storage에서 BigQuery로 데이터를 전송하거나 애플리케이션과 BigQuery 간에 데이터를 전송할 때 오류가 발생할 수 있습니다. 데이터 전송 오류 문제를 해결하려면 다음 문서를 참조하세요.

배포 삭제 시 오류

경우에 따라 배포를 삭제하려는 시도가 실패할 수 있습니다.

  • 콘솔에서 솔루션을 배포한 후 솔루션에서 프로비저닝된 리소스를 변경한 다음 배포를 삭제하려고 시도하면 삭제가 실패할 수 있습니다. 솔루션 배포 페이지의 상태 필드에 실패가 표시되고 Cloud Build 로그에 오류의 원인이 표시됩니다.
  • Terraform을 사용하여 솔루션을 배포한 후 Terraform이 아닌 인터페이스(예: 콘솔)를 사용하여 리소스를 변경한 경우 배포를 삭제하려고 하면 삭제가 실패할 수 있습니다. terraform destroy 명령어 출력의 메시지에 오류의 원인이 표시됩니다.

오류 로그와 메시지를 검토하고 오류를 일으킨 리소스를 식별 및 삭제한 후 배포를 다시 삭제합니다.

콘솔 기반 배포가 삭제되지 않고 Cloud Build 로그를 사용하여 오류를 진단할 수 없으면 다음 섹션에 설명된 대로 Terraform을 사용하여 배포를 삭제할 수 있습니다.

Terraform을 사용하여 콘솔 기반 배포 삭제

이 섹션에서는 콘솔에서 삭제를 시도할 때 오류가 발생할 경우 콘솔 기반 배포를 삭제하는 방법을 설명합니다. 이 접근 방법에서는 삭제하려는 배포의 Terraform 구성을 다운로드한 후 Terraform을 사용하여 배포를 삭제합니다.

  1. 배포의 Terraform 코드, 로그 및 기타 데이터가 저장된 리전을 식별합니다. 이 리전은 솔루션 배포 중 선택한 리전과 다를 수 있습니다.

    1. Google Cloud 콘솔에서 솔루션 배포 페이지로 이동합니다.

      솔루션 배포로 이동

    2. 삭제할 배포가 포함된 프로젝트를 선택합니다.

    3. 배포 목록에서 삭제하려는 배포에 대한 행을 식별합니다.

    4. 모든 행 콘텐츠 보기를 클릭합니다.

    5. 위치 열에서 다음 예시에 강조 표시된 두 번째 위치를 기록해 둡니다.

      배포 코드, 로그, 기타 아티팩트의 위치

  2. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  3. 프로젝트 ID, 리전, 삭제하려는 배포 이름에 대해 환경 변수를 만듭니다.

    export REGION="REGION"
    export PROJECT_ID="PROJECT_ID"
    export DEPLOYMENT_NAME="DEPLOYMENT_NAME"
    

    이 명령어에서 다음 항목을 바꿉니다.

    • REGION: 이 절차의 앞 부분에서 기록해 둔 위치
    • PROJECT_ID: 솔루션을 배포한 프로젝트의 ID
    • DEPLOYMENT_NAME: 삭제하려는 배포의 이름
  4. 삭제하려는 배포의 최신 버전에 대한 ID를 가져옵니다.

    export REVISION_ID=$(curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}" \
        | jq .latestRevision -r)
        echo $REVISION_ID
    

    출력은 다음과 비슷합니다.

    projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME/revisions/r-0
    
  5. 배포에 대한 Terraform 구성의 Cloud Storage 위치를 가져옵니다.

    export CONTENT_PATH=$(curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/${REVISION_ID}" \
        | jq .applyResults.content -r)
        echo $CONTENT_PATH
    

    다음은 이 명령어의 출력 예시입니다.

    gs://PROJECT_ID-REGION-blueprint-config/DEPLOYMENT_NAME/r-0/apply_results/content
    
  6. Cloud Storage에서 Cloud Shell로 Terraform 구성을 다운로드합니다.

    gsutil cp -r $CONTENT_PATH $HOME
    cd $HOME/content/examples/simple_example
    

    다음 예시에 표시된 것처럼 Operation completed 메시지가 표시될 때까지 기다립니다.

    Operation completed over 45 objects/268.5 KiB
    
  7. Terraform을 초기화합니다.

    terraform init
    

    다음 메시지가 표시될 때까지 기다립니다.

    Terraform has been successfully initialized!
    
  8. 배포된 리소스를 삭제합니다.

    terraform destroy
    

    Terraform에서 소멸될 리소스 목록을 표시합니다.

    선언되지 않은 변수에 대한 경고가 표시되면 경고를 무시합니다.

  9. 작업을 수행하라는 메시지가 표시되면 yes를 입력합니다.

    Terraform에서 진행 상황을 보여주는 메시지가 표시됩니다. 모든 리소스가 삭제되면 Terraform에 다음 메시지가 표시됩니다.

    Destroy complete!
    
  10. 배포 아티팩트를 삭제합니다.

    curl -X DELETE \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}?force=true&delete_policy=abandon"
    
  11. 몇 초 정도 기다린 후 배포 아티팩트가 삭제되었는지 확인합니다.

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}" \
        | jq .error.message
    

    출력에 null이 표시되면 몇 초 정도 기다린 후 명령어를 다시 실행합니다.

    배포 아티펙트가 삭제된 후 다음 예시와 같은 메시지가 표시됩니다.

    Resource 'projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME' was not found
    

의견 보내기

점프 스타트 솔루션은 정보 제공만을 목적으로 하며 공식적으로 지원되는 제품은 아닙니다. Google은 사전 통지 없이 솔루션을 변경하거나 삭제할 수 있습니다.

오류를 해결하려면 Cloud Build 로그 및 Terraform 출력을 검토합니다.

의견을 제출하려면 다음을 수행합니다.

  • 문서, 콘솔 내 튜토리얼, 솔루션의 경우 페이지에서 의견 보내기 버튼을 사용합니다.
  • 수정되지 않은 Terraform 코드에 대해서는 GitHub 저장소에서 문제를 만드세요. GitHub 문제는 최선을 다해 검토되며 일반적인 사용 질문을 위한 것이 아닙니다.

다음 단계

이 솔루션에서 사용되는 제품의 아키텍처 및 운영 권장사항에 대해 알아보려면 다음 문서를 검토하세요.