データ処理サービス

このページで取り上げている Google Cloud データサービスでは、提供されたデータを処理し、そのリクエストへのレスポンスまたは連続した結果として出力します。このサービスでは、主要な SLI として可用性とレイテンシを使用するのではなく、より適切なものとして次に挙げる情報を使用します。

  • 正確性。パイプラインが処理する処理エラーの数。
  • 鮮度。データの処理速度を表す尺度。

SRE の観点からのデータ パイプラインの詳細については、サイト信頼性エンジニアリング ワークブックデータ処理パイプラインをご覧ください。

リクエスト ベースの正確性 SLI は、TimeSeriesRatio 構造体を使用して表現され、処理されたすべての項目数に対し、処理の問題が発生した項目の割合を設定します。使用可能なラベルを使用して、「問題」および「有効」の適切な判断基準を指定し、指標をフィルタリングする方法を定めます。

リクエスト ベースの鮮度 SLI を表現するには、DistributionCut 構造体を使用します。

Dataflow

Dataflow は、フルマネージドのストリーミング分析サービスで、レイテンシ、処理時間、コストを最小限に抑えます。Dataflow では、Apache Beam SDK を使用し、データをストリームとして、または一括で処理できます。

詳細については、次のリンク先をご覧ください。

正確性 SLI

Dataflow は、dataflow_job モニタリング対象リソースタイプと job/element_count 指標タイプを使用して Cloud Monitoring に指標データを書き込みます。これは、それまでに PCollection に追加された要素数を表します。job_name リソースラベル全体を合計すると、ジョブで処理される要素の数がわかります。

また、severity 指標ラベルに加え、logging.googleapis.com/log_entry_count 指標タイプと dataflow_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 データ、または分析処理ジョブをサポートするために自動的にスケールするフルマネージドの専用クラスタを提供します。

詳細については、次のリンク先をご覧ください。

正確性 SLI

Dataproc は、cloud_dataproc_cluster モニタリング対象リソースタイプと次の指標タイプを使用して、Cloud Monitoring に指標データを書き込みます。

これらの指標を使用して、次の例のように、すべての送信済みのジョブに対する失敗ジョブの割合をリクエストベースの正確性 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"
}