API 구성

이 문서에서는 SLO API에서 서비스 및 SLO를 나타내는 데 사용되는 구조를 소개하고 서비스 모니터링 개념에 일반적으로 설명된 개념에 매핑합니다.

SLO API는 서비스 상태를 모니터링하는 데 사용할 수 있는 서비스 수준 목표(SLO)를 설정하는 데 사용됩니다.

서비스 모니터링은 Monitoring API에 다음 리소스를 추가합니다.

API 호출에 대한 자세한 내용은 API 작업을 참조하세요.

서비스

서비스는 Service 객체로 표현됩니다. 이 객체에는 다음 필드가 포함됩니다.

  • 이름: 이 서비스의 정규화된 리소스 이름
  • 표시 이름: 콘솔 구성요소에 사용할 라벨
  • BasicService 유형 중 하나의 구조
  • 시스템 제공 원격 분석 구성 객체

기본 서비스를 정의하려면 서비스 유형을 지정하고 서비스를 설명하는 서비스별 라벨 집합을 제공합니다.

{
   "serviceType": string,
   "serviceLabels": {
      string: string,
      ...
   }
}

다음 섹션에서는 각 서비스 유형에 대한 예시를 제공합니다.

기본 서비스 유형

이 섹션에서는 BasicService 유형을 기반으로 하는 서비스 정의의 예시를 제공합니다. 여기서 serviceType 필드 값은 다음 중 하나입니다.

  • APP_ENGINE
  • CLOUD_ENDPOINTS
  • CLUSTER_ISTIO
  • ISTIO_CANONICAL_SERVICE
  • CLOUD_RUN

이러한 서비스 유형마다 BasicSli 서비스 수준 지표를 사용합니다.

App Engine

    {
      "displayName": "DISPLAY_NAME",
      "basicService": {
          "serviceType": "APP_ENGINE",
          "serviceLabels": {
            "module_id": "MODULE_ID"
          },
      },
    }

Cloud Endpoints

    {
      "displayName": "DISPLAY_NAME",
      "basicService": {
          "serviceType": "CLOUD_ENDPOINTS",
          "serviceLabels": {
            "service": "SERVICE"
          },
      },
    }

클러스터 Istio

    {
      "displayName": "DISPLAY_NAME",
      "basicService": {
          "serviceType": "CLUSTER_ISTIO",
          "serviceLabels": {
            "location": "LOCATION",
            "cluster_name": "CLUSTER_NAME",
            "service_namespace": "SERVICE_NAMESPACE",
            "service_name": "SERVICE_NAME"
          },
      },
    }

Istio 표준 서비스

    {
      "displayName": "DISPLAY_NAME",
      "basicService": {
          "serviceType": "ISTIO_CANONICAL_SERVICE",
          "serviceLabels": {
            "mesh_uid": "MESH_UID",
            "canonical_service_namespace": "CANONICAL_SERVICE_NAMESPACE",
            "canonical_service": "CANONICAL_SERVICE"
          },
      },
    }

Cloud Run

    {
      "displayName": "DISPLAY_NAME",
      "basicService": {
          "serviceType": "CLOUD_RUN",
          "serviceLabels": {
            "service_name": "SERVICE_NAME",
            "location": "LOCATION"
          },
      },
    }

기본 GKE 서비스 유형

이 섹션에는 BasicService 유형에서 빌드된 GKE 서비스 정의의 예시가 포함되어 있습니다. 여기서 serviceType 필드 값은 다음 중 하나입니다.

  • GKE_NAMESPACE
  • GKE_WORKLOAD
  • GKE_SERVICE

이러한 서비스 유형에 SLI를 정의해야 합니다. BasicSli 서비스 수준 지표는 사용할 수 없습니다. 자세한 내용은 서비스 수준 지표를 참조하세요.

GKE 네임스페이스

    {
      "displayName": "DISPLAY_NAME",
      "basicService": {
          "serviceType": "GKE_NAMESPACE",
          "serviceLabels": {
            "project_id": "PROJECT_ID",
            "location": "LOCATION",
            "cluster_name": "CLUSTER_NAME",
            "namespace_name": "NAMESPACE_NAME"
          }
      },
    }

GKE 워크로드

    {
      "displayName": "DISPLAY_NAME",
      "basicService": {
          "serviceType": "GKE_WORKLOAD",
          "serviceLabels": {
            "project_id": "PROJECT_ID",
            "location": "LOCATION",
            "cluster_name": "CLUSTER_NAME",
            "namespace_name": "NAMESPACE_NAME",
            "top_level_controller_type": "TOPLEVEL_CONTROLLER_TYPE",
            "top_level_controller_name": "TOPLEVEL_CONTROLLER_NAME",
          }
      },
    }

GKE 서비스

    {
      "displayName": "DISPLAY_NAME",
      "basicService": {
          "serviceType": "GKE_SERVICE",
          "serviceLabels": {
            "project_id": "PROJECT_ID",
            "location": "LOCATION",
            "cluster_name": "CLUSTER_NAME",
            "namespace_name": "NAMESPACE_NAME",
            "service_name": "SERVICE_NAME"
          }
      },
    }

맞춤 서비스

기본 서비스 유형 중에 적합한 것이 없으면 커스텀 서비스를 만들 수 있습니다. 커스텀 서비스는 다음과 같습니다.

    {
      "displayName": "DISPLAY_NAME",
      "custom": {}
    }

이러한 서비스 유형에 SLI를 정의해야 합니다. BasicSli 서비스 수준 지표는 사용할 수 없습니다. 자세한 내용은 서비스 수준 지표를 참조하세요.

서비스 수준 지표

서비스 수준 지표(SLI)는 서비스의 성능을 측정합니다. SLI는 서비스에서 캡처한 측정항목을 기반으로 합니다. SLI가 정의되는 정확한 방법은 표시기 측정항목으로 사용되는 측정항목 유형에 따라 다르지만 일반적으로 허용되는 결과와 총 결과 사이의 일부 비교입니다.

SLI는 ServiceLevelIndicator 객체로 표현됩니다. 이 객체는 지원되는 세 가지 SLI 유형을 통칭하는 방법입니다.

  • BasicService 서비스 유형의 인스턴스에 자동으로 생성되는 기본 SLI. 이 SLI 유형은 서비스 수준 목표에 설명되어 있습니다. BasicSli 객체로 표현되고 가용성 또는 지연 시간을 측정합니다.

  • 요청 기반 SLI - 허용되는 서비스를 나타내는 이벤트를 계산하는 데 사용 가능. 이 유형의 SLI 사용은 요청 기반 SLO에 설명되어 있습니다. RequestBasedSli 객체로 표현됩니다.

  • 기간 기반 SLI - 일부 양호 기준을 충족하는 기간을 계산하는 데 사용 가능. 이 유형의 SLI 사용은 기간 기반 SLO에 설명되어 있습니다. WindowsBasedSli 객체로 표현됩니다.

예를 들어 다음은 기본 가용성 SLI를 보여줍니다.

{
  "basicSli": {
    "availability": {},
    "location": [
      "us-central1-c"
    ]
  }
}

요청 기반 SLI의 구조

요청 기반 SLI는 특정 결과와 총계의 비율로 서비스 단위를 계산하는 측정항목을 기반으로 합니다. 예를 들어 요청을 계산하는 측정항목을 사용하면 성공을 반환하는 요청 수와 총 요청 수 사이의 비율을 만들 수 있습니다.

요청 기반 SLI를 만드는 방법에는 두 가지가 있습니다.

  • 총 서비스 대비 양호한 서비스의 비율이 측정항목 종류가 DELTA 또는 CUMULATIVE인 두 시계열에서 계산되는 경우 TimeSeriesRatio로 만듭니다.
  • 시계열에 DISTRIBUTION 값 유형이 있고 이 값의 측정항목 종류가 DELTA 또는 CUMULATIVE인 경우 DistributionCut로 만듭니다. 양호한 서비스 값은 지정된 범위에서 히스토그램 버킷에 포함되는 항목 개수이며 총계는 분포의 모든 값의 개수입니다.

다음은 시계열 비율을 사용하는 SLI의 JSON 표현입니다.

{
  "requestBased": {
    "goodTotalRatio": {
      "totalServiceFilter": "resource.type=https_lb_rule metric.type="loadbalancing.googleapis.com/https/request_count"",
      "goodServiceFilter": "resource.type=https_lb_rule metric.type="loadbalancing.googleapis.com/https/request_count" metric.label.response_code_class=200",
    }
  }
}

이 비율의 시계열은 모니터링 리소스 유형과 측정항목 유형의 쌍으로 식별됩니다.

  • 리소스: https_lb_rule
  • 측정항목 유형: loadbalancing.googleapis.com/https/request_count

totalServiceFilter의 값은 측정항목과 리소스 유형의 쌍으로 표현됩니다. goodServiceFilter의 값은 일부 라벨에 특정 값이 있는 같은 쌍으로 표현됩니다. 이러한 경우 response_code_class 라벨 값은 200입니다.

필터 간의 비율은 총 요청 수에 대하여 2xx HTTP 상태를 반환하는 요청 수를 측정합니다.

다음은 분포 컷을 사용하는 SLI의 JSON 표현입니다.

{
  "requestBased": {
    "distribution_cut": {
      "distribution_filter": "resource.type=https_lb_rule  metric.type="loadbalancing.googleapis.com/https/backend_latencies" metric.label.response_code_class=200",
      "range": {
        "min": "-Infinity",
        "max": 500.0
      }
    }
  }
}

시계열은 모니터링 리소스 유형, 측정항목 유형, 측정항목 라벨 값으로 식별됩니다.

  • 리소스: https_lb_rule
  • 측정항목 유형: loadbalancing.googleapis.com/https/backend_latencies
  • 라벨-값 쌍: response_code_class = 200

양호로 간주되는 지연 시간 범위는 range 필드입니다. 이 SLI는 200-클래스 전체 응답의 지연 시간에 대한 500 미만의 2xx-클래스 응답의 지연 시간 비율을 계산합니다.

기간 기반 SLI의 구조

기간 기반 SLI는 제공된 서비스가 양호한 것으로 간주되는 기간을 계산합니다. SLI 정의에 속하는 양호한 서비스를 판단하는 기준입니다.

모든 기간 기반 SLI에는 60~86,400초(1일)의 기간이 포함됩니다.

기간 기반 SLI에 대한 양호한 서비스 기준을 지정하는 방법에는 두 가지가 있습니다.

  • 부울 값이 있는 시계열을 반환하는 모니터링 필터에 설명된 필터 문자열을 만듭니다. 기간 값이 true이면 양호한 기간입니다. 이 필터는 goodBadMetricFilter라고 합니다.
  • 허용 성능의 임곗값을 나타내는 PerformanceThreshold 객체를 만듭니다. 이 객체는 goodTotalRatioThreshold 값으로 지정됩니다.

    PerformanceThreshold 객체는 임곗값과 성능 SLI를 지정합니다. 성능 SLI 값이 임곗값을 충족하거나 초과하면 기간은 양호한 것으로 계산됩니다.

    성능 SLI를 지정하는 방법은 두 가지가 있습니다.

    • basicPerformanceSli 필드에 BasicSli 객체로 지정
    • performance 필드에 RequestBasedSli 객체로 지정 요청 기반 SLI를 사용하는 경우 SLI의 측정항목 종류는 DELTA 또는 CUMULATIVE여야 합니다. 요청 기반 SLI에서는 GAUGE 측정항목을 사용할 수 없습니다.

다음은 기본 가용성 SLI의 성능 임곗값을 기반으로 하는 기간 기반 SLI를 JSON으로 표현합니다.

{
  "windowsBased": {
     "goodTotalRatioThreshold": {
       "threshold": 0.9,
       "basicSliPerformance": {
         "availability": {},
         "location": [
           "us-central1-c"
         ]
       }
     },
     "windowPeriod": "300s"
   }
}

이 SLI는 양호한 성능을 가용성이 90% 이상인 5분 기간으로 지정합니다. 기본 SLI의 구조는 서비스 수준 지표에 나와 있습니다.

기간 기반 SLI에 요청 기반 SLI를 삽입할 수도 있습니다. 삽입된 구조에 대한 자세한 내용은 요청 기반 SLI의 구조를 참조하세요.

서비스 수준 목표

서비스 수준 목표(SLO)는 ServiceLevelObjective 객체로 표현됩니다. 이 객체에는 다음 필드가 포함됩니다.

다음은 기본 가용성 SLI를 serviceLevelIndicator 필드 값으로 사용하는 SLO의 JSON 표현을 보여줍니다.

{
   "name": "projects/PROJECT_NUMBER/services/PROJECT_ID-zone-us-central1-c-csm-main-default-currencyservice/serviceLevelObjectives/3kavNVTtTMuzL7KcXAxqCQ",
   "serviceLevelIndicator": {
     "basicSli": {
       "availability": {},
       "location": [
         "us-central1-c"
       ]
     }
   },
   "goal": 0.98,
   "calendarPeriod": "WEEK",
   "displayName": "98% Availability in Calendar Week"
}

이 SLO는 일주일 동안 98%의 가용성으로 성능 목표를 설정합니다.