リクエスト / レスポンス サービスとは、ユーザーが特定の処理をサービスに明示的に要求し、そのタスクが正常に完了するまで待つというものです。このようなサービスの一般的な例は、次のとおりです。
- ユーザーがブラウザを使用して直接操作するウェブ アプリケーション。
- ユーザーのスマートフォン上のクライアント アプリケーションと、クライアントが操作する API バックエンドで構成されるモバイルアプリ。
- 他のサービス(ユーザーではなく)によって使用される API バックエンド。
これらすべてのサービスで通常は、可用性(成功したリクエストの比率を測定)とレイテンシ(時間しきい値内に完了したリクエストの割合を測定)から SLI を使用します。可用性とレイテンシの SLI の詳細については、サービス モニタリングのコンセプトをご覧ください。
リクエスト ベースの可用性 SLI を表現するには、TimeSeriesRatio
構造体を使用して、合計リクエストに対する良好なリクエストの比率を設定します。「良い」または「有効」という好ましい判定に至るために利用可能なラベルを使用して指標をフィルタする方法を定めます。
リクエスト ベースのレイテンシ SLI を表現するには、DistributionCut
構造体を使用します。
Cloud Endpoints
Cloud Endpoints は API を管理するためのサービスです。既存の API を取得し、認証、割り当て、モニタリングで公開できます。
Endpoints は、gRPC アプリケーション サーバーの前面にプロキシとして実装されます。プロキシで指標を測定することで、すべてのバックエンドが使用できず、ユーザーにエラーが生じても、ケースを適切に処理できます。Endpoints は、serviceruntime.googleapis.com
接頭辞で始まる指標タイプにデータを書き込みます。
詳しくは以下をご覧ください。
- Cloud Endpoints のドキュメント。
serviceruntime.googleapis.com
指標タイプのリスト。
可用性 SLI
Cloud Endpoints は、api
モニタリング対象リソースタイプと service-runtime api/request_count
指標タイプを使用して Cloud Monitoring に指標データを書き込み、そのデータは、response_code
指標ラベルを使用してフィルタリングし、「良好」と「合計」のリクエストをカウントできます。
リクエスト ベースの可用性 SLI を表現する際は、次の例のようにリクエスト総数に対する良好なリクエストの TimeSeriesRatio
構造体を作成します。
"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
モニタリング対象リソースタイプと、リクエスト レイテンシ指標タイプの 1 つを使用して、指標データを Cloud Monitoring に書き込みます。これらの指標タイプには、response_code
や response_code_class
ラベルがありません。そのため、すべてのリクエストのレイテンシがレポートされます。
リクエスト ベースのレイテンシ SLI を表すには、次の例で示すように DistributionCut
構造体を使用します。
次の SLO の例では、プロジェクト内のすべてのリクエストの 99% が 1 時間の移動枠内で合計レイテンシが 0~100 ミリ秒未満であると想定しています。
{
"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 の例では、1 時間の移動枠内で、リクエストの 98% でバックエンド レイテンシが 0~100 ミリ秒となることを期待しています。
{
"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 は、フルマネージド コンピューティング プラットフォームです。コンテナ化されたアプリケーションを迅速かつ安全にデプロイし、スケーリングすることを目的としています。トラフィックの変化に対応してほぼ瞬時にゼロから自動的にスケールアップ / スケールダウンし、使用した正確なリソースに対してのみ課金することで、インフラストラクチャ管理をすべて抽象化します。
Cloud Run のオブザーバビリティに関する詳細については、次のリンク先をご覧ください。
- Cloud Run のドキュメント。
run.googleapis.com
指標タイプのリスト。
可用性 SLI
Cloud Run は、cloud_run_revision
モニタリング対象リソースタイプと request_count
指標タイプを使用して、Cloud Monitoring に指標データを書き込みます。データは、response_code
や response_code_class
の指標ラベルを使用してフィルタリングし、「良好」なリクエストと「合計」リクエストをカウントできます。
リクエスト ベースの可用性 SLI を表現する際は、次の例のようにリクエスト総数に対する良好なリクエストの TimeSeriesRatio
構造体を作成します。
"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
の指標ラベルを使用してデータをフィルタリングできます。
リクエスト ベースのレイテンシ SLI を表現するには、DistributionCut
構造体を使用します。次の SLO の例では、1 時間の移動枠内で、リクエストの 99% で合計レイテンシが 0~100 ミリ秒となることを期待しています。
{
"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 Run functions
Cloud Run functions はスケーラブルな従量課金制の Functions-as-a-Service で、インフラストラクチャを管理する必要がないコードの実行環境を提供します。関数は、イベント処理や自動化、HTTP/S リクエストの処理など、さまざまなアーキテクチャ パターンで利用されています。
Cloud Run functions のオブザーバビリティの詳細については、次のリンク先をご覧ください。
- Cloud Run functions のドキュメント。
run.googleapis.com
指標タイプのリスト。
可用性 SLI
Cloud Run functions は、cloud_function
モニタリング対象リソースタイプと function/execution_time
指標タイプを使用して、Cloud Monitoring に指標データを書き込みます。データは、status
指標ラベルを使用してフィルタリングし、「良好」と「合計」の実行回数をカウントできます。
リクエスト ベースの可用性 SLI を表現する際は、次の例のようにリクエスト総数に対する良好なリクエストの TimeSeriesRatio
構造体を作成します。
"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 Run functions では、cloud_function
モニタリング対象リソースタイプと function/execution_times
指標タイプを使用して Cloud Monitoring に指標データを書き込みます。データは、関数の実行時間(ナノ秒単位)の分布です。すべての実行のレイテンシを明示的に測定する必要がある場合、または成功した実行のみを測定する必要がある場合は、status
を使用してデータをフィルタリングできます。
リクエスト ベースのレイテンシ SLI を表現するには、DistributionCut
構造体を使用します。次の SLO の例では、すべての Cloud Run functions の実行の 99% で、1 時間の移動枠内の合計レイテンシが 0~100 ミリ秒未満であることを期待しています。
{
"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 の詳細については、次のリンク先をご覧ください。
- App Engine のドキュメント。
appengine.googleapis.com
指標タイプのリスト。
可用性 SLI
App Engine では、gae_app
モニタリング対象リソースタイプと http/server/response_count
指標タイプを使用して Cloud Monitoring に指標データを書き込みます。データは、response_code
指標ラベルを使用してフィルタリングし、「良好」と「合計」のレスポンス数をカウントできます。
App Engine のリクエスト ベースの可用性 SLI を表現する際は、次の例のようにリクエストの総数に対する良好なリクエストの TimeSeriesRatio
構造体を作成します。
"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
指標ラベルを使用してフィルタリングし、「良好」と「合計」の実行回数をカウントできます。
リクエスト ベースの App Engine 用レイテンシ SLI を表現するには、DistributionCut
構造体を使用します。次の SLO の例では、1 時間の移動枠内で、全リクエストの 99% で合計レイテンシが 0~100 ミリ秒となることを期待しています。
{
"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)は、Google が管理する安全な Kubernetes Service です。4 方向の自動スケーリングとマルチクラスタをサポートします。Istio は、サービスの接続、保護、制御、監視を可能にするオープンソースのサービス メッシュです。Istio は、アドオン(Cloud Service Mesh)として GKE にインストールすることも、オープンソース プロジェクトからインストールすることもできます。いずれの場合も、Istio はメッシュで管理される各サービスのトラフィック、エラー、レイテンシに関する情報など、優れたテレメトリーを提供します。
Istio 指標の一覧については、istio.io
指標タイプをご覧ください。
可用性 SLI
Istio は、service/server/request_count
指標タイプと、次のモニタリング対象リソースタイプのいずれかを使用して、Cloud Monitoring に指標データを書き込みます。
データは、response_code
指標ラベルを使用してフィルタリングし、「良好」なリクエストと「合計」リクエストをカウントできます。また、destination_service_name
指標ラベルを使用して、特定の指標のリクエストをカウントすることもできます。
Istio サービス メッシュが管理する GKE 上で実行されているサービスに対してリクエスト ベースの可用性 SLI を表現する際は、次の例のようにリクエストの総数に対する良好なリクエストの TimeSeriesRatio
構造体を作成します。
"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| 指標ラベルを使用して特定のサービスのリクエスト数をカウントできます。
Istio サービス メッシュが管理する GKE で実行されているサービスに対してリクエスト ベースのレイテンシ SLI を表現する際は、DistributionCut
構造体を使用します。次の SLO の例では、frontend
サービスに対するすべてのリクエストの 99% が 1 時間の移動枠内で合計レイテンシが 0~100 ミリ秒未満であることを期待しています。
{
"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"
}