요청-응답 서비스는 고객이 서비스에 일부 작업을 수행하고 특정 작업이 성공적으로 완료될 때까지 기다리도록 명시적으로 요청하는 서비스입니다. 이러한 서비스의 가장 일반적인 예시는 다음과 같습니다.
- 인간 사용자가 브라우저를 사용하여 직접 상호작용하는 웹 애플리케이션
- 사용자 휴대전화의 클라이언트 애플리케이션과 클라이언트가 상호작용하는 API 백엔드로 구성된 모바일 애플리케이션
- 인간 사용자가 아닌 다른 서비스에서 활용하는 API 백엔드
이러한 모든 서비스의 경우 일반적인 접근 방식은 가용성(성공적인 요청 비율 측정)과 지연 시간(시간 임곗값에 따라 완료된 요청 비율 측정) SLI부터 시작됩니다. 가용성 및 지연 시간 SLI에 대한 자세한 내용은 서비스 모니터링 개념을 참조하세요.
TimeSeriesRatio
구조를 사용하여 총 요청에 대한 양호한 요청의 비율을 설정해 요청 기반 가용성 SLI를 표현합니다. 사용 가능한 라벨을 사용하여 측정항목을 필터링해 '양호' 또는 '유효' 중 원하는 결정을 내리는 방법을 결정합니다.
DistributionCut
구조를 사용하여 요청 기반 지연 시간 SLI를 표현합니다.
Cloud Endpoints
Cloud Endpoints는 API를 관리하는 데 사용되는 서비스입니다. 이 API를 사용하면 기존 API를 가져와 인증, 할당량, 모니터링과 함께 노출할 수 있습니다.
Endpoints는 gRPC 애플리케이션 서버 앞에서 프록시로 구현됩니다. 모든 백엔드를 사용할 수 없고 사용자에게 오류가 발생하는 경우 프록시에서 측정항목을 측정하면 사례를 올바르게 처리할 수 있습니다.
Endpoints는 serviceruntime.googleapis.com
프리픽스로 시작하는 측정항목 유형에 데이터를 기록합니다.
자세한 내용은 다음을 참조하세요.
가용성 SLI
Cloud Endpoints는 api
모니터링 리소스 유형과 response_code
측정항목 라벨을 사용하여 '양호' 및 '총' 요청 수를 계산해 필터링할 수 있는 서비스 런타임 api/request_count
측정항목 유형을 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다.
다음 예시와 같이 전체 요청에 대한 양호한 요청의 TimeSeriesRatio
구조를 만들어 요청 기반 가용성 SLI를 표현합니다.
"serviceLevelIndicator": {
"requestBased": {
"goodTotalRatio": {
"totalServiceFilter":
"metric.type=\"serviceruntime.googleapis.com/api/request_count\"
resource.type=\"api\"
metric.label.\"response_code_class\"!=\"4xx\"",
"goodServiceFilter":
"metric.type=\"serviceruntime.googleapis.com/api/request_count\"
resource.type=\"api\"
(metric.label.\"response_code_class\"=\"1xx\"" OR
metric.label.\"response_code_class\"=\"2xx\""),
}
}
}
지연 시간 SLI
Cloud Endpoints는 다음 기본 측정항목 유형을 사용하여 지연 시간을 캡처합니다.
-
api/request_latencies
: 비스트리밍 요청에 대한 지연 시간 분포(초 단위)입니다. 전반적인 사용자 환경이 중요한 경우에 사용합니다. -
api/request_latencies_backend
: 비스트리밍 요청에 대한 백엔드 지연 시간 분포(초 단위)입니다. 백엔드 지연 시간을 직접 측정할 때 사용합니다. -
api/request_latencies_overhead
: 백엔드를 제외한 비스트리밍 요청에 대한 요청 지연 시간 분포(초 단위)입니다. Endpoints 프록시에 의해 발생한 오버헤드를 측정할 때 사용합니다.
총 요청 지연 시간은 백엔드와 오버헤드 지연 시간의 합계입니다.
request_latencies = request_latencies_backend + request_latencies_overhead
Endpoints는 api
모니터링 리소스 유형과 요청 지연 시간 측정항목 유형 중 하나를 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다.
response_code
또는 response_code_class
라벨을 제공하는 측정항목 유형은 없습니다. 따라서 모든 요청의 지연 시간을 보고합니다.
다음 예시와 같이 DistributionCut
구조를 사용하여 요청 기반 지연 시간 SLI를 표현합니다.
다음 예시 SLO에서는 프로젝트의 모든 요청 중 99%가 1시간 동안 총 지연 시간의 0~100ms 사이에 속할 것으로 예상합니다.
{
"serviceLevelIndicator": {
"requestBased": {
"distributionCut": {
"distributionFilter":
"metric.type=\"serviceruntime.googleapis.com/ap/request_latencies\"
resource.type=\"api\"",
"range": {
"min": 0,
"max": 100
}
}
}
},
"goal": 0.99,
"rollingPeriod": "3600s",
"displayName": "99% requests under 100 ms"
}
다음 예시 SLO에서는 요청의 98%가 1시간 동안 백엔드 지연 시간의 0~100ms 사이에 속할 것으로 예상합니다.
{
"serviceLevelIndicator": {
"requestBased": {
"distributionCut": {
"distributionFilter":
"metric.type=\"serviceruntime.googleapis.com/api/backend_latencies\"
resource.type=\"api\"",
"range": {
"min": 0,
"max": 100
}
}
}
},
"goal": 0.98,
"rollingPeriod": "3600s",
"displayName": "98% requests under 100 ms"
}
Cloud Run
Cloud Run은 컨테이너화된 애플리케이션을 빠르고 안전하게 배포 및 확장하는 완전 관리형 컴퓨팅 플랫폼입니다. 거의 즉시 0에서부터 자동으로 확장 및 축소되어 트래픽 변경에 응답하고 사용한 리소스에만 정확하게 청구하여 모든 인프라 관리 업무를 덜어줍니다.
Cloud Run 관측 가능성에 대한 자세한 내용은 다음을 참조하세요.
가용성 SLI
Cloud Run은 cloud_run_revision
모니터링 리소스 유형과 request_count
측정항목을 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다. response_code
또는 response_code_class
측정항목 라벨을 사용하여 '양호' 및 '총' 요청 수를 계산해 데이터를 필터링할 수 있습니다.
다음 예시와 같이 전체 요청에 대한 양호한 요청의 TimeSeriesRatio
구조를 만들어 요청 기반 가용성 SLI를 표현합니다.
"serviceLevelIndicator": {
"requestBased": {
"goodTotalRatio": {
"totalServiceFilter":
"metric.type=\"run.googleapis.com/request_count\"
resource.type=\"cloud_run_revision\"
metric.label.\"response_code_class\"!=\"4xx\"",
"goodServiceFilter":
"metric.type=\"run.googleapis.com/request_count\"
resource.type=\"cloud_run_revision\"
(metric.label.\"response_code_class\"=\"1xx\"" OR
metric.label.\"response_code_class\"=\"2xx\""),
}
}
}
지연 시간 SLI
지연 시간을 측정하기 위해 Cloud Run은 cloud_run_revision
모니터링 리소스 유형과 request_latencies
측정항목 유형을 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다. 데이터는 버전에 도달하는 요청 지연 시간 분포(밀리초 단위)입니다. 모든 요청이나 성공한 요청에 대해서만 지연 시간을 명시적으로 측정해야 하는 경우 response_code
또는 response_code_class
측정항목 라벨을 사용하여 데이터를 필터링할 수 있습니다.
DistributionCut
구조를 사용하여 요청 기반 지연 시간 SLI를 표현합니다. 다음 예시 SLO에서는 요청의 99%가 1시간 동안 총 지연 시간의 0~100ms 사이에 속할 것으로 예상합니다.
{
"serviceLevelIndicator": {
"requestBased": {
"distributionCut": {
"distributionFilter":
"metric.type=\"run.googleapis.com/request_latencies\"
resource.type=\"cloud_run_revision"",
"range": {
"min": 0,
"max": 100
}
}
}
},
"goal": 0.99,
"rollingPeriod": "3600s",
"displayName": "99% requests under 100 ms"
}
Cloud Functions
Cloud Functions는 인프라를 관리할 필요 없이 코드를 실행하는 서비스를 제공하는 확장 가능하고 사용한 만큼만 지불하는 서비스로서의 기능입니다. Functions는 이벤트 처리, 자동화, HTTP/S 요청 제공과 같은 작업을 수행하도록 여러 아키텍처 패턴에서 사용됩니다.
Cloud Functions 관측 가능성에 대한 자세한 내용은 다음을 참조하세요.
가용성 SLI
Cloud Functions는 cloud_function
모니터링 리소스 유형과 function/execution_time
측정항목을 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다.
status
측정항목 라벨을 사용하여 '양호' 및 '총' 실행 횟수를 계산해 데이터를 필터링할 수 있습니다.
다음 예시와 같이 전체 요청에 대한 양호한 요청의 TimeSeriesRatio
구조를 만들어 요청 기반 가용성 SLI를 표현합니다.
"serviceLevelIndicator": {
"requestBased": {
"goodTotalRatio": {
"totalServiceFilter":
"metric.type=\"cloudfunctions.googleapis.com/function/execution_count\"
resource.type=\"cloud_function\"",
"goodServiceFilter":
"metric.type=\"cloudfunctions.googleapis.com/function/execution_count\"
resource.type=\"cloud_function\
metric.label.\"status\"=\"ok\"",
}
}
}
지연 시간 SLI
지연 시간을 측정하기 위해 Cloud Functions는 cloud_function
모니터링 리소스 유형과 function/execution_times
측정항목 유형을 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다. 데이터는 함수 실행 시간 분포(나노초 단위)입니다.
모든 실행이나 성공한 실행에 대해서만 지연 시간을 명시적으로 측정해야 하는 경우 status
를 사용하여 데이터를 필터링할 수 있습니다.
DistributionCut
구조를 사용하여 요청 기반 지연 시간 SLI를 표현합니다. 다음 예시 SLO에서는 모든 Cloud Functions 실행의 99%가 1시간 동안 총 지연 시간의 0~100ms 사이에 속할 것으로 예상합니다.
{
"serviceLevelIndicator": {
"requestBased": {
"distributionCut": {
"distributionFilter":
"metric.type=\"cloudfunctions.googleapis.com/function/execution_times\"
resource.type=\"cloud_function\"",
"range": {
"min": 0,
"max": 100
}
}
}
},
"goal": 0.99,
"rollingPeriod": "3600s",
"displayName": "99% requests under 100 ms"
}
App Engine
App Engine은 애플리케이션을 빌드하고 실행할 수 있는 완전 관리형 서버리스 플랫폼을 제공합니다. 표준 또는 가변형 등 두 가지 환경을 선택할 수 있습니다. 자세한 내용은 App Engine 환경 선택을 참조하세요.
App Engine에 대한 자세한 내용은 다음을 참조하세요.
가용성 SLI
App Engine은 gae_app
모니터링 리소스 유형과 http/server/response_count
측정항목 유형을 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다.
response_code
측정항목 라벨을 사용하여 '양호' 및 '총' 응답 횟수를 계산해 데이터를 필터링할 수 있습니다.
다음 예시와 같이 총 요청에 대한 양호한 요청의 TimeSeriesRatio
구조를 만들어 App Engine의 요청 기반 가용성 SLI를 표현합니다.
"serviceLevelIndicator": {
"requestBased": {
"goodTotalRatio": {
"totalServiceFilter":
"metric.type=\"appengine.googleapis.com/http/server/response_count\"
resource.type=\"gae_app\"
metric.label.\"response_code\">\"499\"
metric.label.\"response_code\"<\"399\"",
"goodServiceFilter":
"metric.type=\"appengine.googleapis.com/http/server/response_count\"
resource.type=\"gae_app\"
metric.label.\"response_code\"<\"299\"",
}
}
}
지연 시간 SLI
지연 시간을 측정하기 위해 App Engine은 gae_app
모니터링 리소스 유형과 http/server/response_latencies
측정항목 유형을 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다.
response_code
측정항목 라벨을 사용하여 '양호' 및 '총' 실행 횟수를 계산해 데이터를 필터링할 수 있습니다.
DistributionCut
구조를 사용하여 App Engine의 요청 기반 지연 시간 SLI를 표현합니다. 다음 예시 SLO에서는 모든 요청의 99%가 1시간 동안 총 지연 시간의 0~100ms 사이에 속할 것으로 예상합니다.
{
"serviceLevelIndicator": {
"requestBased": {
"distributionCut": {
"distributionFilter":
"metric.type=\"appengine.googleapis.com/http/server/response_latencies\"
resource.type=\"gae_app\"",
"range": {
"min": 0,
"max": 100
}
}
}
},
"goal": 0.99,
"rollingPeriod": "3600s",
"displayName": "99% requests under 100 ms"
}
GKE 및 Istio
Google Kubernetes Engine(GKE)은 4가지 자동 확장 및 멀티 클러스터 지원을 제공하는 Google의 안전한 관리형 Kubernetes 서비스입니다. Istio는 서비스를 연결, 보호, 제어, 관찰할 수 있게 해주는 오픈소스 서비스 메시입니다. Istio는 GKE의 부가기능인 Cloud Service Mesh로 또는 오픈소스 프로젝트의 사용자에 의해 GKE에 설치될 수 있습니다. 두 경우 모두 Istio는 메시에서 관리하는 각 서비스의 트래픽, 오류, 지연 시간에 대한 정보가 포함된 우수한 원격 분석을 제공합니다.
Istio 측정항목의 전체 목록은 istio.io
측정항목 유형을 참조하세요.
가용성 SLI
Istio는 service/server/request_count
측정항목 유형과 다음 모니터링 리소스 유형 중 하나를 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다.
response_code
측정항목 라벨을 사용하여 '양호' 및 '총' 요청 수를 계산해 데이터를 필터링할 수 있습니다. destination_service_name
측정항목 라벨을 사용하여 특정 서비스의 요청 수를 계산할 수도 있습니다.
다음 예시와 같이 총 요청 수에 대한 TimeSeriesRatio
구조를 만들어 Istio 서비스 메시에서 관리하는 GKE에서 실행되는 서비스의 요청 기반 가용성 SLI를 표현합니다.
"serviceLevelIndicator": {
"requestBased": {
"goodTotalRatio": {
"totalServiceFilter":
"metric.type=\"istio.io/service/server/request_count\"
resource.type=\"k8s_container\"
metric.label.\"destination_service_name\"=\"frontend\"",
"goodServiceFilter":
"metric.type=\istio.io/server/response_count\"
resource.type=\"k8s_container\"
metric.label.\"destination_service_name\"=\"frontend\"
metric.label.\"response_code\"<\"299\"",
}
}
}
지연 시간 SLI
지연 시간을 측정하기 위해 Istio는 service/server/response_latencies
측정항목 유형과 다음 모니터링 리소스 유형 중 하나를 사용하여 측정항목 데이터를 Cloud Monitoring에 기록합니다.
특정 서비스의 요청 수를 계산하려면 response_code
측정항목 라벨을 사용하여 "good" and "total" requests. You can also use the
destination_service_name` 측정항목 라벨을 계산해 데이터를 필터링하면 됩니다.
DistributionCut
구조를 사용하여 Istio 서비스 메시에서 관리하는 GKE에서 실행되는 서비스의 요청 기반 지연 시간 SLI를 표현합니다.
다음 예시 SLO에서는 frontend
서비스에 대한 모든 요청 중 99%가 1시간 동안 총 지연 시간의 0~100ms 사이에 속할 것으로 예상합니다.
{
"serviceLevelIndicator": {
"requestBased": {
"distributionCut": {
"distributionFilter":
"metric.type=\"istio.io/server/response_latencies\"
resource.type=\"k8s_container\"
metric.label.\"destination_service_name\"=\"frontend\"",
"range": {
"min": 0,
"max": 100
}
}
}
},
"goal": 0.99,
"rollingPeriod": "3600s",
"displayName": "99% requests under 100 ms"
}