資料處理服務

本頁面討論的 Google Cloud 資料服務包括處理所提供資料,並輸出處理結果的服務 (無論是回應要求或持續輸出)。與其將可用性和延遲時間做為這些服務的主要 SLI,不如選擇下列更合適的指標:

  • 正確性:管道發生處理錯誤的次數。
  • 即時性:衡量資料處理速度的指標。

如要從 SRE 的角度進一步瞭解資料管道,請參閱《 網站穩定性工程工作簿》中的「資料處理管道」一節。

您可以使用 TimeSeriesRatio 結構,設定處理有問題的項目與所有處理項目的比率,藉此表示以要求為準的正確性 SLI。您可以運用指標的可用標籤來篩選指標,以得出您偏好的「問題」和「有效」總數。

您可以使用 DistributionCut 結構,表示以要求為基礎的即時性 SLI。

Dataflow

Dataflow 是全代管的串流分析服務,可將延遲時間、處理時間和費用降到最低。您可以使用 Apache Beam SDK,透過 Dataflow 以串流或批次方式處理資料。

詳情請參閱下列說明:

正確性 SLI

Dataflow 會使用 dataflow_job 受監控資源類型和 job/element_count 指標類型,將指標資料寫入 Cloud Monitoring,計算目前為止新增至 PCollection 的元素數量。加總資源標籤,即可得知工作要處理的元素數量。job_name

此外,您也可以搭配使用 logging.googleapis.com/log_entry_count 指標類型和 dataflow_job 受監控資源類型,並使用 severity 指標標籤,計算特定工作記錄的錯誤數。

您可以使用這些指標,以 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,藉此測量資料項目目前處理或等待處理的最長時間。

您可以使用 DistributionCut 結構,透過這項指標表示新鮮度 SLI。

以下範例 SLO 預期在過去一小時內,有 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"
}

您也可以使用 WindowsBasedSli 結構表示新鮮度 SLI。

以下 SLO 範例預期在 24 小時的滾動期間內,有 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,並預期在過去 24 小時內,有 99% 的「my_cluster」工作處於 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,並預期在 24 小時的滾動期間內,「my_cluster」中有 99% 的工作會在 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"
}