Stackdriver Monitoring 측정항목에 따라 확장

자동 확장 처리를 이용하면 다음 측정항목 유형을 바탕으로 크기를 조절할 수 있습니다.

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

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

시작하기 전에

인스턴스당 측정항목

인스턴스당 측정항목은 그룹 내 각 인스턴스에 데이터를 개별적으로 제공합니다. 측정항목은 리소스 사용률을 나타내는 관리형 인스턴스 그룹의 각 인스턴스에 데이터를 제공합니다. 인스턴스당 측정항목의 경우 인스턴스 그룹의 크기를 1 미만으로 축소할 수 없는데, 자동 확장 처리가 작동하려면 하나 이상의 실행 중인 인스턴스에 대한 측정항목이 필요하기 때문입니다.

개별 인스턴스에 한정되지 않는 다른 Stackdriver 측정항목을 사용해 확장해야 하거나 인스턴스 그룹을 수시로 0개의 인스턴스로 축소해야 한다면 대신 그룹당 측정항목을 사용해 인스턴스를 확장하도록 구성해야 합니다.

표준 인스턴스당 측정항목

Stackdriver Monitoring은 가상 머신 인스턴스를 모니터링할 때 사용하는 표준 측정항목 모음을 제공합니다. 하지만 모든 표준 측정항목이 자동 확장 처리가 사용할 수 있는 유효한 사용률 측정항목은 아닙니다.

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

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

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

다음 측정항목은 사용률 정도에 따라 값이 변경되지 않으며 자동 확장 처리가 값을 이용해 크기를 조절할 수 없기 때문에 유효하지 않습니다.

compute.googleapis.com/instance/cpu/reserved_cores

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

커스텀 측정항목

Stackdriver Monitoring을 이용해 커스텀 측정항목을 만들고 자체 모니터링 데이터를 Stackdriver Monitoring 서비스에 기록할 수 있습니다. 이렇게 하면 익숙한 데이터 구조와 일관된 쿼리 구문을 이용해 표준 Cloud Platform 데이터와 커스텀 모니터링 데이터에 나란히 액세스할 수 있습니다. 커스텀 측정항목이 있다면 이러한 측정항목의 데이터를 바탕으로 크기를 조절할 수도 있습니다.

기본 요건

커스텀 측정항목을 사용하려면 다음을 완료해야 합니다.

  • 커스텀 측정항목을 만듭니다. 커스텀 측정항목 생성에 대한 자세한 내용은 커스텀 측정항목 문서를 참조하세요.
  • 관리형 인스턴스 그룹의 모든 인스턴스에서 커스텀 측정항목을 내보내도록 관리형 인스턴스 그룹을 설정합니다.

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

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

  • 측정항목은 인스턴스별 측정항목이어야 합니다. 측정항목은 특정 Compute Engine 인스턴스와 관련된 데이터를 개별적으로 내보내야 합니다.
  • 내보낸 인스턴스별 값은 다음 라벨이 포함된 gce_instance 모니터링 리소스와 연결되어야 합니다.
    • 인스턴스가 위치한 영역의 이름이 있는 zone
    • 인스턴스에 할당된 고유 숫자 ID 값이 있는 instance_id
  • 측정항목은 최소한 60초마다 데이터를 내보내야 합니다. 데이터 내보내기 주기를 60초 이상으로 설정하면 자동 확장 처리가 변경사항을 더 빨리 로드할 수 있습니다. 60초 미만 주기로 데이터를 내보내면 자동 확장 처리의 응답이 느려 변경사항을 로드하지 못할 수도 있습니다.
  • 측정항목은 유효한 사용률 측정항목, 즉 측정항목의 데이터를 이용해 가상 머신의 수를 늘리거나 줄일 수 있는 측정항목이어야 합니다.
  • 측정항목은 int64 또는 double 데이터 값을 내보내야 합니다.

자동 확장 처리가 커스텀 측정항목을 바탕으로 작동하려면 관리형 인스턴스 그룹의 모든 인스턴스에서 이 커스텀 측정항목으로 데이터를 내보내야 합니다.

참고: 인스턴스 내에서 메타데이터 서버의 ID 속성을 요청하면 인스턴스의 숫자 ID를 얻을 수 있습니다. 예를 들어 curl에서는 다음과 같이 입력하면 됩니다.
curl http://metadata.google.internal/computeMetadata/v1/instance/id -H Metadata-Flavor:Google
메타데이터 서버 사용에 대한 자세한 내용은 메타데이터 서버를 참조하세요.

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

자동 확장 처리 설정 프로세스는 표준 또는 커스텀 측정항목 설정 프로세스와 동일합니다. Stackdriver 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을 사용해야 자동 확장 처리가 정확한 비교를 수행할 수 있습니다.

콘솔

지역과 단일 영역 관리형 인스턴스 그룹은 자동 확장 구성 방법이 다릅니다. 지역 관리형 인스턴스 그룹은 인스턴스당 측정항목에 대한 필터링을 지원하지 않습니다.

지역(다중 영역) 관리형 인스턴스 그룹의 자동 확장 구성 방법은 다음과 같습니다.

  1. 인스턴스 그룹 페이지로 이동합니다.
  2. 인스턴스 그룹이 없다면 그룹 하나를 만들어야 합니다. 목록에서 인스턴스 그룹의 이름을 클릭해 인스턴스 그룹 세부정보 페이지를 여는 방법도 있습니다. 그룹은 반드시 지역 그룹이어야 합니다.
  3. 인스턴스 그룹 세부정보 페이지에서 그룹 수정 버튼을 클릭합니다.
  4. 자동 확장에서 켜기를 선택해 자동 확장을 사용 설정합니다.
  5. 자동 확장 기반 섹션에서 Stackdriver monitoring 측정항목을 선택합니다.
  6. 측정항목 식별자 섹션에서 측정항목 이름을 example.googleapis.com/path/to/metric 형식으로 입력합니다.
  7. 목표 섹션에서 목표 값을 지정합니다.
  8. 목표 유형 섹션에 측정항목의 측정 종류에 해당하는 목표 유형을 지정합니다.
  9. 준비가 끝나면 변경사항을 저장합니다.

단일 영역 관리형 인스턴스 그룹의 자동 확장 구성 방법은 다음과 같습니다.

  1. 인스턴스 그룹 페이지로 이동합니다.
  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

(선택사항) 자동 확장 처리가 새로운 가상 머신에서 사용 정보를 수집하려면 가상 머신이 시작된 후 몇 초를 기다려야 하는지 말해주는 --cool-down-period 플래그를 사용할 수 있습니다. 이를 통해 가상 머신이 초기화되는 데 걸리는 시간을 알 수 있으며, 이 시간 동안에는 수집한 사용 정보를 자동 확장에 적용할 수 없습니다. 기본 대기 시간은 60초입니다.

다중 영역 관리형 인스턴스 그룹인 경우에는 --region 플래그를 사용해 인스턴스 그룹을 찾을 위치를 지정하세요. 예를 들면 다음과 같습니다.

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-central1

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

API

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

API에서 myproject를 사용자의 프로젝트 ID로, us-central1-f를 원하는 영역으로 바꿔 다음 URL로 POST 요청을 합니다.

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

요청 본문에는 name, target, autoscalingPolicy 필드가 있어야 합니다. autoscalingPolicymaxNumReplicascustomMetricUtilizations 속성을 입력합니다.

(선택사항) 자동 확장 처리가 사용 정보를 수집하려면 새 인스턴스가 시작된 후 몇 초를 기다려야 하는지 말해주는 coolDownPeriodSec 매개변수를 사용할 수 있습니다. 대기 시간이 지나면 자동 확장 처리는 새 인스턴스에서 사용 정보를 수집하기 시작하고 그룹에 추가 인스턴스가 필요한지를 결정합니다. 이를 통해 인스턴스가 초기화되는 데 걸리는 시간을 알 수 있으며, 이 시간 동안에는 수집한 사용 정보를 자동 확장에 적용할 수 없습니다. 기본 대기 시간은 60초입니다.

POST https://www.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"
   }          ]
 }
}

인스턴스당 측정항목 필터링

필터를 인스턴스별 Stackdriver 측정항목에 적용하면 여러 스트림 또는 라벨이 있는 측정항목의 개별 값을 이용해 단일 영역 관리형 인스턴스 그룹의 크기를 조절할 수 있습니다.

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

자동 확장 처리 필터링은 Stackdriver Monitoring 필터 구문과 호환됩니다. 인스턴스당 측정항목용 필터는 다음 요구사항을 충족해야 합니다.

  • 조인 선택기에는 AND 연산자만 사용할 수 있습니다.
  • = 직접 같음 비교 연산자만 사용할 수 있지만 연산자를 다른 함수와 함께 사용하지는 못합니다. 예를 들어 startswith() 함수를 = 비교 연산자와 함께 사용할 수는 없습니다.
  • resource.type 또는 resource.label.* 선택기와 함께 사용해야 합니다. 인스턴스별 측정항목은 언제나 그룹의 모든 인스턴스 리소스를 사용합니다.
  • 최상의 결과를 얻으려면 필터가 각 인스턴스에 대해 단일 시계열을 반환할 만큼 구체적이어야 합니다. 필터가 여러 시계열을 반환하면 해당 시계열이 함께 추가됩니다.

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

Google Cloud Platform Console, gcloud beta 명령줄 도구 또는 Compute Engine 베타 API를 사용하여 단일 영역 관리형 인스턴스 그룹의 자동 확장을 위한 측정항목 필터를 추가할 수 있습니다.

콘솔

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

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

gcloud

인스턴스별 측정항목을 필터링하는 자동 확장 처리 기능을 생성하려면 일반적인 인스턴스별 자동 확장 처리 기능을 생성할 때와 비슷한 과정을 따르되, 측정항목 필터와 사용률 목표 및 목표 유형에 대한 개별 플래그를 지정해야 합니다. 예를 들어 compute.googleapis.com/instance/network/received_bytes_count 측정항목에는 instance_nameloadbalanced 라벨이 포함되어 있습니다. loadbalanced 부울을 기준으로 필터링하려면 --stackdriver-metric-filter 필터 플래그를 'metric.label.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.label.loadbalanced = true' \
    --max-num-replicas 20 \
    --cool-down-period 90

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

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

API

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

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

API에서 myproject를 사용자의 프로젝트 ID로, us-central1-f를 원하는 영역으로 바꿔 다음 URL로 POST 요청을 합니다. 요청 본문에는 name, target, autoscalingPolicy 필드가 있어야 합니다. autoscalingPolicymaxNumReplicascustomMetricUtilizations 속성을 입력합니다.

POST https://www.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": "compute.googleapis.com/instance/network/received_bytes_count",
    "filter": "metric.label.loadbalanced = true",
    "utilizationTarget": 10,
    "utilizationTargetType": "DELTA_PER_SEC"
   }
  ]
 }
}

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

그룹당 측정항목

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

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

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

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

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

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

그룹당 측정항목 필터링

필터를 그룹당 Stackdriver 측정항목에 적용하면 여러 스트림 또는 라벨이 있는 측정항목의 개별 값을 이용해 관리형 인스턴스 그룹의 크기를 조절할 수 있습니다.

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

자동 확장 처리 필터링은 Stackdriver Monitoring 필터 구문과 호환됩니다. 그룹당 측정항목용 필터는 다음 요구사항을 충족해야 합니다.

  • 조인 선택기에는 AND 연산자만 사용할 수 있습니다.
  • = 직접 같음 비교 연산자는 각 선택기의 함수와 함께 사용할 수 없습니다.
  • 필터에서 metric.type = "..."의 측정항목 유형 선택기를 지정하고 기존의 metric 필드를 포함할 수도 있습니다. 또는 metric 필드만 사용하는 방법도 있습니다. 측정항목은 다음 요구사항을 충족해야 합니다.
    • 측정항목을 최소한 한 곳에 지정해야 합니다.
    • 측정항목을 두 곳에 지정할 수도 있지만 이 경우 측정항목이 동일해야 합니다.
  • resource.type 선택기를 지정해야 하지만, 그룹별 측정항목을 이용해 크기를 조절하려면 gce_instance로 설정해선 안 됩니다.
  • 최상의 결과를 얻으려면 필터가 그룹에 대해 단일 시계열을 반환할 만큼 구체적이어야 합니다. 필터가 여러 시계열을 반환하면 해당 시계열이 함께 추가됩니다.

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

Google Cloud Platform Console, gcloud 베타 명령줄 도구 또는 Compute Engine 베타 API를 사용하여 단일 영역 관리형 인스턴스 그룹에 대해 그룹별 측정항목을 이용한 자동 확장을 구성할 수 있습니다.

콘솔

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

gcloud

인스턴스별 자동 확장 처리와 비슷한 방식으로 관리형 인스턴스 그룹의 자동 확장 처리를 생성하되, --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]은 자동 확장 처리를 추가할 관리형 인스턴스 그룹의 이름입니다.
  • [ZONE]은 관리형 인스턴스 그룹이 있는 영역입니다. 그룹별 측정항목에는 자동 확장 처리 영역을 지정할 수 없습니다.
  • [MAX_INSTANCES]는 자동 확장 처리가 관리형 인스턴스 그룹에 추가할 수 있는 인스턴스 수의 한도입니다.
  • [MIN_INSTANCES]는 자동 확장 처리가 관리형 인스턴스 그룹에서 보유할 수 있는 인스턴스의 최소 숫자입니다.
  • [METRIC_URL]은 Google Cloud Monitoring 측정항목의 프로토콜 없는 URL입니다.
  • [METRIC_FILTER]는 관련 TimeSeriesMonitoredResource를 사용하여 모니터링 필터를 지정하는 Stackdriver Monitoring 필터입니다. 필터는 자동 확장 처리 필터링 요구사항을 충족해야 합니다.
  • [INSTANCE_ASSIGNMENT]는 관리형 인스턴스 그룹에서 각 인스턴스에 할당해야 하는 작업량입니다. 예를 들어 2를 지정하면 작업 단위 두 개를 각 인스턴스에 할당하며 0.5를 지정하면 작업 단위 반 개를 각 인스턴스에 할당합니다. 자동 확장 처리는 측정항목이 표시하는 가용 작업을 완료할 수 있을 만큼의 인스턴스를 확보하도록 관리형 인스턴스 그룹에 인스턴스를 추가합니다. 측정항목 값이 10이며 각 인스턴스에 0.5 작업 단위를 할당했다면 자동 확장 처리는 관리형 인스턴스 그룹에 인스턴스 20개를 프로비저닝합니다.

사용률 목표:

경우에 따라 자동 확장 처리가 측정하는 측정항목 값과 관련된 인스턴스 수를 지정하는 대신 그룹별 측정항목을 사용률 목표와 함께 사용해야 할 수도 있습니다. 자동 확장 처리가 그룹별 측정항목을 가리키게 할 수는 있지만, 이때도 자동 확장 처리는 지정된 사용률 목표를 유지하려고 합니다. --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]은 자동 확장 처리를 추가할 관리형 인스턴스 그룹의 이름입니다.
  • [ZONE]은 관리형 인스턴스 그룹이 있는 영역입니다. 그룹별 측정항목에는 자동 확장 처리 영역을 지정할 수 없습니다.
  • [MAX_INSTANCES]는 자동 확장 처리가 관리형 인스턴스 그룹에 추가할 수 있는 인스턴스 수의 한도입니다.
  • [MIN_INSTANCES]는 자동 확장 처리가 관리형 인스턴스 그룹에서 보유할 수 있는 인스턴스의 최소 숫자입니다.
  • [METRIC_URL]은 Google Cloud Monitoring 측정항목의 프로토콜 없는 URL입니다.
  • [METRIC_FILTER]는 관련 TimeSeriesMonitoredResource를 사용하여 모니터링 필터를 지정하는 Stackdriver 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 요청을 구성할 때는 이 사실을 염두에 두세요.

관리형 인스턴스 그룹을 위한 자동 확장 처리를 만듭니다. 다음 매개변수 중 하나를 포함하면 자동 확장 처리가 인스턴스를 제공하는 방식을 지정할 수 있습니다.

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

인스턴스 할당:

API에서 POST 요청을 이용해 자동 확장 처리를 만드세요. 요청 본문에는 인스턴스별 자동 확장 처리 기능을 생성할 때 사용하는 것과 같은 일반 매개변수를 포함하되, single-instance-assignment 매개변수를 지정합니다. 매개변수는 각 인스턴스가 처리할 작업량을 지정합니다.

POST https://www.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]",
      "singleInstanceAssignment": [INSTANCE_ASSIGNMENT]
    }
  ],
 }
}

각 항목의 의미는 다음과 같습니다.

  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [ZONE]은 관리형 인스턴스 그룹이 있는 영역입니다.
  • [GROUP_NAME]은 자동 확장 처리를 추가할 관리형 인스턴스 그룹의 이름입니다.
  • [MAX_INSTANCES]는 자동 확장 처리가 관리형 인스턴스 그룹에 추가할 수 있는 인스턴스 수의 한도입니다.
  • [MIN_INSTANCES]는 자동 확장 처리가 관리형 인스턴스 그룹에서 보유할 수 있는 인스턴스의 최소 숫자입니다.
  • [METRIC_URL]은 Google Cloud Monitoring 측정항목의 프로토콜 없는 URL입니다.
  • [METRIC_FILTER]는 관련 TimeSeriesMonitoredResource를 사용하여 모니터링 필터를 지정하는 Stackdriver Monitoring 필터입니다. resource.type 값을 지정해야 하지만 그룹별 측정항목을 이용해 크기를 조절하려면 gce_instance로 설정해선 안 됩니다. 필터는 자동 확장 처리 필터링 요구사항을 충족해야 합니다.
  • [INSTANCE_ASSIGNMENT]는 관리형 인스턴스 그룹에서 각 인스턴스에 할당해야 하는 작업량입니다. 예를 들어 2를 지정하면 작업 단위 두 개를 각 인스턴스에 할당하며 0.5를 지정하면 작업 단위 반 개를 각 인스턴스에 할당합니다. 자동 확장 처리는 측정항목이 표시하는 가용 작업을 완료할 수 있을 만큼의 인스턴스를 확보하도록 관리형 인스턴스 그룹에 인스턴스를 추가합니다. 측정항목 값이 10이며 각 인스턴스에 0.5 작업 단위를 할당했다면 자동 확장 처리는 관리형 인스턴스 그룹에 인스턴스 20개를 프로비저닝합니다.

사용률 목표:

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

POST https://www.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]
    }
  ],
 }
}

각 항목의 의미는 다음과 같습니다.

  • [GROUP_NAME]은 자동 확장 처리를 추가할 관리형 인스턴스 그룹의 이름입니다.
  • [ZONE]은 관리형 인스턴스 그룹이 있는 영역입니다.
  • [MAX_INSTANCES]는 자동 확장 처리가 관리형 인스턴스 그룹에 추가할 수 있는 인스턴스 수의 한도입니다.
  • [MIN_INSTANCES]는 자동 확장 처리가 관리형 인스턴스 그룹에서 보유할 수 있는 인스턴스의 최소 숫자입니다.
  • [METRIC_URL]은 Google Cloud Monitoring 측정항목의 프로토콜 없는 URL입니다.
  • [METRIC_FILTER]는 관련 TimeSeriesMonitoredResource를 사용하여 모니터링 필터를 지정하는 Stackdriver Monitoring 필터입니다. resource.type 값을 지정해야 하지만 그룹별 측정항목을 이용해 크기를 조절하려면 gce_instance로 설정해선 안 됩니다. 필터는 자동 확장 처리 필터링 요구사항을 충족해야 합니다.
  • [TARGET_VALUE]는 자동 확장 처리에서 유지하려는 측정항목 값입니다.
  • [TARGET_TYPE]은 측정항목의 값 유형입니다. 자동 확장 처리의 측정항목 모니터링 기준은 GAUGE, 값은 DELTA_PER_MINUTE 또는 DELTA_PER_SECOND로 설정할 수 있습니다.

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

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

  • 사용 중인 Google Cloud Pub/Sub 주제가 일부 소스에서 메시지를 수신합니다.
  • 사용 중인 Google Cloud Pub/Sub 구독이 가져오기 구성의 주제에 연결된 상태입니다. 구독 이름은 our-subscription입니다.
  • 작업자 풀이 해당 구독에서 메시지를 가져와 처리합니다. 풀은 our-instance-group이라는 이름의 단일 영역 관리형 인스턴스 그룹이며 us-central1-a 영역에 있습니다. 풀은 작업자 100명을 초과해선 안 되며 대기열에 메시지가 없다면 작업자 0명으로 축소해야 합니다.
  • 평균적으로 작업자는 메시지 하나를 1분 안에 처리합니다.

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

  • 대기열의 모든 메시지를 최대한 빠르게 처리하려면 인스턴스 할당 값으로 1을 선택하세요. 이렇게 하면 대기열의 각 메시지에 인스턴스가 하나씩 생성됩니다(그룹의 최대 인스턴스 수로 제한됨). 하지만 이 경우 과도한 프로비저닝이 발생할 수 있습니다. 최악의 경우 자동 확장 처리가 인스턴스를 닫기 전에 메시지를 하나만 처리하기 때문에 실제 작업에 비해 리소스가 훨씬 오래 소모됩니다.
    • 작업자가 여러 메시지를 동시에 처리할 수 있다면 동시 프로세스 수만큼 값을 늘리는 것이 바람직합니다.
    • 이 예시에서는 한 작업자가 한 메시지만 처리할 수 있어 값을 1 미만으로 설정하는 것은 의미가 없습니다.
  • 처리 지연 시간이 리소스 사용률 및 오버헤드 비용보다 중요하지 않다면 각 인스턴스가 자신의 수명 동안 메시지를 몇 개 처리해야 효율적으로 활용되는 것으로 간주되는지 계산할 수도 있습니다. 시작 및 종료 시간과 자동 확장이 인스턴스를 바로 삭제하지 않는다는 사실을 고려하세요. 예를 들어 시작 및 종료 시간이 총 5분 정도 걸리고 자동 확장이 약 10분 후에 인스턴스를 삭제한다고 가정할 때, 자동 확장 처리가 인스턴스를 닫기 전에 메시지 15개 이상을 처리할 수 있다면 추가 인스턴스를 만드는 것이 효율적이며 이렇게 하면 인스턴스 생성, 시작, 종료에 걸리는 총 시간으로 인한 오버헤드는 최대 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이라는 이름의 관리형 인스턴스 그룹이 특정 작업을 수행하도록 할당됩니다. 그룹은 us-central1-a 영역에 있습니다.
  • 특정 수준으로 유지할 값을 내보내는 Stackdriver Monitoring 커스텀 측정항목이 존재합니다. 이번 예시에서는 측정항목이 그룹에 할당된 쿼리 처리의 평균 지연 시간을 나타냅니다.
    • 커스텀 측정항목의 이름은 custom.googleapis.com/example_average_latency입니다.
    • 커스텀 측정항목에는 group_name이라는 이름의 키와 인스턴스 그룹의 이름인 our-instance-group과 동일한 값이 있는 라벨이 존재합니다.
    • 커스텀 측정항목은 글로벌 모니터링 리소스, 즉 어떤 인스턴스와도 연결되지 않은 리소스의 데이터를 내보냅니다.

측정항목 값이 특정 값을 넘어서면 로드 처리를 위해 다른 인스턴스를 그룹에 추가해야 하며, 특정 값 이하로 떨어지면 일부 리소스를 확보할 수 있습니다. 자동 확장은 측정항목과 목푯값의 차이에 비례해 인스턴스를 점진적으로 추가 또는 삭제합니다. 이번 예시에서는 계산된 목푯값이 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.label.group_name = our-instance-group" \
    --stackdriver-metric-utilization-target=100 \
    --stackdriver-metric-utilization-target-type=delta-per-second
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Compute Engine 문서