Cloud Monitoring 커스텀 측정항목으로 인스턴스 그룹 자동 확장

이 가이드에서는 커스텀 Cloud Monitoring 측정항목의 값을 기준으로 자동 확장되는 Compute Engine 관리형 인스턴스 그룹을 설정하는 방법을 보여줍니다. 이 가이드에서 소개된 기법을 사용하여 관리형 인스턴스 그룹을 확장하기 위한 자체 모니터링 측정항목을 구현할 수 있습니다.

목표

  • 자동 확장 Compute Engine 인스턴스 그룹을 배포합니다.
  • 인스턴스 그룹을 확장하는 데 사용되는 커스텀 측정항목을 만듭니다.
  • Google Cloud Console을 사용하여 커스텀 측정항목 및 인스턴스 그룹 크기를 시각화합니다.

비용

이 가이드에서는 다음과 같이 비용이 청구될 수 있는 Google Cloud 구성요소를 사용합니다.

시작하기 전에

  1. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  2. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  3. Cloud Storage and Monitoring API를 사용 설정합니다.

    API 사용 설정

  4. 아직 작업공간이 없으면 새 작업공간을 만듭니다.

애플리케이션 아키텍처

이 가이드에서는 샘플 자동 확장 애플리케이션을 만드는 과정을 안내합니다. 애플리케이션은 Compute Engine 인스턴스에 설치된 Node.js 스크립트를 사용합니다. 스크립트는 숫자 값을 Monitoring 측정항목에 보고합니다. (이 가이드를 실행하기 위해 Node.js 또는 JavaScript를 알아야 할 필요는 없습니다.) 측정항목의 값에 따라 애플리케이션은 필요하면 Compute Engine 인스턴스 그룹을 자동으로 확장하거나 축소합니다.

이 가이드에 있는 Node.js 스크립트는 인스턴스 그룹이 응답할 수 있는 값이 있는 커스텀 측정항목을 시드하는 방법으로 사용됩니다. 프로덕션 환경에서는 사용 사례와 관련된 측정항목에 맞춰 자동 확장을 사용합니다.

인스턴스 그룹이 템플릿을 사용하는 방법과 시작 스크립트가 Cloud Storage로부터 읽어서 새로운 인스턴스를 시작하는 방법을 보여주는 애플리케이션 아키텍처

애플리케이션에는 다음 구성요소가 포함됩니다.

  1. Compute Engine 인스턴스 템플릿—인스턴스 그룹에서 각 인스턴스를 만드는 데 사용되는 템플릿입니다.
  2. Cloud Storage—시작 스크립트 및 기타 스크립트 파일을 호스팅하는 데 사용되는 버킷입니다.
  3. Compute Engine 시작 스크립트—각 인스턴스에 필요한 코드 구성요소를 설치하는 시작 스크립트입니다. 시작 스크립트는 인스턴스가 시작될 때 자동으로 설치되고 시작됩니다. 시작 스크립트가 실행되면 Monitoring 커스텀 측정항목에 값을 쓰는 인스턴스에서 코드가 설치되고 시작됩니다.
  4. Compute Engine 인스턴스 그룹—Cloud Monitoring 측정항목 값에 따라 자동 확장되는 인스턴스 그룹입니다.
  5. Compute Engine 인스턴스—Compute Engine 인스턴스의 변수입니다.
  6. 커스텀 Cloud Storage 측정항목—Compute Engine 인스턴스 그룹 자동 확장의 입력 값으로 사용되는 커스텀 모니터링 측정항목입니다.

애플리케이션 만들기

자동 확장 애플리케이션을 만들려면 필수 코드 구성요소를 다운로드하고, 관리형 인스턴스 그룹을 만들고, 관리형 인스턴스 그룹을 위한 자동 확장을 구성해야 합니다.

Cloud Storage에 스크립트 파일 업로드

자동 확장 중에 인스턴스 그룹이 새로운 Compute Engine 인스턴스를 만들어야 할 수도 있습니다. 그럴 때는 인스턴스 템플릿을 기반으로 인스턴스를 만듭니다. 각 인스턴스에는 시작 스크립트가 필요합니다. 따라서 템플릿에는 시작 스크립트를 참조하기 위한 방법이 필요합니다. Compute Engine은 Cloud Storage 버킷을 시작 스크립트의 소스로 사용하는 것을 지원합니다.

다음 단계를 따라 시작 스크립트를 Cloud Storage 버킷에 업로드하세요.

  1. 이 가이드의 GitHub 저장소에서 다음 스크립트를 다운로드합니다.

    • startup.sh
    • writeToCustomMetric.js
    • writeToCustomMetric.sh
    • config.json
    • package.json
  2. Cloud Console에서 Cloud Storage 페이지로 이동합니다.

    Cloud Storage 페이지로 이동

  3. 버킷 만들기를 클릭하고 기본값을 그대로 사용하여 새 Cloud Storage 버킷을 만듭니다. 버킷 이름을 지정하는 방법에 대한 자세한 내용은 버킷 이름 지정 가이드라인을 참조하세요.

  4. 스크립트 파일을 Cloud Storage 버킷에 복사합니다.

    1. 만든 Cloud Storage 버킷을 클릭하여 버킷의 콘텐츠로 이동합니다.
    2. **파일 업로드를 클릭하고, **앞서 GitHub에서 다운로드한 모든 스크립트 파일(startup.sh, writeToCustomMetric.js, writeToCustomMetric.sh, config.json, package.json)을 선택한 후에 업로드합니다.

    스크립트가 업로드된 후에는 파일이 Cloud Storage 버킷에 나타납니다.

    사용자 버킷에 있는 파일 목록

    각 스크립트의 기능은 다음 섹션에서 설명합니다.

  5. 다음과 같은 형식으로 된 시작 스크립트의 Cloud Storage 파일 위치를 메모합니다.

    gs://[YOUR_BUCKET_NAME]/startup.sh

코드 구성요소 이해

  • startup.sh—인스턴스가 관리형 인스턴스 그룹에 추가될 때 필수 구성요소를 각 Compute Engine 인스턴스에 설치하는 셸 스크립트입니다.
  • writeToCustomMetric.js—확장을 트리거하는 값이 있는 커스텀 모니터링 측정항목을 만드는 Node.js 스니펫입니다. 실제 측정항목 값을 에뮬레이션하기 위해 이 스크립트는 시간 경과에 따라 값을 변경합니다. 프로덕션 배포에서는 처리 대기열 값과 같이 관심 있는 모니터링 측정항목을 보고하는 커스텀 코드로 이 스크립트를 대체합니다.
  • config.json—커스텀 모니터링 측정항목의 값을 지정하며 writeToCustomMetric.js에서 사용되는 Node.js 구성 파일입니다.
  • package.json—표준 설치이며 writeToCustomMetric.js의 종속 항목인 Node.js 패키지 파일입니다.
  • writeToCustomMetric.sh—각 Compute Engine 인스턴스에서 writeToCustomMetric.js 프로그램을 계속 실행하는 셸 스크립트입니다.

인스턴스 템플릿 만들기

이 섹션에서는 자동 확장을 사용하여 인스턴스 그룹에서 생성되는 인스턴스의 템플릿을 만듭니다. 템플릿의 일부로, 인스턴스가 시작될 때 실행되어야 하는 시작 스크립트의 위치(Cloud Storage 내 위치)를 지정합니다.

  1. Cloud Console에서 Compute Engine의 인스턴스 템플릿 페이지로 이동합니다.

    인스턴스 템플릿 페이지로 이동

  2. 인스턴스 템플릿 만들기를 클릭합니다.

  3. 인스턴스 템플릿의 이름을 autoscaling-instance01로 지정하고 머신 유형, 부팅 디스크, ID 및 API 액세스, 방화벽의 기본값을 그대로 사용합니다.

    작성된 이름을 보여주는 '인스턴스 템플릿 만들기' 이미지

  4. 관리, 보안, 디스크, 네트워킹, 단독 임대를 클릭하여 입력 옵션을 확장합니다.

  5. 관리 탭의 메타데이터 섹션에서 다음 메타데이터 키 및 값을 입력합니다.

    • startup-script-url = gs://[YOUR_BUCKET_NAME]/startup.sh
    • gcs-bucket = gs://[YOUR_BUCKET_NAME]

    권장되는 키/값 쌍이 작성된 것을 보여주는 '인스턴스 템플릿 만들기' 페이지의 '메타데이터' 섹션

  6. 만들기를 클릭합니다.

인스턴스 그룹 만들기

  1. Cloud Console에서 인스턴스 그룹 페이지로 이동합니다.

    인스턴스 그룹 페이지로 이동

  2. 새 인스턴스 그룹 만들기를 클릭하고 인스턴스 그룹 이름을 autoscaling-instance-group-1.로 지정합니다.

  3. 위치에서 단일 영역을 선택합니다.

  4. 영역에서 원하는 영역을 선택합니다.

  5. 그룹 유형에서 관리형 인스턴스 그룹을 선택합니다.

    '관리형 인스턴스 그룹' 옵션이 선택된 것을 보여주는 '인스턴스 그룹 만들기' 페이지

  6. 인스턴스 템플릿 아래에서 방금 만든 인스턴스 템플릿을 선택합니다.

  7. 자동 확장사용 안함으로 설정합니다.

    인스턴스 그룹이 생성된 후에 자동 확장 설정을 편집합니다. 다른 설정은 기본값으로 그대로 둡니다.

    '자동 확장' 옵션이 'Off'로 설정된 것을 보여주는 '인스턴스 그룹 만들기' 페이지

  8. 만들기를 클릭합니다.

지금까지 단일 인스턴스로 인스턴스 그룹을 만들었으며, 해당 인스턴스는 커스텀 측정항목 값을 보고해야 합니다. 다음 단계는 설정을 확인하는 것입니다.

인스턴스 그룹이 생성되었는지 확인

  1. Cloud Console에서 인스턴스 그룹 페이지로 이동합니다.

    인스턴스 그룹 페이지로 이동

  2. autoscaling-instance01 템플릿을 사용하여 만든 autoscaling-instance-group-1 인스턴스 그룹에 녹색 상태 아이콘이 표시되는지 확인합니다. 이는 인스턴스 그룹이 성공적으로 생성되었다는 의미입니다.

    'autoscaling-instance-group-1' 그룹에 대한 녹색 상태 아이콘이 표시된 인스턴스 그룹 목록

Node.js 스크립트가 실행 중인지 확인

커스텀 측정항목 custom.googleapis.com/appdemo_queue_depth_01은 그룹에 있는 첫 번째 인스턴스가 생성되고 인스턴스가 커스텀 측정항목 값을 보고하기 시작할 때까지 생성되지 않습니다.

인스턴스가 커스텀 측정항목 값을 로깅 중인지 확인함으로써 인스턴스 그룹의 첫 번째 인스턴스에서 writeToCustomMetric.js 스크립트가 실행 중인지를 확인할 수 있습니다.

  1. Cloud Console에서 인스턴스 그룹 페이지로 이동합니다.

    인스턴스 그룹 페이지로 이동

  2. autoscaling-instance-group-1을 클릭하여 그룹에서 실행 중인 인스턴스를 표시합니다.

  3. 인스턴스를 클릭합니다. 자동 확장이 추가 인스턴스를 시작하지 않았으므로 현재 보고 있는 단일 인스턴스를 클릭합니다.

    인스턴스 그룹에 의해 시작된 단일 인스턴스를 보여주면서 인스턴스 그룹의 세부정보를 표시하는 페이지

  4. VM 인스턴스 세부정보 페이지의 로그 아래에서 Cloud Logging을 클릭하여 VM 인스턴스의 로그를 봅니다.

  5. nodeapp을 입력하여 이 Compute Engine 인스턴스의 로그를 필터링합니다.

    Node.js 스크립트가 Compute Engine 인스턴스에서 실행 중인 경우에는 API에 요청이 보내지고 Finished writing time series data를 표시하는 로그 항목이 로그에 나타납니다. 예를 들어 다음 스크린샷에서 이 텍스트가 있는 항목은 10:31:05.00010:30:53.000에 나타납니다. 이러한 로그 항목이 보이지 않으면 Node.js 스크립트가 커스텀 측정항목 값을 보고하고 있지 않는 것입니다.

    로그 항목 목록

인스턴스 그룹의 자동 확장 구성

커스텀 측정항목이 첫 번째 인스턴스의 데이터를 제대로 보고하고 있는지를 확인한 후에는 커스텀 측정항목의 값에 따라 자동 확장하도록 인스턴스 그룹을 구성할 수 있습니다.

  1. Cloud Console에서 인스턴스 그룹 페이지로 이동합니다.

    인스턴스 그룹 페이지로 이동

  2. autoscaling-instance-group-1 그룹을 선택한 후 수정을 클릭합니다.

    'autoscaling-instance-group-1' 그룹을 보여주는 인스턴스 그룹 목록

  3. 자동 확장사용으로 설정합니다.

    '자동 확장' 옵션이 '사용'으로 설정되어 있는 편집 모드의 '인스턴스 그룹' 페이지

  4. 자동 확장 기반 아래에서 Monitoring 측정항목을 선택합니다.

  5. 측정항목 식별자 필드에서 custom.googleapis.com/appdemo_queue_depth_01을 입력합니다.

  6. 타겟 필드에 150을 입력합니다.

    커스텀 모니터링 측정항목이 타겟 값보다 높거나 낮은 경우, 자동 확장 처리는 관리형 인스턴스 그룹을 확장하여 인스턴스 수를 늘리거나 줄입니다. 타겟 값은 double 값일 수 있습니다. 이 가이드에서는 해당 값이 커스텀 모니터링 측정항목에서 보고하는 값과 일치하기 때문에 150을 사용합니다.

  7. 타겟 모드 목록에서 게이지를 선택합니다.

    게이지 설정은 자동 확장 처리가 지난 몇 분 동안 수집된 데이터의 평균값을 계산하여 타겟 값과 비교하도록 지정합니다. 반면에 타겟 모드DELTA_PER_MINUTE 또는 DELTA_PER_SECOND로 설정하면 평균 값이 아니라 관찰된 변화율에 따라 자동 확장됩니다.

  8. 최소 인스턴스 수1을, 최대 인스턴스 수5를 입력합니다.

    권장 설정을 보여주는 편집 모드의 '인스턴스 그룹' 페이지 세부정보

  9. 저장을 클릭합니다.

인스턴스 그룹에서 자동 확장이 수행되는 과정 보기

Node.js 스크립트가 시간 경과에 따라 각 인스턴스로부터 보고하는 커스텀 측정항목 값을 변경합니다. 측정항목 값이 높아지면 인스턴스 그룹은 Compute Engine 인스턴스를 추가함으로써 확장됩니다. 값이 낮아지면 인스턴스 그룹이 이를 감지하여 인스턴스를 삭제함으로써 축소됩니다. (앞서 언급한 대로 스크립트는 비슷하게 상하 변동을 보일 수 있는 실제 측정항목 값을 에뮬레이트합니다.)

자동 확장된 크기 그래프를 보면 인스턴스 그룹이 측정항목에 반응하여 어떻게 확장되었는지를 볼 수 있습니다.

  1. Cloud Console에서 인스턴스 그룹 페이지로 이동합니다.

    인스턴스 그룹 페이지로 이동

  2. 목록에서 autoscaling-instance-group-1 인스턴스 그룹을 클릭합니다.

    이 페이지는 자동 확장 그래프를 포함하여 인스턴스 그룹에 대한 세부정보를 표시합니다.

    '자동 확장된 크기' 그래프를 보여주는 선택된 그룹의 '인스턴스 그룹' 페이지

    위쪽 그래프에 묘사된 인스턴스 수는 아래쪽 그래프에서 보고된 커스텀 측정항목이 보고하는 값과 평행하게 변화합니다.

삭제

이 가이드를 완료한 후에는 향후에 요금이 청구되지 않도록 GCP에서 만든 리소스를 삭제합니다. 다음 섹션에서는 이러한 리소스를 삭제하는 방법을 설명합니다.

프로젝트 삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 프로젝트를 삭제하는 것입니다.

프로젝트를 삭제하는 방법은 다음과 같습니다.

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

    리소스 관리로 이동

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

모든 구성요소 삭제

  1. 인스턴스 그룹을 삭제합니다.
  2. 인스턴스 템플릿을 삭제합니다.
  3. Cloud Storage 버킷을 삭제합니다.

다음 단계