本页面上讨论的 Google Cloud 数据服务包括用于处理提供的数据,并输出该处理结果(响应请求时或以连续方式)的服务。这些服务不使用可用性和延迟时间作为主要 SLI,而是更适合使用以下选项:
- 正确性:衡量流水线发生的处理错误数。
- 时效性:衡量数据处理速度。
如需从 SRE 角度详细了解数据流水线,请参阅站点可靠性工程工作簿中的数据处理流水线。
您可以通过使用 TimeSeriesRatio
结构设置存在处理问题的项与所有已处理项的比率,表示基于请求的正确性 SLI。可以使用可用标签获得“有问题”或“有效”总数最佳确定结果,从而决定如何过滤指标。
您可以使用 DistributionCut
结构来表示基于请求的时效性 SLI。
Dataflow
Dataflow 是一种全代管式流式分析服务,可以最大限度地减少延迟、缩短处理时间并降低费用。借助 Dataflow,您可以使用 Apache Beam SDK 流式或批量处理数据。
如需了解详情,请参阅以下内容:
- Dataflow 相关文档。
dataflow.googleapis.com
指标类型的列表。
正确性 SLI
Dataflow 使用 dataflow_job
受监控的资源类型和 job/element_count
指标类型(用于统计到目前为止添加到 pcollection 中的元素数),将指标数据写入 Cloud Monitoring。通过 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 预计在一个滚动的一天周期 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 小时周期内,“my_cluster”中 99% 的作业处于 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"
}