Cloud Monitoring 측정항목을 기준으로 확장

이 문서에서는 모니터링 측정항목을 기준으로 관리형 인스턴스 그룹(MIG)을 확장하는 방법을 설명합니다.

또한 CPU 사용률 또는 외부 HTTP(S) 부하 분산기의 처리 용량을 기준으로 MIG를 확장할 수 있습니다.

모니터링 측정항목을 기준으로 MIG를 확장할 때는 다음 측정항목 유형을 기준으로 확장할 수 있습니다.

  • 인스턴스별 측정항목을 이용한 확장: 선택한 측정항목이 MIG의 각 가상 머신(VM)에 대해 리소스 사용률을 나타내는 데이터를 제공합니다.
  • 그룹별 측정항목(베타)을 이용한 확장: 전체 관리형 인스턴스 그룹과 관련된 값을 제공하는 측정항목을 기준으로 그룹이 확장됩니다.

Cloud Monitoring 서비스가 제공하는 표준 측정항목이나 사용자가 만드는 커스텀 Cloud Monitoring 측정항목을 사용할 수 있습니다.

제한사항

  • Cloud Monitoring 로그 기반 측정항목을 기준으로 자동 확장할 수 없습니다.

  • 지역 관리형 인스턴스 그룹은 인스턴스별 측정항목에 대한 필터링을 지원하지 않습니다.

  • 리전 관리형 인스턴스 그룹은 그룹별 측정항목을 사용한 자동 확장을 지원하지 않습니다.

시작하기 전에

인스턴스별 측정항목

인스턴스별 측정항목은 MIG에서 각 VM에 개별적으로 데이터를 제공하여 각 인스턴스의 리소스 사용률을 나타냅니다. 자동 확장 처리가 작동하려면 실행되는 VM 1개 이상에 대한 측정항목이 필요하기 때문에 인스턴스별 측정항목을 사용할 때 MIG는 VM 1개 크기 미만으로 확장할 수 없습니다.

개별 VM과 관련이 없는 Cloud Monitoring 측정항목을 사용하여 확장해야 하거나 경우에 따라 MIG를 0개 VM으로 축소해야 하는 경우에는 대신 그룹별 측정항목을 사용하여 MIG가 확장되도록 구성할 수 있습니다.

표준 인스턴스별 측정항목

Cloud Monitoring에는 VM을 모니터링하는 데 사용할 수 있는 일련의 표준 측정항목이 있습니다. 하지만 모든 표준 측정항목이 자동 확장 처리가 사용할 수 있는 유효한 사용률 측정항목은 아닙니다.

확장을 위한 유효한 사용률 측정항목은 다음 기준을 충족합니다.

  • 표준 측정항목에는 gce_instance 모니터링 리소스에 대한 데이터가 포함되어야 합니다. timeSeries.list API 호출을 사용하여 특정 측정항목이 이 리소스에 대한 데이터를 내보내는지 여부를 확인할 수 있습니다.

  • 표준 측정항목은 인스턴스의 사용률 정도를 설명하며, 측정항목 값은 그룹의 VM 수에 비례해 증가하거나 감소합니다.

다음 측정항목은 사용량에 따라 값이 변경되지 않으며 자동 확장 처리가 값을 사용하여 비례적으로 확장할 수 없기 때문에 유효하지 않습니다.

compute.googleapis.com/instance/cpu/reserved_cores

자동 확장 처리에 사용할 표준 측정항목을 선택하면 해당 측정항목을 사용한 자동 확장을 구성할 수 있습니다.

커스텀 측정항목

Cloud Monitoring을 사용하여 커스텀 측정항목을 만들고 자체 모니터링 데이터를 Cloud Monitoring 서비스에 기록할 수 있습니다. 이렇게 하면 친숙한 데이터 구조 및 일관된 쿼리 구문을 사용하여 표준 Google Cloud 데이터와 커스텀 모니터링 데이터에 나란히 액세스할 수 있습니다. 커스텀 측정항목이 있는 경우 이러한 측정항목의 데이터를 기준으로 확장하도록 선택할 수 있습니다.

기본 요건

커스텀 측정항목을 사용하려면 먼저 다음을 수행해야 합니다.

  • 커스텀 측정항목을 만듭니다. 커스텀 측정항목을 만드는 방법에 대한 자세한 내용은 커스텀 측정항목 사용을 참조하세요.
  • 그룹의 모든 VM에서 커스텀 측정항목을 내보내도록 MIG를 설정합니다.

유효한 커스텀 측정항목 선택

자동 확장 처리가 사용할 수 없는 커스텀 측정항목도 있습니다. 유효한 커스텀 측정항목을 선택하려면 측정항목에 다음 속성이 모두 존재해야 합니다.

  • 측정항목은 인스턴스별 측정항목이어야 합니다. 측정항목은 특정 Compute Engine VM과 관련된 데이터를 따로 내보내야 합니다.
  • 내보낸 인스턴스별 값은 다음 라벨이 포함된 gce_instance 모니터링 리소스와 연결되어야 합니다.
    • zone - 인스턴스가 있는 영역의 이름 포함
    • instance_id - VM에 할당된 고유한 숫자 ID의 값 포함
  • 측정항목은 최소한 60초마다 데이터를 내보내야 합니다. 60초보다 짧은 주기로 데이터를 내보내면 자동 확장 처리가 부하 변경사항에 더 빠르게 반응할 수 있습니다. 60초보다 긴 주기로 데이터를 내보내면 자동 확장 처리가 부하 변경사항에 충분히 빠르게 반응하지 못할 수 있습니다.
  • 측정항목은 유효한 사용률 측정항목, 즉 측정항목의 데이터를 사용하여 VM 수를 비례적으로 확장하거나 축소할 있는 측정항목이어야 합니다.
  • 측정항목은 int64 또는 double 데이터 값을 내보내야 합니다.

자동 확장 처리가 커스텀 측정항목과 함께 작동하려면 MIG의 모든 VM에서 이 커스텀 측정항목의 데이터를 내보내야 합니다.

참고: VM 내에서 메타데이터 서버의 ID 속성을 요청하여 VM 인스턴스의 숫자 ID를 얻을 수 있습니다. 예를 들어 'curl'에서 다음을 수행할 수 있습니다.
curl http://metadata.google.internal/computeMetadata/v1/instance/id -H Metadata-Flavor:Google
메타데이터 서버 사용에 대한 자세한 내용은 인스턴스 메타데이터 저장 및 검색을 참조하세요.

인스턴스별 모니터링 측정항목을 사용한 자동 확장 구성

자동 확장 처리 설정 프로세스는 표준 또는 커스텀 측정항목 설정 프로세스와 동일합니다. Cloud Monitoring 측정항목을 사용하는 자동 확장 처리를 만들려면 측정항목 식별자, 원하는 목표 사용률 수준, 사용률 목표 유형을 제공해야 합니다. 다음은 각 속성에 대한 설명입니다.

  • 측정항목 식별자: 사용할 측정항목의 이름입니다. 커스텀 측정항목을 사용할 경우 이 이름은 측정항목을 만들 때 정의했습니다. 식별자는 다음 형식을 취합니다.

    custom.googleapis.com/path/to/metric
    

    측정항목 생성, 찾아보기, 읽기에 대한 자세한 내용은 커스텀 측정항목 사용을 참조하세요.

  • 목표 사용률 수준: 자동 확장 처리가 유지해야 하는 수준입니다. 이 항목은 반드시 양수여야 합니다. 예를 들어 24.51100은 모두 허용되는 값입니다. 이 항목은 0.0과 1.0 사이의 부동 소수점 값이어야 하는 CPU 및 부하 분산과는 다릅니다.

  • 목표 유형: 자동 확장 처리가 인스턴스에서 수집한 데이터를 계산하는 방법입니다. 사용 가능한 목표 유형은 다음과 같습니다.

    • GAUGE - 자동 확장 처리가 지난 몇 분 동안 수집한 데이터의 평균값을 계산하고 이를 자동 확장 처리의 목표 사용률 값과 비교합니다.
    • DELTA_PER_MINUTE - 자동 확장 처리가 분당 평균 증가율을 계산하고 이를 목표 사용률과 비교합니다.
    • DELTA_PER_SECOND - 자동 확장 처리가 초당 평균 증가율을 계산하고 이를 목표 사용률과 비교합니다.

    정확한 비교를 위해 목표 사용률을 초 단위로 설정할 경우 DELTA_PER_SECOND를 자동 확장 처리 목표 유형으로 사용합니다. 마찬가지로 분 단위의 목표 사용률에 대해서는 DELTA_PER_MINUTE를 사용합니다.

Console

리전 및 단일 영역 MIG는 자동 확장 구성 방법이 다릅니다. 리전 MIG는 인스턴스별 측정항목에 대한 필터링을 지원하지 않습니다.

리전(멀티 영역) MIG의 자동 확장을 구성하려면 다음 안내를 따르세요.

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

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

  2. 관리형 인스턴스 그룹이 없으면 하나 만듭니다. 그렇지 않으면 목록에서 리전 MIG 이름을 클릭하여 인스턴스 그룹 세부정보 페이지를 엽니다.
  3. 인스턴스 그룹 세부정보 페이지에서 그룹 수정 버튼을 클릭합니다.
  4. 자동 확장에서 자동 확장을 선택해 자동 확장을 사용 설정합니다.
  5. 자동 확장 측정항목 섹션에서 Stackdriver Monitoring 측정항목을 선택합니다.
  6. 측정항목 내보내기 범위 섹션에서 인스턴스당 시계열을 선택해 그룹별 측정항목을 사용하여 자동 확장을 구성합니다.
  7. Stackdriver Monitoring 측정항목 섹션에서 example.googleapis.com/path/to/metric 형식으로 측정항목 이름을 입력합니다.
  8. 목표 섹션에서 목표 값을 지정합니다.
  9. 목표 유형 섹션에서 측정항목의 측정 단위에 해당하는 목표 유형을 지정합니다.
  10. 준비가 끝나면 변경사항을 저장합니다.

단일 영역 MIG의 자동 확장을 구성하려면 다음 안내를 따르세요.

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

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

  2. 관리형 인스턴스 그룹이 없으면 하나 만듭니다. 인스턴스 그룹의 이름을 클릭해 인스턴스 그룹 세부정보 페이지를 여는 방법도 있습니다. 인스턴스 그룹의 모든 인스턴스가 단일 영역에 있어야 합니다.
  3. 인스턴스 그룹 세부정보 페이지에서 그룹 수정 버튼을 클릭합니다.
  4. 자동 확장에서 자동 확장을 선택해 자동 확장을 사용 설정합니다.
  5. 자동 확장 측정항목 섹션에서 Stackdriver Monitoring 측정항목을 선택합니다.
  6. 측정항목 내보내기 범위 섹션에서 인스턴스당 시계열을 선택해 인스턴스별 측정항목을 이용한 자동 확장을 구성합니다.
  7. 측정항목 식별자 섹션에서 측정항목 이름을 example.googleapis.com/path/to/metric 형식으로 입력합니다.
  8. 필요한 경우 추가 필터 표현식 섹션에서 필터를 입력하여 여러 스트림 또는 라벨이 있는 측정항목의 개별 값을 사용합니다. 자세한 내용은 인스턴스별 측정항목 필터링을 참조하세요.
  9. 사용률 목표 섹션에서 목표 값을 지정합니다.
  10. 사용률 목표 유형 섹션에서 측정항목의 측정 종류에 해당하는 목표 유형을 지정합니다.
  11. 준비가 끝나면 변경사항을 저장합니다.

gcloud

예를 들어 gcloud 명령줄 도구에서 다음 명령어는 GAUGE 목표 유형을 사용하는 자동 확장 처리를 만듭니다. 자동 확장 처리를 만들 때 --custom-metric-utilization 매개변수와 함께 --max-num-replicas 매개변수도 필요합니다.

gcloud compute instance-groups managed set-autoscaling example-managed-instance-group \
    --custom-metric-utilization metric=example.googleapis.com/path/to/metric,utilization-target-type=GAUGE,utilization-target=10 \
    --max-num-replicas 20 \
    --cool-down-period 90 \
    --region us-west1

필요한 경우 새 VM이 시작된 후 자동 확장 처리가 이로부터 사용량 정보 수집을 시작하기 전에 대기해야 하는 시간(초)을 자동 확장 처리에 알려주는 --cool-down-period 플래그를 사용할 수 있습니다. 이를 통해 VM이 초기화되는 데 걸리는 시간을 알 수 있으며, 이 시간 동안에는 수집한 사용량 정보를 자동 확장에 적용할 수 없습니다. 기본 대기 기간은 60초입니다.

gcloud 도구에 사용 가능한 플래그와 명령어의 전체 목록은 gcloud 참조에서 확인할 수 있습니다.

API

참고: 자동 확장은 관리형 인스턴스 그룹의 기능이지만 별도의 API 리소스입니다. 자동 확장 API 요청을 구성할 때는 이 사실을 염두에 두세요.

API에서 다음 URL에 대해 POST 요청을 실행합니다. 이때 myproject를 사용자의 프로젝트 ID로 바꾸고 us-central1-f를 원하는 영역으로 바꿉니다.

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers/

요청 본문에는 name, target, autoscalingPolicy 필드가 포함되어야 합니다. autoscalingPolicy에서 maxNumReplicascustomMetricUtilizations 속성을 제공합니다.

필요한 경우 새 VM이 시작된 후 사용량 데이터 수집을 시작하기 전에 대기해야 하는 시간(초)을 자동 확장 처리에 알려주는 coolDownPeriodSec 매개변수를 사용할 수 있습니다. 대기 시간이 지나면 자동 확장 처리가 새 VM에서 사용량 정보를 수집하기 시작하고 MIG에 추가 VM이 필요한지 여부를 결정합니다. 이를 통해 VM이 초기화되는 데 걸리는 시간을 알 수 있으며, 이 시간 동안에는 수집한 사용량 정보를 자동 확장에 적용할 수 없습니다. 기본 대기 시간은 60초입니다.

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers

{
 "name": "example-autoscaler",
 "target": "zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
 "autoscalingPolicy": {
  "maxNumReplicas": 10,
  "coolDownPeriodSec": 90,
  "customMetricUtilizations": [
   {
    "metric": "example.googleapis.com/some/metric/name",
    "utilizationTarget": 10,
    "utilizationTargetType": "GAUGE"
   }
  ]
 }
}

인스턴스별 측정항목 필터링(베타)

필터를 인스턴스별 Cloud Monitoring 측정항목에 적용하면 여러 스트림 또는 라벨이 있는 측정항목의 개별 값을 사용하여 단일 영역 MIG를 확장할 수 있습니다.

인스턴스별 측정항목 필터링 요구사항

자동 확장 처리 필터링은 일부 제한사항이 있는 Cloud Monitoring 필터 구문과 호환됩니다. 인스턴스별 측정항목용 필터는 다음 요구사항을 충족해야 합니다.

  • 조인 선택기에는 AND 연산자만 사용할 수 있습니다.
  • = 같음 비교 연산자만 사용할 수 있지만 이 연산자를 함수와 함께 사용할 수는 없습니다. 예를 들어 startswith() 함수를 = 비교 연산자와 함께 사용할 수 없습니다.
  • metric.labels.state = "used"와 같이 필터 값을 큰따옴표로 묶어야 합니다.
  • 와일드카드는 사용할 수 없습니다.
  • resource.type 또는 resource.label.* 선택기를 설정해서는 안 됩니다. 인스턴스별 측정항목은 항상 그룹의 모든 인스턴스 리소스를 사용합니다.
  • 최상의 결과를 얻으려면 각 인스턴스에 대해 단일 시계열을 반환할 만큼 구체적인 필터를 만드세요. 필터가 여러 시계열을 반환하면 해당 시계열이 함께 추가됩니다.

측정항목을 필터링하도록 자동 확장 처리 구성

Google Cloud Console, gcloud 명령줄 도구(베타) , Compute Engine 베타 API를 사용하여 단일 영역 MIG의 자동 확장을 위한 측정항목 필터를 추가합니다.

Console

인스턴스별 측정항목을 필터링하는 자동 확장 처리를 만들려면 일반적인 인스턴스별 자동 확장 처리를 만들 때와 비슷한 과정을 따르되 측정항목 필터도 지정해야 합니다. 예를 들어 compute.googleapis.com/instance/network/received_bytes_count 측정항목에는 instance_nameloadbalanced 라벨이 포함되어 있습니다. loadbalanced 부울 값을 기준으로 필터링하려면 다음 작업을 수행합니다.

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

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

  2. MIG가 없으면 하나 만듭니다. 그렇지 않으면 단일 영역 MIG의 이름을 클릭하여 인스턴스 그룹 세부정보 페이지를 엽니다.
  3. 인스턴스 그룹 세부정보 페이지에서 그룹 수정 버튼을 클릭합니다.
  4. 자동 확장에서 자동 확장을 선택해 자동 확장을 사용 설정합니다.
  5. 자동 확장 기반 섹션에서 Stackdriver monitoring 측정항목을 선택합니다.
  6. 측정항목 내보내기 범위 섹션에서 인스턴스당 시계열을 선택해 인스턴스별 측정항목을 이용한 자동 확장을 구성합니다.
  7. 측정항목 식별자 섹션에서 측정항목 이름을 입력합니다. 예를 들면 compute.googleapis.com/instance/network/received_bytes_count입니다.
  8. 추가 필터 표현식 섹션에서 필터를 입력합니다. 예를 들면 'metric.labels.loadbalanced = true'입니다.
  9. 준비가 끝나면 변경사항을 저장합니다.

gcloud

인스턴스별 측정항목을 필터링하는 자동 확장 처리를 만들려면 일반적인 인스턴스별 자동 확장 처리를 만들 때와 비슷한 과정을 따르되 측정항목 필터와 사용률 목표 및 목표 유형에 대한 개별 플래그도 지정해야 합니다. 예를 들어 compute.googleapis.com/instance/network/received_bytes_count 측정항목에는 instance_nameloadbalanced 라벨이 포함되어 있습니다. loadbalanced 부울을 기준으로 필터링하려면 --stackdriver-metric-filter 필터 플래그를 'metric.labels.loadbalanced = true' 값으로 지정합니다. 사용률 목표와 목표 유형 플래그를 개별적으로 포함해야 합니다.

gcloud beta compute instance-groups managed set-autoscaling example-managed-instance-group \
    --update-stackdriver-metric=compute.googleapis.com/instance/network/received_bytes_count \
    --stackdriver-metric-utilization-target-utilization-target=10 \
    --stackdriver-metric-utilization-target-type=DELTA_PER_SEC \
    --stackdriver-metric-filter='metric.labels.loadbalanced = true' \
    --max-num-replicas 20 \
    --cool-down-period 90 \
    --region us-west1

이 예시에서는 사용률 목표의 일부로 loadbalanced 트래픽 데이터만 사용하도록 자동 확장을 구성합니다.

사용 가능한 gcloud 명령어와 플래그의 목록은 gcloud 도구 참조(베타)에서 확인할 수 있습니다.

API

참고: 자동 확장은 관리형 인스턴스 그룹의 기능이지만 별도의 API 리소스입니다. 자동 확장 API 요청을 구성할 때는 이 사실을 염두에 두세요.

인스턴스별 측정항목을 필터링하는 자동 확장 처리를 만들려면 일반적인 인스턴스별 자동 확장 처리를 만들 때와 비슷한 과정을 따르되 측정항목 필터와 사용률 목표 및 목표 유형에 대한 개별 플래그도 지정해야 합니다. 예를 들어 compute.googleapis.com/instance/network/received_bytes_count 측정항목에는 instance_nameloadbalanced 라벨이 포함되어 있습니다. loadbalanced 부울 값을 기준으로 필터링하려면 filter 매개변수를 "metric.labels.loadbalanced = true" 값으로 지정합니다.

API에서 다음 URL에 대해 POST 요청을 실행합니다. 이때 myproject를 사용자의 프로젝트 ID로 바꾸고 us-central1-f를 원하는 영역으로 바꿉니다. 요청 본문에는 name, target, autoscalingPolicy 필드가 포함되어야 합니다. autoscalingPolicy에서 maxNumReplicascustomMetricUtilizations 속성을 제공합니다.

POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-f/autoscalers

{
 "name": "example-autoscaler",
 "target": "zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
 "autoscalingPolicy": {
  "maxNumReplicas": 10,
  "coolDownPeriodSec": 90,
  "customMetricUtilizations": [
   {
    "metric": "compute.googleapis.com/instance/network/received_bytes_count",
    "filter": "metric.labels.loadbalanced = true",
    "utilizationTarget": 10,
    "utilizationTargetType": "DELTA_PER_SEC"
   }
  ]
 }
}

이 예시에서는 사용률 목표의 일부로 loadbalanced 트래픽 데이터만 사용하도록 자동 확장을 구성합니다.

그룹별 측정항목(베타)

그룹별 측정항목을 사용하면 인스턴스별 사용률 데이터를 내보내지 않는 표준 또는 커스텀 측정항목으로 자동 확장이 가능합니다. 대신 그룹은 그룹의 가용 작업량 또는 사용 수준에 대응하며 전체 그룹에 적용되는 값을 기준으로 확장됩니다. 그룹은 그룹 측정항목 값의 변동률과 사용자가 정의한 구성을 기준으로 확장됩니다.

그룹별 측정항목에 대한 자동 확장을 구성할 때는 자동 확장 처리가 측정 항목 관련 인스턴스를 프로비저닝하는 방법을 지정해야 합니다.

  • 인스턴스 할당: 자동 확장 처리가 각 VM에 할당할 수 있는 작업량에 따라 VM을 추가 또는 삭제하도록 인스턴스 할당을 지정합니다. 각 VM이 처리해야 할 작업량을 나타내도록 매개변수 값을 지정합니다. 예를 들어 2를 지정하면 작업 단위 두 개가 각 VM에 할당되고 0.5를 지정하면 작업 단위 반 개가 각 VM에 할당됩니다. 자동 확장 처리는 측정항목으로 표시되는 가용 작업을 완료할 수 있을 만큼 VM이 충분하도록 MIG를 확장합니다. 측정항목 값이 10이고 각 VM에 0.5개의 작업 단위를 할당한 경우 자동 확장 처리가 MIG에 VM 20개를 만듭니다. 인스턴스 할당을 통해 확장할 경우 측정항목 값이 0으로 떨어지면 0개의 VM으로 그룹이 줄어들고 측정항목 값이 0보다 커지면 다시 회복됩니다. 다음 다이어그램은 인스턴스 할당 정책에 따라 확장할 경우 측정항목 값과 VM 수 간의 비례 관계를 보여줍니다. 측정항목 값과 인스턴스 수 간의 비례 관계
  • 사용률 목표: 자동 확장 처리를 통해 VM을 추가 또는 삭제함으로써 측정항목을 일정 값으로 유지하려면 사용률 목표를 지정합니다. 측정항목이 지정한 목표를 초과하면 측정항목이 목표 수준으로 감소할 때까지 자동 확장 처리를 통해 VM이 점진적으로 추가됩니다. 측정항목이 지정한 목표 값보다 낮으면 측정항목이 목표 값으로 증가할 때까지 자동 확장 처리를 통해 VM이 점진적으로 삭제됩니다. 사용률 목표를 통한 확장으로는 그룹을 0개의 VM으로 줄일 수 없습니다. 다음 다이어그램은 사용률 목표를 유지하기 위해 자동 확장 처리 기능이 측정항목 값에 따라 VM을 추가하거나 삭제하는 방식을 보여줍니다. 목표 사용률을 유지하기 위해 VM을 추가 및 삭제하는 자동 확장 처리

각 옵션의 사용 사례는 다음과 같습니다.

  • 인스턴스 할당: Pub/Sub 구독의 미확인 메시지 수나 네트워크 엔드포인트의 총 QPS 비율을 기준으로 MIG의 크기를 조절합니다.
  • 사용률 목표: 표준 인스턴스별 CPU 또는 메모리 사용량 측정항목과 별개인 커스텀 측정항목의 사용률 목표를 기준으로 MIG의 크기를 조절합니다. 예를 들어 커스텀 지연 시간 측정항목을 기준으로 그룹을 확장할 수 있습니다.

그룹별 측정항목으로 자동 확장을 구성하고 인스턴스 할당을 지정하면 MIG를 VM 0개로 축소할 수 있습니다. 측정항목에 그룹이 완수할 작업이 없다고 표시되면 그룹은 측정항목이 사용 가능한 새 작업을 감지할 때까지 VM 0개로 축소됩니다. 그룹별 측정항목 기준의 확장과 달리 인스턴스별 자동 확장은 하나 이상의 VM에서 리소스 사용률 측정항목을 사용해야 하므로 그룹의 크기가 1 미만으로 축소될 수 없습니다.

그룹별 측정항목 필터링

필터를 그룹별 Cloud Monitoring 측정항목에 적용하면 여러 스트림 또는 라벨이 있는 측정항목의 개별 값을 사용하여 MIG를 확장할 수 있습니다.

그룹별 측정항목 필터링 요구사항

자동 확장 처리 필터링은 일부 제한사항이 있는 Cloud Monitoring 필터 구문과 호환됩니다. 그룹별 측정항목용 필터는 다음 요구사항을 충족해야 합니다.

  • 조인 선택기에는 AND 연산자만 사용할 수 있습니다.
  • 같음 비교 연산자 =를 각 선택기의 함수와 함께 사용할 수 없습니다. 예를 들어 startswith() 함수를 = 비교 연산자와 함께 사용할 수 없습니다.
  • 와일드카드는 사용할 수 없습니다.
  • metric.labels.state = "used"와 같이 필터 값을 큰따옴표로 묶어야 합니다.
  • 필터에서 metric.type = "..." 측정항목 유형 선택기를 지정하고 원래 metric 필드를 포함할 수도 있습니다. 필요한 경우 metric 필드만 사용할 수 있습니다. 측정항목은 다음 요구사항을 충족해야 합니다.
    • 측정항목을 최소한 한 곳에 지정해야 합니다.
    • 측정항목을 두 곳에 지정할 수도 있지만 이 경우 측정항목이 동일해야 합니다.
  • resource.type 선택기를 지정해야 하지만 그룹별 측정항목을 사용하여 확장하려면 gce_instance로 설정해서는 안 됩니다.
  • 최상의 결과를 얻으려면 필터가 그룹에 대해 단일 시계열을 반환할 만큼 구체적이어야 합니다. 필터가 여러 시계열을 반환하면 해당 시계열이 함께 추가됩니다.

그룹별 모니터링 측정항목을 사용한 자동 확장 구성

Google Cloud Console, gcloud 명령줄 도구(베타), Compute Engine API(베타)를 사용하여 단일 영역 MIG에 대해 그룹별 측정항목을 사용한 자동 확장을 구성합니다.

Console

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

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

  2. 관리형 인스턴스 그룹이 없으면 하나 만듭니다. 그렇지 않으면 단일 영역 MIG의 이름을 클릭하여 인스턴스 그룹 세부정보 페이지를 엽니다.
  3. 인스턴스 그룹 세부정보 페이지에서 그룹 수정 버튼을 클릭합니다.
  4. 자동 확장에서 자동 확장을 선택해 자동 확장을 사용 설정합니다.
  5. 자동 확장 기반 섹션에서 Stackdriver monitoring 측정항목을 선택합니다.
  6. 측정항목 내보내기 범위 섹션에서 그룹별 단일 시계열을 선택합니다.
  7. 측정항목 식별자 섹션에서 측정항목 이름을 example.googleapis.com/path/to/metric 형식으로 지정합니다.
  8. 측정항목 리소스 유형을 지정합니다.
  9. 여러 스트림 또는 라벨이 있는 측정항목의 개별 값을 사용하려면 추가 필터 표현식을 입력합니다. 필터는 자동 확장 처리 필터링 요구사항을 충족해야 합니다.
  10. 확장 정책 섹션에서 인스턴스 할당이나 사용률 목표를 선택합니다.
    • 인스턴스 할당 정책을 선택했다면 MIG의 각 VM에 할당할 작업량을 나타내는 단일 인스턴스 할당 값을 입력합니다. 예를 들어 2를 지정하면 각 VM에 작업 단위 두 개가 할당됩니다. 자동 확장 처리는 측정항목이 표시하는 가용 작업을 완료할 수 있을 만큼의 VM을 유지합니다. 측정항목 값이 10이고 각 VM에 2개의 작업 단위를 할당한 경우 자동 확장 처리가 MIG에 VM 5개를 만듭니다.
    • 사용률 목표 정책을 선택할 경우
      • 자동 확장 처리가 유지해야 하는 측정항목 값을 나타내는 사용률 목표 값을 입력합니다.
      • 측정항목 값 유형을 나타내는 사용률 목표 유형을 선택하세요.
  11. 준비가 끝나면 변경사항을 저장합니다.

gcloud

인스턴스별 자동 확장 처리와 비슷한 방식으로 MIG의 자동 확장 처리를 만들되 --update-stackdriver-metric 플래그를 지정합니다. 다음 플래그 중 하나를 포함하면 자동 확장 처리가 인스턴스를 프로비저닝하는 방식을 지정할 수 있습니다.

  • 인스턴스 할당: --stackdriver-metric-single-instance-assignment 플래그를 지정합니다.
  • 사용률 목표: --stackdriver-metric-utilization-target 플래그를 지정합니다.

인스턴스 할당:

측정할 측정항목을 지정하고 --stackdriver-metric-single-instance-assignment 플래그를 지정하여 각 인스턴스가 처리할 작업량을 표시합니다. 또한 --stackdriver-metric-filter 플래그를 사용하여 측정항목의 필터를 지정해야 합니다.

gcloud beta compute instance-groups managed set-autoscaling group-name \
    --zone=zone \
    --max-num-replicas=max-instances \
    --min-num-replicas=min-instances \
    --update-stackdriver-metric='metric-url' \
    --stackdriver-metric-filter='metric-filter' \
    --stackdriver-metric-single-instance-assignment=instance-assignment

다음을 바꿉니다.

  • group-name: 자동 확장 처리를 추가할 MIG의 이름입니다.
  • zone: MIG가 있는 영역입니다. 그룹별 측정항목에는 자동 확장 처리 리전을 지정할 수 없습니다.
  • max-instances: 자동 확장 처리가 MIG에 추가할 수 있는 VM 수의 한도입니다.
  • min-instances: 자동 확장 처리가 MIG에서 보유할 수 있는 최소 VM 수의 한도입니다.
  • metric-url: Monitoring 측정항목의 프로토콜 없는 URL입니다.
  • metric-filter: 관련 TimeSeriesMonitoredResource를 사용하여 모니터링 필터를 지정하는 Cloud Monitoring 필터입니다. 필터는 자동 확장 처리 필터링 요구사항을 충족해야 합니다.
  • instance-assignment: MIG의 각 VM 인스턴스에 할당할 작업량입니다. 예를 들어 2를 지정하면 작업 단위 두 개가 각 VM에 할당되고 0.5를 지정하면 작업 단위 반 개가 각 VM에 할당됩니다. 자동 확장 처리는 측정항목이 표시하는 가용 작업을 완료할 수 있을 만큼 VM이 충분하도록 MIG를 확장합니다. 측정항목 값이 10이고 각 VM에 0.5개의 작업 단위를 할당할 경우 자동 확장 처리가 MIG에 VM 20개를 프로비저닝합니다.

사용률 목표:

경우에 따라 자동 확장 처리가 측정하는 측정항목 값에 따라 VM 수를 지정하는 대신 그룹별 측정항목과 사용률 목표를 사용해야 할 수도 있습니다. 자동 확장 처리가 그룹별 측정항목을 가리키게 할 수는 있지만 이때도 자동 확장 처리는 지정된 사용률 목표를 유지하려고 합니다. --stackdriver-metric-utilization-target 플래그로 목표와 목표 유형을 지정하세요. 또한 --stackdriver-metric-filter 플래그를 사용하여 측정항목의 필터를 지정해야 합니다.

gcloud beta compute instance-groups managed set-autoscaling group-name \
    --zone=zone \
    --max-num-replicas=max-instances \
    --min-num-replicas=min-instances \
    --update-stackdriver-metric='metric-url' \
    --stackdriver-metric-filter='metric-filter' \
    --stackdriver-metric-utilization-target=target-value \
    --stackdriver-metric-utilization-target-type=target-type

다음을 바꿉니다.

  • group-name: 자동 확장 처리를 추가할 MIG의 이름입니다.
  • zone: MIG가 있는 영역입니다. 그룹별 측정항목에는 자동 확장 처리 리전을 지정할 수 없습니다.
  • max-instances: 자동 확장 처리가 MIG에 추가할 수 있는 VM 수의 한도입니다.
  • min-instances: 자동 확장 처리가 MIG에서 보유할 수 있는 최소 VM 수의 한도입니다.
  • metric-url: Monitoring 측정항목의 프로토콜 없는 URL입니다.
  • metric-filter: 관련 TimeSeriesMonitoredResource를 사용하여 모니터링 필터를 지정하는 Cloud Monitoring 필터입니다. resource.type 값을 지정해야 하지만 그룹별 측정항목을 사용하여 확장하려면 gce_instance를 지정해서는 안 됩니다. 필터는 자동 확장 처리 필터링 요구사항을 충족해야 합니다.
  • target-value: 자동 확장 처리가 유지하려고 하는 측정항목 값입니다.
  • target-type: 측정항목의 값 유형입니다. 자동 확장 처리의 측정항목 모니터링 기준은 GAUGE, 값의 delta-per-minute 또는 값의 delta-per-second로 설정할 수 있습니다.

그룹별 자동 확장에 사용 가능한 자동 확장 처리 gcloud 명령줄 도구 명령어와 플래그의 목록은 gcloud 명령줄 도구 참조(베타)에서 확인할 수 있습니다.

API

참고: 자동 확장은 관리형 인스턴스 그룹의 기능이지만 [자동 확장 처리](/compute/docs/reference/beta/autoscalers)는 별도의 API 리소스입니다. 자동 확장 API 요청을 구성할 때는 이 사실을 염두에 두세요.

MIG를 위한 자동 확장 처리를 만듭니다. 다음 매개변수 중 하나를 포함하면 자동 확장 처리가 인스턴스를 프로비저닝하는 방식을 지정할 수 있습니다.

  • 인스턴스 할당: singleInstanceAssignment 매개변수를 지정합니다.
  • 사용률 목표: utilizationTarget 매개변수를 지정합니다.

인스턴스 할당:

API에서 POST 요청을 사용하여 자동 확장 처리를 만듭니다. 요청 본문에는 인스턴스별 자동 확장 처리를 만들 때 사용할 일반 매개변수를 포함하되 single-instance-assignment 매개변수를 지정합니다. single-instance-assignment 매개변수는 각 VM이 처리할 작업량을 지정합니다.

POST https://compute.googleapis.com/compute/beta/projects/<var>project-id</var>/zones/<var>zone</var>/autoscalers

{
 "name": "example-autoscaler",
 "target": "zones/<var>zone</var>/instanceGroupManagers/<var>group-name</var>",
 "autoscalingPolicy": {
  "maxNumReplicas": <var>max-instances</var>,
  "minNumReplicas": <var>min-instances</var>,
  "customMetricUtilizations": [
    {
      "metric": "<var>metric-url</var>",
      "filter": "<var>metric-filter</var>",
      "singleInstanceAssignment": <var>instance-assignment</var>
    }
  ],
 }
}

다음을 바꿉니다.

  • project-id: 프로젝트 ID입니다.
  • group-name: 자동 확장 처리를 추가할 MIG의 이름입니다.
  • zone: MIG가 있는 영역입니다. 그룹별 측정항목에는 자동 확장 처리 리전을 지정할 수 없습니다.
  • max-instances: 자동 확장 처리가 MIG에 추가할 수 있는 VM 수의 한도입니다.
  • min-instances: 자동 확장 처리가 MIG에서 보유할 수 있는 최소 VM 수의 한도입니다.
  • metric-url: Monitoring 측정항목의 프로토콜 없는 URL입니다.
  • metric-filter: 관련 TimeSeriesMonitoredResource를 사용하여 모니터링 필터를 지정하는 Cloud Monitoring 필터입니다. resource.type 값을 지정해야 하지만 그룹별 측정항목을 사용하여 확장하려면 gce_instance를 지정해서는 안 됩니다. 필터는 자동 확장 처리 필터링 요구사항을 충족해야 합니다.
  • instance-assignment: MIG의 각 VM 인스턴스에 할당할 작업량입니다. 예를 들어 2를 지정하면 작업 단위 두 개가 각 VM에 할당되고 0.5를 지정하면 작업 단위 반 개가 각 VM에 할당됩니다. 자동 확장 처리는 측정항목이 표시하는 가용 작업을 완료할 수 있을 만큼 VM이 충분하도록 MIG를 확장합니다. 측정항목 값이 10이고 각 VM에 0.5개의 작업 단위를 할당할 경우 자동 확장 처리가 MIG에 VM 20개를 프로비저닝합니다.

사용률 목표:

경우에 따라 자동 확장 처리가 측정하는 측정항목 값에 따라 VM 수를 지정하는 대신 그룹별 측정항목과 사용률 목표를 사용해야 할 수도 있습니다. 자동 확장 처리가 그룹별 측정항목을 가리키게 할 수는 있지만 이때도 자동 확장 처리는 지정된 사용률 목표를 유지하려고 합니다. utilizationTarget 매개변수로 이러한 목표를 지정하세요. 또한 filter 매개변수를 사용하여 측정항목의 필터를 지정해야 합니다.

POST https://compute.googleapis.com/compute/beta/projects/project-id/zones/zone/autoscalers

    {
     "name": "example-autoscaler",
     "target": "zones/zone/instanceGroupManagers/group-name",
     "autoscalingPolicy": {
      "maxNumReplicas": max-instances,
      "minNumReplicas": min-instances,
      "customMetricUtilizations": [
        {
          "metric": "metric-url",
          "filter": "metric-filter",
          "utilizationTarget": target-value,
          "utilizationTargetType": target-type
        }
      ],
     }
    }

다음을 바꿉니다.

  • project-id: 프로젝트 ID입니다.
  • group-name: 자동 확장 처리를 추가할 MIG의 이름입니다.
  • zone: MIG가 있는 영역입니다. 그룹별 측정항목에는 자동 확장 처리 리전을 지정할 수 없습니다.
  • max-instances: 자동 확장 처리가 MIG에 추가할 수 있는 VM 수의 한도입니다.
  • min-instances: 자동 확장 처리가 MIG에서 보유할 수 있는 최소 VM 수의 한도입니다.
  • metric-url: Monitoring 측정항목의 프로토콜 없는 URL입니다.
  • metric-filter: 관련 TimeSeriesMonitoredResource를 사용하여 모니터링 필터를 지정하는 Cloud Monitoring 필터입니다. resource.type 값을 지정해야 하지만 그룹별 측정항목을 사용하여 확장하려면 gce_instance를 지정해서는 안 됩니다. 필터는 자동 확장 처리 필터링 요구사항을 충족해야 합니다.
  • target-value: 자동 확장 처리가 유지하려고 하는 측정항목 값입니다.
  • target-type: 측정항목의 값 유형입니다. 자동 확장 처리의 측정항목 모니터링 기준은 GAUGE, 값의 DELTA_PER_MINUTE 또는 값의 DELTA_PER_SECOND로 설정할 수 있습니다.

예: 인스턴스 할당을 이용해 Pub/Sub 큐를 기준으로 크기 조절

다음 설정을 가정해보겠습니다.

  • 활성 Pub/Sub 주제가 일부 소스로부터 메시지를 수신합니다.
  • 활성 Pub/Sub 구독이 pull 구성의 주제에 연결되어 있습니다. 구독이 our-subscription으로 명명됩니다.
  • 작업자 풀이 해당 구독에서 메시지를 가져와 처리합니다. 풀은 our-instance-group이라는 이름의 단일 영역 MIG이며 us-central1-a 영역에 있습니다. 풀은 작업자 100명을 초과해서는 안 되며 큐에 메시지가 없는 경우 0명의 작업자로 축소되어야 합니다.
  • 평균적으로 작업자는 메시지 하나를 1분 안에 처리합니다.

최적의 인스턴스 할당 값을 결정하려면 몇 가지 접근법을 고려해야 합니다.

  • 큐의 모든 메시지를 최대한 빠르게 처리하려면 인스턴스 할당 값으로 1을 선택합니다. 이렇게 하면 큐의 각 메시지에 VM 인스턴스가 하나씩 생성됩니다(그룹의 최대 VM 수로 제한됨). 하지만 이 경우 과도한 프로비저닝이 발생할 수 있습니다. 최악의 경우 자동 확장 처리가 VM을 닫기 전에 메시지 하나만 처리하기 위해 VM이 생성되기 때문에 실제 작업에 비해 리소스가 훨씬 오래 소모됩니다.
    • 작업자가 여러 메시지를 동시에 처리할 수 있는 경우 값을 동시 프로세스 수만큼 늘리는 것이 좋습니다.
    • 이 예시에서는 한 작업자가 한 메시지만 처리할 수 있어 값을 1 미만으로 설정하는 것은 의미가 없습니다.
  • 처리 지연 시간이 리소스 사용률 및 오버헤드 비용보다 중요하지 않다면 각 VM이 자신의 수명 동안 메시지를 몇 개 처리해야 효율적으로 활용되는 것으로 간주되는지 계산할 수도 있습니다. 시작 및 종료 시간과 자동 확장이 VM을 바로 삭제하지 않는다는 사실을 고려하세요. 예를 들어 시작 및 종료 시간이 총 5분 정도 걸리고 자동 확장이 약 10분 후에 VM을 삭제한다고 가정할 때, 자동 확장 처리가 VM을 닫기 전에 메시지 15개 이상을 처리할 수 있다면 추가 VM을 만드는 것이 효율적이며 이렇게 하면 VM 생성, 시작, 종료에 걸리는 총 시간으로 인한 오버헤드는 최대 25%만 발생합니다. 이 경우 15를 인스턴스 할당 값으로 선택하면 됩니다.
  • 두 접근법을 조합해 처리 지연 시간과 리소스 사용률 중 더 중요한 요소를 기준으로 115 사이의 숫자를 선택할 수 있습니다.

사용 가능한 Pub/Sub 측정항목을 살펴보면 구독 큐 길이를 나타내는 측정항목인 subscription/num_undelivered_messages를 찾을 수 있습니다.

이 측정항목은 현재 처리 중이지만 아직 확인하지 않은 메시지를 포함하여 큐에 있는 총 메시지 수를 내보냅니다. 처리 중인 메시지를 포함하지 않는 측정항목 사용은 권장하지 않는데, 이러한 측정항목은 작업이 완료될 때 0으로 감소해 자동 확장을 축소하고 실제 작업을 방해할 수 있기 때문입니다.

이제 큐에 자동 확장을 구성할 수 있습니다.

gcloud beta compute instance-groups managed set-autoscaling \
    our-instance-group \
    --zone=us-central1-a \
    --max-num-replicas=100 \
    --min-num-replicas=0 \
    --update-stackdriver-metric=pubsub.googleapis.com/subscription/num_undelivered_messages \
    --stackdriver-metric-filter="resource.type = pubsub_subscription AND resource.label.subscription_id = our-subscription" \
    --stackdriver-metric-single-instance-assignment=15

예시: 사용률 목표를 이용해 평균 지연 시간을 기준으로 크기 조절

관련 신호를 제공하는 측정항목이 이전 예시에서처럼 총 가용 작업량이나 그룹에 적용 가능한 다른 리소스를 나타내는 대신 평균, 백분위수 또는 기타 통계적 특성을 나타낼 수도 있습니다. 이번 예시에서는 그룹의 평균 처리 지연 시간을 기준으로 크기를 조절한다고 가정합니다.

다음 설정을 가정해보겠습니다.

  • our-instance-group이라는 이름의 MIG가 특정 작업을 수행하도록 할당됩니다. 그룹은 us-central1-a 영역에 있습니다.
  • 특정 수준으로 유지할 값을 내보내는 Cloud Monitoring 커스텀 측정항목이 존재합니다. 이번 예시에서는 측정항목이 그룹에 할당된 쿼리 처리의 평균 지연 시간을 나타냅니다.
    • 커스텀 측정항목이 custom.googleapis.com/example_average_latency로 명명됩니다.
    • 커스텀 측정항목에는 group_name이라는 이름의 키와 MIG의 이름인 our-instance-group과 동일한 값이 있는 라벨이 존재합니다.
    • 커스텀 측정항목은 전역 모니터링 리소스, 즉 어떤 특정 VM과도 연결되지 않은 리소스의 데이터를 내보냅니다.

측정항목 값이 특정 값을 넘어서면 부하 처리를 위해 그룹에 VM을 더 추가해야 하고 특정 값 이하로 떨어지면 일부 리소스를 확보할 수 있습니다. 자동 확장은 측정항목과 목표 값의 차이에 비례해 VM을 점진적으로 추가 또는 삭제합니다. 이번 예시에서는 계산된 목표 값이 100이라고 가정합니다.

이제 그룹별 사용률 목표 100을 기준으로 그룹의 자동 확장을 구성할 수 있습니다. 이 수치는 자동 확장 처리를 통해 유지되어야 하는 측정항목 값을 나타냅니다.

gcloud beta compute instance-groups managed set-autoscaling \
    our-instance-group \
    --zone=us-central1-a \
    --max-num-replicas=100 \
    --min-num-replicas=0 \
    --update-stackdriver-metric=custom.googleapis.com/example_average_latency \
    --stackdriver-metric-filter "resource.type = global AND metric.labels.group_name = our-instance-group" \
    --stackdriver-metric-utilization-target=100 \
    --stackdriver-metric-utilization-target-type=delta-per-second