Prometheus CloudWatch 내보내기 도구를 사용하여 AWS CloudWatch 측정항목 수집

이 문서에서는 오픈소스 Prometheus CloudWatch 내보내기 도구와 Compute Engine 인스턴스에서 실행되는 운영 에이전트를 사용하여 AWS CloudWatch 측정항목을 수집하고 Google Cloud 프로젝트에 저장하는 방법을 설명합니다.

이 문서는 AWS CloudWatch 측정항목을 수집해야 하는 개발자 및 시스템 관리자를 대상으로 작성되었습니다. 이 문서에서는 AWS CloudWatch 측정항목을 수집하도록 Prometheus CloudWatch 내보내기 도구를 설정하는 방법을 설명합니다.

Cloud Monitoring을 사용하면 Google Cloud 측정항목과 동일한 컨텍스트에서 AWS 측정항목을 볼 수 있습니다. 예를 들어 Amazon EC2 인스턴스 및 Compute Engine 인스턴스의 CPU 사용률을 표시하는 차트가 포함된 대시보드를 만들 수 있습니다. AWS 측정항목을 모니터링하는 알림 정책을 만들 수도 있습니다. 자세한 내용은 다음 섹션을 참조하세요.

시작하기 전에

Prometheus CloudWatch 내보내기 도구를 사용하여 AWS CloudWatch 측정항목을 수집하려면 다음이 필요합니다.

  • 다음 작업을 수행할 권한이 있는 Google Cloud 프로젝트:
    • VM 만들기
    • Cloud Logging에 로그 작성
    • Cloud Monitoring에 측정항목 기록
  • Prometheus 내보내기 도구가 측정항목을 가져오는 데 사용할 수 있는 AWS 사용자 인증 정보가 있는 AWS 계정. 자세한 내용은 Prometheus 내보내기 도구 실행을 참조하세요.

Compute Engine VM 만들기

특히 운영 에이전트 및 Prometheus CloudWatch 내보내기 도구를 실행하는 데 사용할 Linux Compute Engine VM을 만드는 것이 좋습니다. 이 VM은 모든 AWS 측정항목의 수집 사이트 역할을 합니다.

  1. 지정한 영역에 aws-exporter-test라는 Debian Linux VM을 만들려면 다음 명령어를 실행합니다.

    gcloud compute instances create \
      --image-project debian-cloud \
      --image-family debian-11 \
      --zone ZONE \
      aws-exporter-test
    

    다음과 같이 명령어를 구성합니다.

    • ZONE을 새 VM의 영역으로 바꿉니다.
    • 선택사항. aws-exporter-test를 VM의 다른 이름으로 바꿉니다.

    이 명령어에 대한 자세한 내용은 gcloud compute instances create 참조를 확인하세요.

  2. Prometheus CloudWatch 내보내기 도구 및 운영 에이전트를 설치할 수 있도록 VM에 액세스하려면 다음 명령어를 사용합니다.

    gcloud compute ssh --zone ZONE  --project PROJECT_ID  aws-exporter-test
    

    다음과 같이 명령어를 구성합니다.

    • ZONE을 VM을 만든 영역으로 바꿉니다.
    • PROJECT_ID를 Google Cloud 프로젝트의 ID로 바꿉니다.
    • VM을 만든 경우 aws-exporter-test를 다른 이름으로 바꿉니다.

    이 명령어에 대한 자세한 내용은 gcloud compute ssh 참조를 확인하세요.

Prometheus CloudWatch 내보내기 도구 설정

다음 섹션에서는 Compute Engine VM에서 Prometheus CloudWatch 내보내기 도구를 다운로드, 설치, 구성하는 절차를 설명합니다.

Prometheus 내보내기 도구 및 JRE 다운로드

Prometheus CloudWatch 내보내기 도구를 실행하려면 내보내기 도구와 Java 런타임 환경(JRE) 버전 11 이상을 다운로드해야 합니다.

  1. Prometheus CloudWatch 내보내기 도구가 포함된 JAR 파일을 다운로드하려면 Compute Engine 인스턴스에서 다음 명령어를 실행합니다.

    curl -sSO https://github.com/prometheus/cloudwatch_exporter/releases/download/v0.15.1/cloudwatch_exporter-0.15.1-jar-with-dependencies.jar
    
  2. JRE를 설치하려면 다음과 같은 명령어를 사용하면 됩니다.

    sudo apt install default-jre
    

Prometheus 내보내기 도구 구성

Prometheus CloudWatch 내보내기 도구를 구성하려면 측정항목을 수집할 AWS 서비스의 구성 파일을 만듭니다. 일반적인 정보는 Prometheus CloudWatch 내보내기 도구 구성 문서를 참조하세요.

  • 사용자 마이그레이션: 기존 AWS CloudWatch 측정항목을 Prometheus CloudWatch 내보내기 도구로 이전하려는 경우 마이그레이션을 위한 Prometheus CloudWatch 내보내기 도구 구성에서 구성 파일을 사용할 수 있습니다. 이러한 구성 파일은 기존 측정항목을 최대한 가깝게 복제하도록 설계되었지만 AWS 서비스용 Prometheus CloudWatch 내보내기 도구를 사용하여 사용 가능한 모든 측정항목을 수집하지는 않습니다.

  • 신규 사용자: 기존 측정항목을 이전하지 않는 경우 이전 구성을 사용하지 않는 것이 좋습니다. 다른 서비스의 내보내기 도구 구성을 정의하는 방법은 AWS CloudWatch 서비스 문서를 참조하세요. Prometheus CloudWatch 내보내기 도구 GitHub 저장소에서도 추가 샘플을 확인할 수 있습니다.

여러 AWS 서비스의 구성을 하나의 구성 파일로 조합합니다. 이 문서의 예에서는 구성 파일 이름을 config.yml이라고 가정합니다.

Prometheus 내보내기 도구 실행

Prometheus CloudWatch 내보내기 도구를 실행하려면 내보내기 도구에 사용자 인증 정보 및 승인을 제공해야 합니다. Prometheus CloudWatch 내보내기 도구는 다음 환경 변수를 사용하여 사용자 인증 정보를 제공하는 방법을 제공하는 AWS Java SDK를 사용합니다.

SDK에 사용자 인증 정보를 제공하는 방법에 대한 자세한 내용은 Java 2.x용 AWS SDK를 참조하세요.

또한 측정항목을 검색하려면 CloudWatch API를 사용할 수 있는 권한이 있어야 하며, 다음 AWS IAM CloudWatch 권한이 필요합니다.

  • cloudwatch:ListMetrics
  • cloudwatch:GetMetricStatistics
  • cloudwatch:GetMetricData

aws_tag_select 기능을 사용하려면 tag:GetResources AWS IAM 권한도 필요합니다.

AWS 서비스 액세스 승인에 대한 자세한 내용은 AWS Identity and Access Management를 참조하세요.

Prometheus CloudWatch 내보내기 도구를 실행하려면 다음을 수행합니다.

  1. 내보내기 도구에 사용자 인증 정보를 제공하려면 액세스 키 환경 변수를 설정합니다.

    export AWS_ACCESS_KEY=YOUR_ACCESS_KEY
    export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY
    export AWS_SESSION_TOKEN=YOUR_SESSION_TOKEN
    

    YOUR_KEY 변수를 액세스 키로 바꿉니다. AWS_SESSION_TOKEN 환경 변수는 임시 사용자 인증 정보를 사용하는 경우에만 설정해야 합니다.

  2. 구성을 테스트하려면 내보내기 도구를 시작하고 구성 파일을 로드하려면 다음 명령어를 실행합니다.

    java -jar cloudwatch_exporter-0.15.1-jar-with-dependencies.jar 9106 config.yml
    

    필요한 경우 포트(9106) 및 구성 파일(config.yml) 값을 변경합니다.

    내보내기 도구가 실행되는 동안 config.yml 파일을 수정할 경우 다음 명령어를 실행하여 내보내기 도구를 새로고침할 수 있습니다.

    curl -X POST localhost:9106/-/reload
    

    프로덕션 환경에서 사용하려면 VM이 다시 시작될 경우 다시 시작하도록 내보내기 도구를 구성하면 됩니다. 예를 들어 Debian 시스템에서는 시스템 및 서비스 관리자 systemd를 사용할 수 있습니다.

운영 에이전트 설정

다음 섹션에서는 운영 에이전트를 설치, 구성하여 시작하는 방법을 설명합니다. 이 섹션에서는 운영 에이전트가 Prometheus CloudWatch 내보내기 도구에 사용할 최소한의 설정 정보를 제공합니다. 이러한 주제에 대한 자세한 내용은 운영 에이전트 개요를 참조하세요.

운영 에이전트 설치

운영 에이전트를 설치하려면 다음 명령어를 사용하여 에이전트의 설치 스크립트를 다운로드하고 실행합니다.

curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
sudo bash add-google-cloud-ops-agent-repo.sh --also-install

운영 에이전트 구성

운영 에이전트를 구성하려면 에이전트의 사용자 구성 파일에 구성 요소를 추가합니다. Linux에서 사용자 구성 파일은 /etc/google-cloud-ops-agent/config.yaml입니다.

Prometheus CloudWatch 내보내기 도구에서 AWS 측정항목을 수집하도록 운영 에이전트를 구성할 때 에이전트의 Prometheus 수신자를 사용합니다. 이 문서에서는 운영 에이전트의 두 가지 기본 구성을 설명합니다. 구성 중 하나를 선택하여 사용자 구성 파일에 추가합니다.

sudo vim /etc/google-cloud-ops-agent/config.yaml

운영 에이전트의 기본 구성

다음 구성은 운영 에이전트의 최소 구성을 제공합니다. 이 구성은 다음을 수행합니다.

  • 이름이 aws이고 유형이 prometheus인 수신자를 만듭니다. 수신자는 aws_exporter 작업에서 측정항목을 스크레이핑하도록 구성됩니다. 지정된 포트는 Prometheus CloudWatch 내보내기 도구가 측정항목을 내보내는 포트와 일치해야 합니다. Prometheus 내보내기 도구 실행을 참조하세요.

  • aws 측정항목 수신자를 사용하는 aws_pipeline이라는 파이프라인을 만듭니다.

metrics:
  receivers:
    aws:
      type: prometheus
      config:
        scrape_configs:
          - job_name: 'aws_exporter'
            scrape_interval: 10s
            static_configs:
              - targets: ['localhost:9106']
  service:
    pipelines:
      aws_pipeline:
        receivers:
          - aws

JVM 측정항목을 삭제하는 구성

다음 구성은 기본 구성에서 수행하는 모든 작업을 수행하지만 내보내기 도구로 생성된 JVM 측정항목을 삭제하는 라벨 재지정 구성도 추가합니다. 이러한 측정항목을 삭제하면 수집된 측정항목 데이터가 줄어들지만 내보내기 도구의 자체 측정항목을 받을 수 없으므로 내보내기 도구에서 디버깅이 어려워지는 문제가 발생할 수 있습니다.

metrics:
  receivers:
    aws:
      type: prometheus
      config:
        scrape_configs:
          - job_name: 'aws_exporter'
            scrape_interval: 10s
            static_configs:
              - targets: ['localhost:9106']
            # Drop the exporter's own JVM metrics to reduce noise.
            metric_relabel_configs:
              - source_labels: [ __name__ ]
                regex: 'jvm_.*'
                action: drop
  service:
    pipelines:
      aws_pipeline:
        receivers:
          - aws

운영 에이전트에 훨씬 더 복잡한 구성을 만들 수 있습니다.

운영 에이전트 다시 시작

운영 에이전트에 구성 변경사항을 적용하려면 에이전트를 다시 시작해야 합니다.

  1. 에이전트를 다시 시작하려면 인스턴스에서 다음 명령어를 실행합니다.
    sudo service google-cloud-ops-agent restart
    
  2. 에이전트가 다시 시작되었는지 확인하려면 다음 명령어를 실행하고 '측정항목 에이전트' 및 'Logging 에이전트' 구성요소가 시작되었는지 확인합니다.
    sudo systemctl status google-cloud-ops-agent"*"
    

Cloud Monitoring에서 측정항목 보기

Cloud Monitoring에서 AWS CloudWatch 측정항목을 쿼리하고 다른 측정항목과 마찬가지로 차트를 만들 수 있습니다. 측정항목 탐색기 인터페이스에서 PromQL, Monitoring Query Language(MQL) 또는 쿼리 빌더 인터페이스를 사용할 수 있습니다. 자세한 내용은 측정항목 탐색기로 차트 만들기를 참조하세요.

보관할 차트를 만든 경우 커스텀 대시보드에 저장할 수 있습니다. 자세한 내용은 대시보드 개요를 참고하세요.

다음 차트는 AWS VM의 aws_ec2_cpuutilization_sum 측정항목에 관한 PromQL 쿼리를 보여줍니다.

이 차트는 PromQL을 사용하여 AWS VM의 aws_ec2_cpuutilization_sum 통계를 가져온 결과를 보여줍니다.

PromQL을 사용하여 Cloud Monitoring의 모든 측정항목을 쿼리할 수 있습니다. 자세한 내용은 Cloud Monitoring 측정항목을 PromQL에 매핑을 참고하세요.

PromQL을 사용하거나 모니터링 쿼리 언어(MQL)와 같은 Cloud Monitoring 도구를 사용하여 Prometheus 측정항목을 쿼리할 수 있습니다. Prometheus 측정항목이 Cloud Monitoring에 수집되면 각 측정항목은 표준 OpenTelemetry-Prometheus 변환을 사용하여 변환되고 Cloud Monitoring prometheus_target monitored-resource-type에 매핑됩니다. 변환에는 다음 변경사항이 포함됩니다.

  • 측정항목 이름에는 prometheus.googleapis.com/ 문자열이 프리픽스로 추가됩니다.
  • 측정항목 이름에 마침표(.)와 같은 영숫자가 아닌 문자는 밑줄(_)로 바뀝니다.
  • 측정항목 이름에는 /gauge 또는 /counter와 같은 측정항목 종류를 나타내는 문자열이 뒤에 붙습니다.

MQL을 사용하여 Prometheus aws_ec2_cpuutilization_sum 측정항목을 쿼리하려면 측정항목을 prometheus.googleapis.com/aws_ec2_cpuutilization_sum/gauge로 참조하고 prometheus_target 모니터링 리소스 유형을 지정합니다.

fetch prometheus_target :: 'prometheus.googleapis.com/aws_ec2_cpuutilization_sum/gauge'

다음 차트는 Prometheus aws_ec2_cpuutilization_sum 측정항목의 MQL 쿼리 결과를 보여줍니다.

MQL을 사용하여 AWS VM의 aws_ec2_cpuutilization_sum 통계를 가져온 결과를 보여주는 차트

측정항목 동작에 대한 알림

Cloud Monitoring에서 [알림 정책][alert-intro]를 만들어 AWS CloudWatch 측정항목을 모니터링하고 측정항목 값의 급증, 하락, 트렌드를 알릴 수 있습니다.

  • MQL 기반 알림을 만드는 방법에 대한 자세한 내용은 MQL을 사용한 알림 정책을 참고하세요.
  • 쿼리 빌더 인터페이스를 사용하여 알림 정책을 만드는 방법에 대한 자세한 내용은 알림 정책 만들기를 참조하세요.

여러 리전 모니터링

Prometheus CloudWatch 내보내기 도구 구성은 구성 파일당 하나의 리전만 사용하도록 지원합니다. 여러 리전을 모니터링해야 하는 경우 모니터링하려는 리전마다 하나씩 구성된 Prometheus 내보내기 도구의 여러 인스턴스를 실행하는 것이 좋습니다. 단일 VM에서 여러 내보내기 도구를 실행하거나 VM에 배포할 수 있습니다. 이 경우 Prometheus 내보내기 도구 Docker 이미지가 유용할 수 있습니다.

Compute Engine VM에서 실행되는 운영 에이전트가 여러 Prometheus 엔드포인트를 스크래핑하도록 구성할 수 있습니다. Prometheus 내보내기 도구의 여러 인스턴스를 구성할 때 문제 해결이 필요한 경우 내보내기 도구 인스턴스를 구분할 수 있도록 각 스크래핑 구성에 다른 job 이름을 사용하는 것이 좋습니다.

운영 에이전트 및 Prometheus 수신자 구성에 대한 자세한 내용은 운영 에이전트 구성을 참조하세요.

비용

Amazon은 CloudWatch API 요청 또는 요청하는 모든 CloudWatch 측정항목에 요금을 청구합니다. 현재 가격 책정은 Amazon CloudWatch 가격 책정을 참조하세요. Prometheus CloudWatch 내보내기 도구에는 Amazon 비용에 영향을 줄 수 있는 다음과 같은 쿼리 특성이 있습니다.

  • GetMetricStatistics 메서드(기본값)를 사용할 때는 모든 측정항목에 API 요청이 한 개 필요합니다. 각 요청에는 여러 통계가 포함될 수 있습니다.
  • aws_dimensions를 사용하는 경우 내보내기 도구는 요청하는 측정항목을 결정하기 위해 API 요청을 수행해야 합니다. 측정기준 요청 수는 일반적으로 측정항목 요청 수에 비해 무시할 수 있는 정도입니다.

Cloud Monitoring은 수집된 샘플 수에 따라 Prometheus 내보내기 도구의 AWS CloudWatch 측정항목에 대한 요금을 청구합니다. 현재 가격 책정은 Monitoring 가격 책정 요약을 참조하세요.

마이그레이션을 위한 Prometheus CloudWatch 내보내기 도구 구성

이 섹션에서는 AWS 측정항목 목록에 문서화된 AWS 서비스 측정항목을 최대한 비슷하게 복제하는 구성을 제공합니다. 이러한 구성 파일은 기존 솔루션에서 Prometheus CloudWatch 내보내기 도구로 마이그레이션하는 고객이 사용할 수 있습니다. 마이그레이션하는 사용자가 아닌 Prometheus CloudWatch 내보내기 도구를 새 사용자로 설정하고 이러한 구성을 사용하는 경우 Prometheus CloudWatch 내보내기 도구를 사용할 수 있는 모든 AWS 측정항목을 수집하지 않습니다.

AWS CloudWatch 측정항목의 샘플 구성 파일을 보려면 다음 섹션 중 하나를 펼치세요.