このページで説明する 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"
}