数据处理服务

本页面上讨论的 Google Cloud 数据服务包括用于处理提供的数据,并输出该处理结果(响应请求时或以连续方式)的服务。这些服务不使用可用性和延迟时间作为主要 SLI,而是更适合使用以下选项:

  • 正确性:衡量流水线发生的处理错误数。
  • 时效性:衡量数据处理速度。

如需从 SRE 角度详细了解数据流水线,请参阅站点可靠性工程工作簿中的数据处理流水线

您可以通过使用 TimeSeriesRatio 结构设置存在处理问题的项与所有已处理项的比率,表示基于请求的正确性 SLI。可以使用可用标签获得“有问题”或“有效”总数最佳确定结果,从而决定如何过滤指标。

您可以使用 DistributionCut 结构来表示基于请求的时效性 SLI。

Dataflow

Dataflow 是一种全代管式流式分析服务,可以最大限度地减少延迟、缩短处理时间并降低费用。借助 Dataflow,您可以使用 Apache Beam SDK 流式或批量处理数据。

如需了解详情,请参阅以下内容:

正确性 SLI

Dataflow 使用 dataflow_job 受监控的资源类型和 job/element_count 指标类型(用于统计到目前为止添加到 pcollection 中的元素数),将指标数据写入 Cloud Monitoring。通过 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 预计在一个滚动的一天周期 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 小时周期内,“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"
}