Amazon Web Services 한국 블로그

비용 최적화 시리즈 1부: AWS 사용량에 대한 시각화로 비용 최적화 인사이트 얻기

이 글은 AWS Cloud Operations & Migrations Blog에 게시된 Visualize and gain insights into your AWS cost and usage with Amazon Managed Grafana를 한국어로 번역 및 편집하였습니다.

기존 워크로드를 AWS로 마이그레이션 하고 사용량이 증가함에 따라 AWS의 사용 현황을 세부적으로 파악하여 발생되는 비용과 사용량을 효과적으로 관리하는 것이 중요해졌습니다. AWS는 고객의 워크로드에서 발생되는 비용을 시각화하거나 비정상적인 사용량을 감지할 수 있도록 AWS Cost Explorer, AWS Budgets, AWS Cost Anomaly Detection와 같은 다양한 서비스를 기본으로 제공하며, AWS 비용 및 사용량 보고서(CUR)를 사용하여 AWS 리소스들에 대한 세부적인 비용 및 사용량을 분석할 수 있습니다.

Amazon Managed Grafana는 고객이 여러 데이터 소스에서 생성되는 애플리케이션의 운영 메트릭이나 로그들을 즉시 쿼리하고 상호 연계하여 시각화할 수 있는 완전 관리형 데이터 시각화 서비스입니다. Amazon Managed Grafana는 오픈 소스 Grafana와 호환되며 Amazon CloudWatch, Amazon OpenSearch Service, Amazon Athena, Amazon Managed Service for Prometheus (AMP)와 같이 운영 데이터를 수집하는 AWS 데이터 소스와 통합됩니다. 또한, 널리 사용되는 오픈소스 데이터베이스나 3rd party ISV 모니터링 도구, 기타 클라우드 서비스에 대한 플러그인을 제공합니다. Amazon Managed Grafana를 사용하면 여러 AWS 서비스와 AWS 계정 및 리전의 정보를 단일 대시보드에서 쉽게 시각화할 수 있습니다.

Amazon Athena는 표준 SQL을 사용하여 데이터를 쉽게 분석할 수 있는 대화형 쿼리 서비스입니다. Athena는 서버리스 서비스 이므로 관리할 인프라가 없고 실행한 쿼리에 대해서만 비용을 지불하면 됩니다.

본 게시글에서는 Amazon Athena 플러그인을 사용하면서 Amazon Managed Grafana를 통해 AWS 비용 및 사용량 데이터를 시각화하고 분석하는 방법을 안내해 드립니다.

Solution overview

아래 다이어그램은 본 블로그에서 설명하게될 전체 아키텍쳐 입니다.

그림 1. 비용 및 사용량 보고서(CUR)를 Amazon S3, Amazon Athena 및 Amazon Managed Grafana와 통합하여 AWS 리소스에 대한 비용 및 사용량 데이터를 시각화하고 분석할 수 있습니다.

먼저 CloudFormation 템플릿을 사용하여 AWS 비용 및 사용량 보고서(CUR)를 생성하고 이를 S3 버킷에 저장합니다. 그런 다음 Athena를 사용하여 CUR 보고서를 분석하고 쿼리합니다. 마지막으로, Amazon Managed Grafana에서 Athena 플러그인을 이용해 CUR 보고서의 비용 및 사용량 데이터를 시각화해 보겠습니다.

1단계: 비용 및 사용량 보고서 설정 및 생성

이 솔루션은 AWS 비용 및 사용량 보고서(CUR)에 있는 청구 데이터를 활용합니다. AWS CUR은 비용과 사용량을 시간 또는 리소스 ARN 단위로 세분화하며, 가장 포괄적인 비용 및 사용량 데이터 세트를 포함합니다.

  • CUR 보고서를 생성하려면 비용 및 사용량 보고서 생성하기에서 자세한 지침을 따릅니다. CUR을 생성할 때 다음 옵션을 고려해야합니다.:
    AWS CUR을 저장할 새 Amazon S3 버킷을 구성합니다. 버킷 이름은 demo-cur-report-XXXX<사용자 계정 등> 이라고 지정합니다.
  • “리소스 ID 포함”을 선택합니다. 많은 청구 레코드에 자동으로 리소스 ID가 포함되므로 청구서의 세그먼트를 이해할 때 유용한 컨텍스트가 될 수 있습니다.
  • “마감된 청구서가 있는 이전 달의 요금이 감지되면 비용 및 사용량 보고서 자동으로 새로 고침”을 선택합니다. 이렇게 하면 일부 환불, 크레딧 및 AWS 지원 요금은 해당 월이 마감된 후에 계산되므로 가장 정확하게 표시할 수 있습니다.

그림 2. AWS 비용 및 사용량 보고서 생성

  • 보고서 버전 관리를 위해 ‘기존 보고서 덮어쓰기(Overwrite existing report)’를 선택합니다. CUR이 제공될 때 전체 월의 데이터가 하루에 여러 번 기록됩니다. 덮어쓰기를 사용하면 현재 월의 최신 사본만 사용할 수 있으며 중복 데이터를 저장하지 않아도 됩니다.
  • 사용 가능한 가장 높은 세분성을 받으려면 “시간별(Hourly)”을 선택합니다.
  • 보고서 데이터 통합 사용 대상에 대해 “Amazon Athena”를 선택합니다. 그러면 Athena가 Grafana 대시보드에 대한 효율적인 쿼리를 실행하는 데 필요한 (Apache) Parquet 압축 유형이 자동으로 선택됩니다.
  • AWS에서 첫 번째 보고서를 생성하고 S3 버킷으로 전송하는데 최대 24시간이 걸릴 수 있습니다.

그림 3. AWS 비용 및 사용량 보고서를 위한 S3 전송 옵션

2단계: Athena를 사용하여 AWS CUR 쿼리하기

Amazon Athena의 표준 SQL을 사용하여 S3에서 AWS CUR의 데이터를 쿼리하고 분석해 보겠습니다.

비용 및 사용량 보고서와 Athena의 일회성 통합을 간소화 및 자동화하기 위해 AWS는 AWS CloudFormation 템플릿을 제공합니다. 이렇게 하면 분석을 위해 데이터를 준비하기 위해 추가 작업을 할 필요 없이 최신 비용 및 사용량 정보를 항상 Athena에서 사용할 수 있습니다. AWS CloudFormation 템플릿을 사용하여 Athena 설정에 대한 자세한 지침에 따라 Athena와의 통합을 완료합니다.

Grafana 쿼리를 위한 Athena 작업 그룹 생성 및 IAM 권한 구성

Athena는 워크그룹을 지원하여 사용자 또는 애플리케이션 간에 워크로드 구성을 분리할 수 있습니다. 이 솔루션은 전용 작업 그룹을 사용하여 Athena 쿼리 및 원본 AWS CUR 데이터에 대한 액세스를 간소화합니다.

Amazon Managed Grafana의 쿼리 결과를 저장하기 위해 S3 버킷을 만들어 보겠습니다. S3 버킷 보안에 대해 자세히 알아보려면 Amazon S3의 보안 모범 사례를 참조합니다.

  • AWS 관리 콘솔의 서비스 메뉴에서 S3를 선택합니다.
  • S3 버킷 이름에 다음 접두사를 사용하여 서비스 관리형 AWS ID 및 액세스 관리(IAM) 정책과의 호환성을 확인합니다: grafana-athena-query-results-XXXX
    (S3 버킷 이름 예시: grafana-athena-query-results-test-230512)

다른 S3 버킷 이름을 사용하여 쿼리 결과를 저장하려는 경우, 다음과 같이 IAM 역할 AmazonGrafanaServiceRole-XXXX에 대한 S3 버킷에 대해 s3.Get*s3.List* 권한을 추가해야 합니다.

그림 4. AmazonGrafanaServiceRole에 대한 권한 구성

  • AWS 리전의 경우, Amazon Managed Grafana 작업 공간을 배포하려는 동일한 AWS 리전에서 S3 버킷을 생성해야 합니다.

이제 Grafana 쿼리를 위한 새로운 Athena 작업 그룹을 생성하겠습니다:

  • 콘솔의 서비스 메뉴에서 Athena를 선택합니다.
  • 왼쪽 메뉴에서 작업 그룹(Workgroups)을 선택합니다.
  • 작업 그룹 만들기(Create workgroup)를 선택합니다.
    • 작업 그룹 이름을 입력합니다. 예: Grafana.
    • 조회 결과 위치는 ‘비용 및 사용량 리포트 설정 및 생성’ 섹션에서 생성한 버킷의 S3 경로를 입력합니다.
    • S3 버킷 이름 예시: s3://grafana-athena-query-results-XXXX

그림 5. 쿼리 결과를 S3에 저장하기 위한 Athena 작업 그룹 구성

  • 태그의 경우 새 태그 추가(Add new tag)를 선택합니다.
  • 태그 키를 클릭합니다: GrafanaDataSource
  • 태그 값: true
  • 작업 그룹 만들기를 선택합니다.

위의 키와 값으로 태그를 추가하는 것은 Athena 작업 그룹과 함께 Amazon Managed Grafana 작업 공간의 서비스 관리형 IAM 정책을 사용하는 데 필수적입니다.

그림 6. 그라파나 데이터소스를 위한 아테나 워크그룹 태깅

이제 기능적인 Athena 쿼리 에디터를 사용할 수 있습니다. 이제 새 작업 그룹에서 AWS CUR 데이터에 대해 SQL과 유사한 쿼리를 실행할 수 있습니다. Athena에서 SQL 쿼리를 실행하는 방법에 대한 자세한 내용은 Amazon Athena 쿼리 실행하기를 참조하세요.

3단계: Amazon Managed Grafana 워크스페이스 설정하기

Amazon Managed Grafana를 구성하고 설정하는 방법에 대한 자세한 내용은 Amazon Managed Grafana – 시작하기를 참조하세요. Amazon Managed Grafana를 사용하면 AWS IAM Identity Center 또는 기타 SAML 기반 IdP(신원 공급자)를 통해 사용자 액세스를 구성할 수 있습니다. 이 게시물에서는 Amazon Managed Grafana와 함께 AWS IAM Identity Center 옵션을 사용합니다. 인증 및 권한 부여를 설정하려면 Amazon Managed Grafana 사용자 가이드의 지침에 따라 AWS IAM Identity Center를 활성화하세요.

Amazon Managed Grafana에서 Athena 데이터 소스 구성하기

Amazon Managed Grafana에서 Athena 데이터 소스를 구성하기 전에 S3에서 이미 AWS CUR을 사용할 수 있는지, Amazon Athena를 사용하여 AWS CUR 데이터를 쿼리할 수 있는지 확인하세요.

  • 왼쪽 탐색 메뉴의 AWS 로고에서 AWS 서비스(AWS Services)를 선택합니다.
  • 그러면 선택할 수 있는 모든 AWS 데이터 소스가 표시되는 화면으로 이동합니다. 목록에서 Athena를 선택합니다.

그림 7. Amazon Managed Grafana의 데이터 소스

  • Athena 및 S3 버킷이 설정된 리전을 선택합니다.
  • AWS CUR 리포팅을 위해 설정한 Athena 워크그룹에 해당하는 데이터베이스 + 워크스페이스를 확인합니다.

그림 8. Amazon Managed Grafana에서 데이터 소스 추가

  • 데이터 소스 1개 추가를 선택합니다. 지정한 작업 그룹이 이전 섹션 ‘Grafana 쿼리를 위한 Amazon Athena 작업 그룹 만들기’에서 만든 작업 그룹인지 확인합니다.
  • 이제 설정으로 이동하여 저장 및 테스트를 선택하여 데이터 소스가 예상대로 작동하는지 확인합니다.

그림 9. Amazon Managed Grafana의 아테나 데이터 소스

AmazonGrafanaServiceRole-XXXX에 대한 IAM 권한 구성

이제 콘솔의 서비스 메뉴에서 IAM을 선택하고 역할에서 AmazonGrafanaServiceRole-XXXX 역할을 검색합니다.

AmazonS3ReadOnlyAccess AWS 관리형 정책을 첨부하여 Amazon Managed Grafana가 AWS CUR 보고서로 S3 버킷을 쿼리할 수 있도록 합니다. IAM 정책을 특정 S3 버킷으로 제한할 수도 있습니다. 자세한 내용은 IAM 정책 작성하기 포스팅에서 확인할 수 있습니다: Amazon S3 버킷에 대한 액세스 권한을 부여하는 방법.

그림 10. Amazon Managed Grafana의 서비스 역할에 대한 IAM 권한 구성 Amazon Managed Grafana의 서비스 역할 대시보드

4단계: Grafana 대시보드 시각화하기

Amazon Managed Grafana에는 Athena 데이터 소스에 대한 비용 및 사용량 분석을 위한 기본 Grafana 대시보드가 있습니다.

기본 ‘Athena 비용 및 사용량 보고서 대시보드

기본 Amazon Managed Grafana 대시보드를 가져오려면, Athena 데이터 소스 화면에서 다음과 같이 두 번째 탭 대시보드를 선택합니다.

그림 11. Amazon 관리형 그라파나의 기본 큐레이팅된 비용 및 사용량 보고서 대시보드

대시보드를 가져오려면 Athena 비용 및 사용량 보고서 옆의 가져오기를 선택합니다. 대시보드 메뉴에서 ‘브라우저’를 선택하여 모든 그라파나 대시보드를 확인합니다.

그림 12. Amazon Managed Grafana의 대시보드 관리

AWS CUR 보고서에서 비용 및 사용량 메트릭을 보여주는 Grafana 대시보드를 확인할 수 있습니다.

그림 13. Amazon Managed Grafana의 기본 큐레이션된 ‘비용 및 사용량’ 대시보드

사용자 지정 비용 및 사용량 SQL 쿼리

고유한 SQL 쿼리를 사용하여 사용자 정의 비용 및 사용량 Grafana 패널과 대시보드를 만들 수도 있습니다. 예를 들어, 다음 쿼리는 각 지역의 AWS 서비스별 연간 누계 비용을 보여줍니다.

SELECT
	bill_payer_account_id,
	line_item_product_code,
	product_region,
	sum(cast(line_item_blended_cost as DECIMAL(16,2))) AS cost,
	pricing_term
FROM demo_cur_report
WHERE year = '2022'
GROUP BY
	bill_payer_account_id,
	line_item_product_code,
	product_region,
	pricing_term
HAVING sum(cast(line_item_blended_cost as DECIMAL(16,2))) > 0
ORDER BY line_item_product_code;

이제 새 Amazon Managed Grafana 대시보드를 만들고 새 패널에서 이전 SQL 쿼리를 사용하여 다음과 같이 데이터를 시각화해 보겠습니다.

그림 14. Amazon Managed Grafana에서 사용자 지정 SQL 쿼리 및 Athena 데이터 소스 사용 살펴보기

저장 및 적용을 선택합니다. Grafana 대시보드는 다음과 같이 표시됩니다.

그림 15. 저장 및 적용 – Amazon Managed Grafana의 사용자 지정 비용 및 사용량 대시보드

AWS CUR 데이터에 대한 추가 SQL 쿼리는 비용 및 사용량 분석 및 AWS CUR 쿼리 라이브러리에서 확인할 수 있습니다. AWS CUR 쿼리 라이브러리는 비용 및 사용량 보고서(CUR) 데이터를 분석하기 위해 큐레이션된 SQL 쿼리 모음입니다. 비용 분석은 각 비즈니스마다 고유하지만 이러한 쿼리는 특정 요구 사항에 맞게 수정할 수 있도록 고안되었습니다.

비용 및 사용량 보고서(CURE) Grafana 대시보드 생성(선택 사항)

AWS CUR 통합을 통해 Amazon Managed Grafana 기능을 시연하기 위해 Amazon Managed Grafana 환경으로 쉽게 가져올 수 있는 비용 및 사용량 보고서(CURE) 대시보드를 만들었습니다.

CURE 대시보드는 EC2(예약 인스턴스절약 요금제 포함), EBS 스토리지, 데이터 전송RDS에 대한 요약 보기와 세분화된 서비스 수준 보기를 제공하는 사용자 정의 가능한 Amazon Managed Grafana 대시보드입니다. 대시보드를 통해 재무, DevOps 및 IT 팀은 AWS 비용과 사용량을 심층적으로 분석하고 최적화할 수 있습니다. 고객은 서비스 채택에 따라 약간의 노력으로 섹션을 수정하거나 추가할 수 있습니다.

CURE 대시보드를 가져오려면 이 위치에서 JSON 파일 콘텐츠를 다운로드할 수 있습니다.

curl -S https://github.com/aws-observability/observability-best- practices/raw/main/sandbox/cure-grafana- dashboard/AmazonManagedGrafanaCUREDashboard.json -o AmazonManagedGrafanaCUREDashboard.json

이제 JSON 파일 콘텐츠를 Amazon Managed Grafana로 가져옵니다. Amazon Managed Grafana 콘솔에 로그인하고 왼쪽 리본 패널에서 +가져오기 버튼을 선택합니다. 패널을 통해 가져오기 json 텍스트 상자에 복사한 JSON 파일 콘텐츠를 붙여넣고 드롭다운에서 AWS Athena 데이터 소스를 선택합니다. 그런 다음 가져오기 버튼을 선택하면 CURE 대시보드가 표시됩니다.

아래 이미지와 유사한 대시보드의 여러 섹션이 표시됩니다. 또한 연결된 AWS 계정, AWS 리전 및 AWS 서비스를 사용하여 필터링하고 모니터링할 수 있습니다.

그림 16. EC2 인스턴스용 Amazon Managed Grafana의 비용 및 사용량 보고서(CURE) 대시보드

스토리지

그림 17. AWS의 데이터 전송을 위한 Amazon Managed Grafana의 비용 및 사용량 보고서(CURE) 대시보드

데이터 전송

그림 18. AWS의 데이터 전송을 위한 Amazon Managed Grafana의 비용 및 사용량 보고서(CURE) 대시보드

RDS/Aurora

그림 19. RDS/Aurora 인스턴스용 Amazon Managed Grafana의 비용 및 사용량 보고서(CURE) 대시보드

전체 요약

그림 20. 전체 요약을 위한 Amazon Managed Grafana의 비용 및 사용량 보고서(CURE) 대시보드

정리

이 게시물을 위해 생성한 인프라를 삭제할 때까지 비용이 계속 발생합니다. Amazon Managed Grafana 및 S3 콘솔로 이동하여 생성한 Amazon Managed Grafana 작업 공간과 S3 버킷을 삭제합니다.

결론

이 블로그 게시물에서는 Amazon Athena 플러그인을 사용하여 Amazon Managed Grafana로 AWS 비용 및 사용량 보고서(CUR) 데이터를 시각화하고 분석하는 방법을 보여드렸습니다. 또한 자체 SQL 쿼리를 사용하여 특정 비즈니스 사용 사례에 맞는 비용 및 사용량 Grafana 대시보드를 생성하고 개선하는 방법도 보여드렸습니다. 또한 EC2, 스토리지, 데이터 전송, RDS/Aurora 비용을 모니터링하기 위해 큐레이션된 비용 및 사용량 보고서(CURE) 대시보드도 검토했습니다. 데모를 보시려면 Amazon Managed Grafana로 AWS 비용 및 사용량 시각화하기 동영상을 확인하세요. One Observability Workshop에서 AWS 통합 가시성 서비스를 직접 체험해 볼 수 있습니다.