BigQuery로 Cloud Billing 데이터 내보내기를 Looker Studio와 결합하여 Google Cloud 비용을 최신 상태로 유지할 수 있습니다.
이 문서에서는 Cloud Billing 데이터를 사용하여 Billing 사용량 및 비용 통계 대시보드를 설정하는 방법을 보여줍니다. 대시보드를 사용하면 Compute Engine 리소스에 얼마를 지출하는가?, 가장 많은 비용이 발생하는 환경은 무엇인가?와 같은 Google Cloud 지출 관련 질문에 대한 답을 얻을 수 있습니다.
이 튜토리얼을 따르거나 다음 동영상을 확인하여 대시보드를 설정할 수 있습니다.
대시보드 사본 만들기
Terraform
Terraform을 사용해 자체 대시보드 사본을 만들려면 먼저 프로세스를 자동화하는 GitHub 저장소를 클론합니다. 이 단계에서는 브라우저에서 사용할 수 있는 Google Cloud 용 대화형 셸 환경인 Cloud Shell을 사용합니다. Cloud Shell에는 Terraform이 사전 설치되어 있습니다.
저장소의 Terraform 구성에서는 대략적으로 다음 태스크를 실행합니다.
- Standard 비용 데이터 내보내기에서 데이터를 가져오는 새 BigQuery 뷰를 만듭니다.
- 대시보드 템플릿을 복사하고 사본을 데이터의 BigQuery 뷰에 연결합니다.
- Looker Studio 대시보드에 저장할 수 있는 사본에 대한 Looker Studio 링크를 제공합니다.
- 대시보드의 인증 방법으로 사용하는 Google Cloud 서비스 계정 ID를 제공합니다.
다음 단계에 따라 대시보드를 만듭니다.
Cloud Shell에서 GitHub 저장소를 엽니다.
프로젝트 및 BigQuery 데이터 세트에 관한 정보가 포함된 Terraform 변수 정의 파일을 만듭니다. 다음 명령어를 사용하여
variables.tfvars
라는 파일을 만듭니다.cat << EOF > variables.tfvars project-id = "PROJECT_ID" bq-dashboard-dataset-name = "DATASET_NAME" bq-billing-export-table-id = "PROJECT_ID.DATASET_NAME.TABLE_ID" looker-studio-service-agent-name = "LOOKER_STUDIO_AGENT_NAME" EOF
여기에서 변수는 다음과 같습니다.
- PROJECT_ID: Cloud Billing 데이터 세트를 호스팅하는 프로젝트 ID입니다.
- DATASET_NAME: Standard 비용 데이터 내보내기가 포함된 BigQuery 데이터 세트입니다.
- TABLE_ID: Standard 결제 데이터 내보내기가 포함된 BigQuery 테이블의 이름입니다.
- LOOKER_STUDIO_AGENT_NAME: Looker Studio 서비스 에이전트 도움말 페이지에서 확인할 수 있는 Looker Studio 서비스 에이전트의 이메일 주소입니다.
GitHub 저장소를 Terraform 작업 디렉터리로 초기화하려면 다음 명령어를 실행합니다.
terraform init
선택적으로, Terraform 구성으로 인한 변경사항을 미리 보려면 다음
terraform plan
명령어를 실행합니다.terraform plan -var-file=variables.tfvars
Cloud Shell이 사용자를 대신하여 API 호출을 할 수 있도록 승인하라는 메시지가 표시될 수 있습니다.
Terraform 변경사항을 검토하고 변수 값을 변경해야 하는 경우
variables.tfvars
를 수정합니다. 리소스를 만들 준비가 되면 다음terraform apply
명령어를 실행합니다.terraform apply -var-file=variables.tfvars
명령어를 실행한 후 인증을 위해 생성된 서비스 계정과 Looker Studio 대시보드에 대한 링크가 제공됩니다.
서비스 계정 이름을 복사합니다. Looker Studio 데이터 소스의 인증을 구성할 때 이 정보가 필요합니다.
Looker Studio 링크를 클릭하여 대시보드를 엽니다.
Looker Studio에서 수정 및 공유를 클릭하여 대시보드를 저장합니다. 데이터 액세스 설정을 검토하라는 메시지가 표시되면 확인 및 저장을 클릭합니다.
보고서에 데이터를 추가하라는 메시지가 표시되면 보고서에 추가를 클릭합니다.
이제 Looker Studio 홈페이지에서 대시보드에 액세스할 수 있습니다.
Python
Python을 사용해 자체 대시보드 사본을 만들려면 먼저 프로세스를 자동화하는 GitHub 저장소를 클론합니다. 이 단계에서는 브라우저에서 사용할 수 있는 Google Cloud 용 대화형 셸 환경인 Cloud Shell을 사용합니다.
상위 수준에서는 저장소의 설정 스크립트가 다음 작업을 수행합니다.
- Standard 비용 데이터 내보내기가 있는 데이터 세트에 새 BigQuery 뷰를 만듭니다.
- 대시보드 템플릿을 복사하고 사본을 데이터의 BigQuery 뷰에 연결합니다.
- Looker Studio 대시보드에 저장할 수 있는 사본에 대한 Looker Studio 링크를 제공합니다.
다음 단계에 따라 대시보드를 만듭니다.
Cloud Shell에서 GitHub 저장소를 엽니다.
billboard
디렉터리로 이동합니다.cd examples/billboard
다음 명령어를 실행하여 스크립트의 Python 환경을 설정합니다.
rm -rf bill-env python3 -m venv bill-env source bill-env/bin/activate pip install -r requirements.txt
대시보드를 만드는 스크립트를 실행합니다. 사용자를 대신하여 API를 호출하도록 Cloud Shell을 승인해야 할 수도 있습니다.
python billboard.py \ -pr 'PROJECT_ID' \ -se 'STANDARD_BILLING_EXPORT_DATASET' \ -bb 'BILLBOARD_DATASET'
여기에서 변수는 다음과 같습니다.
- PROJECT_ID: Cloud Billing 데이터 세트를 호스팅하는 프로젝트 ID입니다.
- STANDARD_BILLING_EXPORT_DATASET: 표준 사용 비용 데이터 내보내기가 포함된 BigQuery 데이터 세트입니다.
- BILLBOARD_DATASET: 대시보드의 BigQuery 뷰가 생성되는 BigQuery 데이터 세트의 이름입니다(예:
example_dashboard_view
). 뷰의 데이터 세트가 아직 없으면 스크립트가 이 이름으로 새 데이터 세트를 만듭니다.
스크립트 실행이 완료되면 대시보드에 Looker Studio 링크가 표시됩니다.
Looker Studio 링크를 클릭하여 대시보드를 엽니다.
Looker Studio에서 수정 및 공유를 클릭하여 대시보드를 저장합니다. 보고서에 데이터 소스를 추가하라는 메시지가 나타나면 보고서에 추가를 클릭합니다.
이제 Looker Studio 홈페이지에서 대시보드에 액세스할 수 있습니다.
(선택사항) 데이터 소스 사용자 인증 정보 구성
기본적으로 Billing 사용량 대시보드는 사용자 인증 정보를 사용하여 BigQuery 데이터 소스에 액세스합니다. 대시보드를 다른 사용자와 공유하려면 Google Cloud 서비스 계정을 사용하여 BigQuery 데이터 세트에 인증하여 데이터 소스가 사용자 인증 정보에 종속되지 않도록 하는 것이 좋습니다.
Terraform을 사용하여 대시보드를 복사한 경우 terraform apply
명령어를 실행하면 서비스 계정 ID가 반환됩니다. Python 스크립트를 사용한 경우 다음 단계에 따라 서비스 계정을 수동으로 만들어야 합니다.
Looker Studio 서비스 에이전트 도움말 페이지에서 Looker Studio 서비스 에이전트의 이메일 주소를 확인합니다.
대시보드에 BigQuery 뷰가 있는 프로젝트에 대한 다음 권한을 서비스 계정에 부여합니다.
bigquery.dataViewer
bigquery.jobUser
iam.serviceAccountTokenCreator
서비스 계정 ID가 있으면 다음 단계에 따라 해당 서비스 계정을 인증에 사용하세요.
Looker Studio 홈페이지에서 대시보드를 엽니다.
수정을 클릭하여 대시보드를 수정합니다.
리소스 메뉴에서 추가된 데이터 소스 관리를 선택합니다. 대시보드의 데이터 소스 이름은
billing-export-view
로 시작합니다.데이터 소스의 작업 열에서 수정을 클릭합니다.
데이터 사용자 인증 정보를 클릭합니다.
데이터 사용자 인증 정보 업데이트 페이지에서 서비스 계정 사용자 인증 정보를 선택하고 서비스 계정 ID를 입력합니다.
업데이트를 클릭하여 서비스 계정 사용자 인증 정보를 사용합니다.
완료를 클릭하여 데이터 소스에 대한 변경사항을 저장합니다.
대시보드를 보려면 보기를 클릭합니다.
조직의 라벨을 사용하도록 대시보드 업데이트
대시보드의 여러 차트(예: Cost Reporting: Labels
페이지의 차트)는 리소스의 라벨을 기반으로 합니다. 특정 라벨별 비용을 정확하게 분류하려면 기본 필터를 수정하여 자체 라벨을 사용해야 합니다.
Looker Studio 홈페이지에서 대시보드를 엽니다.
수정을 클릭하여 대시보드를 수정합니다.
리소스 메뉴에서 필터 관리를 선택합니다.
labels.key
및project.labels.key
를 기반으로 하는 필터를 검토하고, 해당하는 경우 수정을 클릭하여 라벨 키를 조직에서 사용하는 키로 변경합니다.예를 들어
department
라벨 키를 사용하여 비즈니스 단위별로 리소스를 구성하는 경우business_unit
필터를 수정하고project.labels.key
필터를department
로 변경합니다.닫기를 클릭하여 필터 수정을 완료합니다.
대시보드에서 데이터 분석
Looker Studio 대시보드의 페이지는 비용 데이터를 세부적으로 나누어 표시하여, 비용 및 추세에 대한 간단한 요약 정보를 확인하고 지출에 대한 세부정보를 확인할 수 있도록 도와줍니다.
대부분의 페이지에서는 프로젝트별로 데이터를 필터링하거나, 캘린더를 사용하여 분석하려는 기간을 선택할 수 있습니다.
비용 개요 확인
개요 페이지를 사용하면 현재 및 이전 인보이스 대상 월의 순 비용, 주요 서비스의 비용, 지난 30일 동안의 일일 비용을 대략적으로 확인할 수 있습니다.
추세 페이지를 사용하여 이번 달과 지난달, 이번 분기와 지난 분기 등 여러 기간의 비용을 비교할 수 있습니다.
분석 페이지를 사용하여 시간 경과에 따른 비용을 분석하고 비정상적으로 높거나 낮은 지출과 같은 이상치를 식별할 수 있습니다.
비용 원인 식별
다음 페이지를 사용하여 어디에 가장 많은 비용을 지출하는지 파악하세요.
- 서비스별 월간 비용
- 프로젝트별 월간 비용
- 프로젝트, 서비스, SKU별 비용
- 리전별 비용
각 서비스의 비용을 자세히 살펴보려면 서비스별 페이지를 사용하세요. 예를 들어 GKE 클러스터 페이지에는 GKE 클러스터 및 네임스페이스별로 분류된 비용이 표시됩니다.
약정 사용 할인을 통한 비용 절감 기회 식별
약정 사용 할인(CUD)은 지정된 기간 동안 최소 수준 이상의 리소스를 사용하거나 최소 금액을 지출하겠다는 약속 하에 할인된 가격을 제공합니다.
대시보드의 CUD 페이지에는 CUD가 적용될 수 있는 Compute Engine, Cloud SQL, Memorystore 사용량이 표시됩니다. 이미 CUD가 하나 이상 있는 경우 이러한 페이지에는 기존 CUD가 아직 적용되지 않은 사용량만 표시됩니다.
Cloud Marketplace 소프트웨어 및 추가 라이선스 비용 보기
Marketplace 페이지를 사용하여 Cloud Marketplace에서 구매한 소프트웨어(예: Google Cloud NetApp Volumes)의 비용을 확인합니다.
라이선스 페이지에서 Compute Engine의 Windows Server 라이선스, Cloud Marketplace에서 구매한 서드 파티 라이선스 등 추가 라이선스에 지출하는 금액을 확인할 수 있습니다.
라벨별 비용 보기
대시보드의 필터를 맞춤설정하여 조직의 라벨을 사용할 수 있습니다. 필터를 업데이트한 후 다음 페이지를 사용하여 프로젝트 및 폴더 전반의 비용을 확인할 수 있습니다.
애플리케이션별 페이지에는 라벨 키
application
아래의 모든 리소스 비용이 표시됩니다. 예를 들어 웹과 모바일 앱이 있고 각각의 리소스에application:web
및application:mobile
라벨을 지정한 경우 각 애플리케이션의 비용을 별도로 확인할 수 있습니다.라벨 페이지에는 비용 센터, 비즈니스 코드와 같은 특정 라벨의 비용이 표시됩니다. 대시보드의 필터를 맞춤설정한 경우 필터가 반영되도록 차트의 제목을 변경할 수 있습니다.
(고급) 여러 Cloud Billing 계정의 데이터 수정
대시보드에 여러 Cloud Billing 계정의 데이터를 포함하려면 모든 Cloud Billing 계정의 결제 데이터 내보내기를 포함하도록 BigQuery 뷰를 수정하면 됩니다.
시작하기 전에
포함할 각 Cloud Billing 계정에 대해 튜토리얼 기본 요건의 모든 단계를 수행합니다.
추가 Cloud Billing 내보내기를 포함하도록 BigQuery 뷰 업데이트
Google Cloud 콘솔에서 BigQuery 페이지를 엽니다.
대시보드에 만든 데이터 세트가 포함된 프로젝트를 선택합니다.
탐색기 패널에서 프로젝트를 펼친 다음 데이터 세트를 확장합니다.
결제 보드 보기를 클릭하여 세부정보를 확인합니다. 이 뷰는 표준 비용 및 사용량 데이터 내보내기를 쿼리합니다.
세부정보 탭을 클릭한 다음 쿼리 수정을 클릭합니다. 뷰에 대한 쿼리는 다음과 유사합니다.
SELECT *, COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0) AS credits_sum_amount, COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0) + cost as net_cost, PARSE_DATE("%Y%m", invoice.month) AS Invoice_Month, date(usage_end_time) AS date from `PROJECT_ID.BILLING_ACCOUNT_EXPORT` s WHERE date(usage_end_time) > DATE_SUB(CURRENT_DATE(), INTERVAL 13 MONTH)
여기서 PROJECT_ID는 Cloud Billing용 BigQuery 표준 비용 데이터 내보내기가 포함된 프로젝트이고 BILLING_ACCOUNT_EXPORT는 표준 비용 데이터가 있는 BigQuery 테이블의 이름입니다.
기존 쿼리를 복제하고
FROM
절에서 프로젝트 ID와 BigQuery 테이블을 추가 Cloud Billing 계정의 정보로 바꿉니다.데이터를 결합하려면 두 쿼리 사이에
UNION ALL
연산자를 추가합니다. 최종 쿼리는 PROJECT_ID_1 및 PROJECT_ID_2에 있는 BILLING_ACCOUNT_1 및 BILLING_ACCOUNT_2의 데이터 내보내기를 결합한 다음 예시와 비슷합니다.SELECT *, --query for BILLING_ACCOUNT_1 COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0) AS credits_sum_amount, COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0) + cost as net_cost, EXTRACT(DATE FROM _PARTITIONTIME) AS date FROM `PROJECT_ID_1.BILLING_ACCOUNT_1_EXPORT` s WHERE _PARTITIONTIME >"2021-01-01" UNION ALL SELECT *, --query for BILLING_ACCOUNT_2 COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0) AS credits_sum_amount, COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0) + cost as net_cost, PARSE_DATE("%Y%m", invoice.month) AS Invoice_Month, date(usage_end_time) AS date from `PROJECT_ID_2.BILLING_ACCOUNT_2_EXPORT` s WHERE date(usage_end_time) > DATE_SUB(CURRENT_DATE(), INTERVAL 13 MONTH)
세부 비용 및 사용량 데이터를 쿼리하는 billboard_detail 뷰에 대해 이 단계를 반복합니다.
계정 중 하나가 USD와 다른 통화인 경우 다음 단계를 반복하고 다음 예시와 비슷하게
currency_conversion_rate
열을 사용하여 USD로 변환합니다.select *, (COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0))/currency_conversion_rate AS credits_sum_amount, (COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0))/currency_conversion_rate + cost/currency_conversion_rate as net_cost, 'USD' as net_cost_currency, PARSE_DATE("%Y%m", invoice.month) AS Invoice_Month, date(usage_end_time) AS date from `PROJECT_ID.BILLING_ACCOUNT_DATASET` s WHERE date(usage_end_time) > DATE_SUB(CURRENT_DATE(), INTERVAL 13 MONTH)