本頁面討論的 Google Cloud 資料服務包括處理所提供資料,並輸出處理結果的服務 (無論是回應要求或持續輸出)。與其將可用性和延遲時間做為這些服務的主要 SLI,不如選擇下列更合適的指標:
- 正確性:管道發生處理錯誤的次數。
- 即時性:衡量資料處理速度的指標。
如要從 SRE 的角度進一步瞭解資料管道,請參閱《 網站穩定性工程工作簿》中的「資料處理管道」一節。
您可以使用 TimeSeriesRatio
結構,設定處理有問題的項目與所有處理項目的比率,藉此表示以要求為準的正確性 SLI。您可以運用指標的可用標籤來篩選指標,以得出您偏好的「問題」和「有效」總數。
您可以使用 DistributionCut
結構,表示以要求為基礎的即時性 SLI。
Dataflow
Dataflow 是全代管的串流分析服務,可將延遲時間、處理時間和費用降到最低。您可以使用 Apache Beam SDK,透過 Dataflow 以串流或批次方式處理資料。
詳情請參閱下列說明:
- Dataflow 說明文件。
dataflow.googleapis.com
指標類型清單。
正確性 SLI
Dataflow 會使用 dataflow_job
受監控資源類型和 job/element_count
指標類型,將指標資料寫入 Cloud Monitoring,計算目前為止新增至 PCollection 的元素數量。加總資源標籤,即可得知工作要處理的元素數量。job_name
此外,您也可以搭配使用
指標類型和 logging.googleapis.com
/log_entry_countdataflow_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 資料/分析處理工作。
詳情請參閱下列說明:
- 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
,並預期在過去 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"
}