このページで取り上げている Google Cloud データサービスでは、提供されたデータを処理し、そのリクエストへのレスポンスまたは連続した結果として出力します。このサービスでは、主要な SLI として可用性とレイテンシを使用するのではなく、より適切なものとして次に挙げる情報を使用します。
- 正確性。パイプラインが処理する処理エラーの数。
- 鮮度。データの処理速度を表す尺度。
SRE の観点からのデータ パイプラインの詳細については、サイト信頼性エンジニアリング ワークブックのデータ処理パイプラインをご覧ください。
リクエスト ベースの正確性 SLI は、TimeSeriesRatio
構造体を使用して表現され、処理されたすべての項目数に対し、処理の問題が発生した項目の割合を設定します。使用可能なラベルを使用して、「問題」および「有効」の適切な判断基準を指定し、指標をフィルタリングする方法を定めます。
リクエスト ベースの鮮度 SLI を表現するには、DistributionCut
構造体を使用します。
Dataflow
Dataflow は、フルマネージドのストリーミング分析サービスで、レイテンシ、処理時間、コストを最小限に抑えます。Dataflow では、Apache Beam SDK を使用し、データをストリームとして、または一括で処理できます。
詳細については、次のリンク先をご覧ください。
- Dataflow のドキュメント。
dataflow.googleapis.com
指標タイプのリスト。
正確性 SLI
Dataflow は、dataflow_job
モニタリング対象リソースタイプと job/element_count
指標タイプを使用して Cloud Monitoring に指標データを書き込みます。これは、それまでに PCollection に追加された要素数を表します。job_name
リソースラベル全体を合計すると、ジョブで処理される要素の数がわかります。
また、severity
指標ラベルに加え、
指標タイプと logging.googleapis.com
/log_entry_countdataflow_job
モニタリング対象リソースタイプを使用して、特定のジョブが記録するエラーの数をカウントすることもできます。
次の例に示すように、TimeSeriesRatio
構造体と、前述の指標を使用して、リクエストベースの正確性 SLI を、わずかな数のエラーと処理された全要素数として表現できます。
"serviceLevelIndicator": {
"requestBased": {
"goodTotalRatio": {
"totalServiceFilter":
"metric.type=\"dataflow.googleapis.com/job/element_count\"
resource.type=\"dataflow_job\"
resource.label.\"job_name\"=\"my_job\"",
"badServiceFilter":
"metric.type=\"logging.googleapis.com/log_entry_count\"
resource.type=\"dataflow_job\"
resource.label.\"job_name\"=\"my_job\"
metric.label.\"severity\"=\"error\"",
}
}
}
鮮度 SLI
Dataflow は、dataflow_job
モニタリング対象リソースタイプと job/per_stage_system_lag
指標タイプを使用して、指標データ(現在処理されているデータ項目の処理時間または処理待ちの最大時間)を Cloud Monitoring に書き込みます。
この指標を使用する鮮度 SLI は、DistributionCut
構造体を使用して表現します。
次の SLO の例では、1 時間の移動枠内の 99% で最も古いデータ要素が 100 秒以内に処理されることを期待しています。
{
"serviceLevelIndicator": {
"requestBased": {
"distributionCut": {
"distributionFilter":
"metric.type=\"dataflow.googleapis.com/job/per_stage_system_lag\"
resource.type=\"dataflow_job\"
resource.label.\"job_name\"=\"my_job\"",
"range": {
"min": 0,
"max": 100
}
}
}
},
"goal": 0.99,
"rollingPeriod": "3600s",
"displayName": "99% data elements processed under 100 s"
}
また、鮮度 SLI は、WindowsBasedSli
構造体を使用して表現することもできます。
次の SLO の例では、1 日の移動枠内における 5 分間枠の 99% で、100 秒を超えて処理された要素がない(ゼロ)ことを期待しています。
{
"displayName": "Dataflow - windowed freshness",
"serviceLevelIndicator": {
"windowsBased": {
"windowPeriod": "300s",
"metricMeanInRange": {
"timeSeries":
"metric.type=\"dataflow.googleapis.com/job/per_stage_system_lag\"
resource.type=\"dataflow_job\"
resource.label.\"job_name\"=\"my_job\"",
"range": {
"min": "0",
"max": "100"
}
}
}
},
"goal": 0.99,
"rollingPeriod": "86400s"
}
なお、ある時間枠が「良好」と見なされるためには、その指標は、評価期間内の任意の時点で range
で指定されたしきい値を超えてはなりません。
Dataproc
Dataproc は、Hadoop や Spark データ、または分析処理ジョブをサポートするために自動的にスケールするフルマネージドの専用クラスタを提供します。
詳細については、次のリンク先をご覧ください。
- Dataproc のドキュメント。
dataproc.googleapis.com
指標タイプのリスト。
正確性 SLI
Dataproc は、cloud_dataproc_cluster
モニタリング対象リソースタイプと次の指標タイプを使用して、Cloud Monitoring に指標データを書き込みます。
-
cluster/job/submitted_count
。送信されたジョブの合計数をカウントします。 -
cluster/job/failed_count
。失敗したジョブの合計数をカウントします。
これらの指標を使用して、次の例のように、すべての送信済みのジョブに対する失敗ジョブの割合をリクエストベースの正確性 SLI の比率(TimeSeriesRatio
)として表すことができます。
"serviceLevelIndicator": {
"requestBased": {
"goodTotalRatio": {
"totalServiceFilter":
"metric.type=\"dataproc.googleapis.com/cluster/job/submitted_count\"
resource.type=\"cloud_dataproc_cluster\"
resource.label.\"cluster_name\"=\"my_cluster\"",
"badServiceFilter":
"metric.type=\"dataproc.googleapis.com/cluster/job/failed_count\"
resource.type=\"cloud_dataproc_cluster\"
resource.label.\"cluster_name\"=\"my_cluster\"",
}
}
}
鮮度 SLI
また、Dataproc は、cloud_dataproc_cluster
モニタリング対象リソースタイプと次の指標タイプを使用して、Cloud Monitoring に指標データを書き込みます。
-
cluster/job/duration
。ジョブが処理状態にとどまる時間を測定します。state
指標ラベルのデータをフィルタリングして、特定の状態にとどまった時間を識別できます。たとえば、ジョブの処理を開始する前の最大待機時間を設定する SLI を作成して、PENDING
状態の時間を測定します。 -
cluster/job/completion_time
。ジョブがcluster/job/completion_time
指標に残る期間を測定します。ジョブの完了が最もわかりやすい指標の場合、またはクラスタ内のジョブによって処理されたデータ量に変化がなく、処理時間に影響する可能性がある場合に使用します。
次の例に示すように、これらの指標を使用して DistributionCut
構造体を使用して鮮度 SLI を表現できます。
次の SLO の例では、cluster/job/duration
を使用し、「my_cluster」のジョブの 99% が 24 時間の移動枠内で、PENDING
状態となる時間が 100 秒未満であることを期待しています。
{
"serviceLevelIndicator": {
"requestBased": {
"distributionCut": {
"distributionFilter":
"metric.type=\"dataproc.googleapis.com/cluster/job/duration\"
resource.type=\"cloud_dataproc_cluster\"
resource.label.\"cluster_name\"=\"my_cluster\"
metric.label.\"state\"=\"PENDING\"",
"range": {
"min": 0,
"max": 100
}
}
}
},
"goal": 0.99,
"rollingPeriod": "86400s",
"displayName": "Dataproc pending jobs"
}
次の SLO の例では、cluster/job/completion_time
を使用し、「my_cluster」のジョブの 99% が 24 時間の移動枠内で、100 秒未満で完了することを期待しています。
{
"serviceLevelIndicator": {
"requestBased": {
"distributionCut": {
"distributionFilter":
"metric.type=\"dataproc.googleapis.com/cluster/job/completion_time\"
resource.type=\"cloud_dataproc_cluster\"
resource.label.\"cluster_name\"=\"my_cluster\"",
"range": {
"min": 0,
"max": 100
}
}
}
},
"goal": 0.99,
"rollingPeriod": "86400s",
"displayName": "Dataproc completed jobs"
}