使用 Dataflow 监控界面

使用 Dataflow 代管式服务运行流水线时,您可以通过 Dataflow 的 Web 监控界面查看该作业和其他任何作业。通过此监控界面,您可以查看相关 Dataflow 作业并与之交互。

您可以使用 Google Cloud Console 访问 Dataflow 监控界面。此监控界面可以显示以下内容:

  • 包含当前正在运行的所有 Dataflow 作业和过去 30 天内运行的作业的列表。
  • 每个流水线的图形表示。
  • 有关作业状态、类型和 SDK 版本的详情。
  • 运行流水线的 Google Cloud 服务(如 Compute EngineCloud Storage)相关信息的链接。
  • 作业执行期间出现的任何错误或警告。
  • 作业的其他诊断信息。

您可以在 Dataflow 监控界面中查看作业监控图表。这些图表显示流水线作业持续时间内的各种指标,并包含以下信息:

  • 步骤级可见性,可帮您确定哪些步骤会导致流水线延迟问题。
  • 可揭示出异常行为的统计信息。
  • 可帮助确定来源和接收器中的瓶颈问题的 I/O 指标。

访问 Dataflow 监控界面

如需访问 Dataflow 监控界面,请按以下步骤操作:

  1. 登录控制台。
  2. 选择您的 Google Cloud 项目。
  3. 打开导航菜单。
  4. 大数据下方,点击 Dataflow

此时系统将显示 Dataflow 作业及其状态的列表。如果您没有看到任何作业,则需要运行新作业。如需了解如何运行作业,请参阅 Dataflow 快速入门

Dataflow 作业列表,其中包含处于正在运行、失败和成功状态的作业。
图 1:控制台中的 Dataflow 作业列表,其中包含处于正在运行失败成功状态的作业。

作业可能具有以下状态:

  • :监控界面尚未从 Dataflow 服务收到状态。
  • 正在运行:作业正在运行。
  • 正在启动...:作业已创建,但系统在启动前需要一些时间进行准备。
  • 已加入队列:一个 FlexRS 作业已加入队列,或者正在启动 Flex 模板作业(这可能需要几分钟时间)。
  • 正在取消…正在取消作业。
  • 已取消:作业已取消。
  • 正在排空…正在排空作业。
  • 已排空:作业已被排空。
  • 正在更新…正在更新作业。
  • 已更新:作业已更新。
  • 成功:作业已成功完成。
  • 失败:作业未能完成。

如需查看一个流水线的详细信息,请点击该作业的名称

访问作业监控图表

如需访问作业的监控图表,请在 Dataflow 监控界面中点击作业名称。此时会显示作业详情页面,其中包含以下信息:

  • 作业图:流水线的直观展示
  • 执行详情:用于优化流水线性能的工具
  • 作业指标:关于作业运行情况的指标
  • 作业信息面板:关于流水线的描述性信息
  • 作业日志:Dataflow 服务在作业级层生成的日志
  • 工作器日志:Dataflow 服务在工作器级层生成的日志
  • 诊断:显示沿所选时间轴发生的错误以及关于流水线的可能建议的表格
  • 时间选择器:可用于调整指标的时间范围的工具

Job 详情页面,您可以使用作业图执行详情作业指标

选择了“作业图”标签页的 Dataflow 监控界面的视图。您可以在此模式下查看流水线图、作业信息、作业日志、工作器日志、诊断和时间选择器工具。

选择了“作业指标”标签页的 Dataflow 监控界面的视图。
您可以在此模式下查看作业指标图表、作业信息、作业日志、工作器日志、诊断和时间选择器工具。

创建 Cloud Monitoring 提醒

Dataflow 与 Cloud Monitoring 完全集成,可让您在作业超出用户定义的阈值时创建提醒。如需从指标图表创建 Cloud Monitoring 提醒,请点击创建提醒政策

**创建提醒政策**链接允许您从指标图表创建提醒。

如需查看创建这些提醒的说明,请参阅使用 Cloud Monitoring for Dataflow 流水线页面。如果您看不到监控图或无法创建提醒,则可能需要其他 Monitoring 权限

全屏模式

要以全屏模式查看指标图表,请点击

使用时间选择器工具

您可以使用时间选择器工具来调整指标的时间范围。您可以选择预定义的持续时间或自定义时间间隔来分析作业。

借助时间选择器工具,您可以选择以小时数和天数为增量的时间范围,也可以选择自定义范围。

对于流处理作业或运行中的批处理作业,默认显示的图表会显示相应作业前六个小时的指标。对于已停止或已完成的流处理作业,默认显示的图表会显示相应作业持续时间内的完整运行时间。

阶段和工作器指标

您可以在 Dataflow 界面的 Job metrics 标签页中查看图表。每个指标都会整理到以下信息中心内:

指标概览

流式数据处理指标(仅限流处理流水线)

资源指标

输入指标

输出指标

如需访问这些图表中的其他信息,请点击 Legend Toggle 以切换至“展开图表图例”。

Legend Toggle 按钮位于“创建提醒政策”按钮附近。

其中一些图表仅特定于流式处理流水线。可以在使用流式 Dataflow 监控指标部分找到可使用这些指标进行调试的场景列表。

自动扩缩

Dataflow 服务会自动选择运行您的自动扩缩作业所需的工作器实例数量。一段时间后,工作器实例数可能会根据作业要求而发生变化。

直观呈现数据的图表,显示了一个流水线中的工作器数量。

要查看自动扩缩更改历史记录,请点击更多历史记录按钮。此时会显示一个表格,其中包含流水线的工作器历史记录信息。

显示流水线的工作器历史记录的表格。

吞吐量

吞吐量是指在任何时间点处理的数据量。该指标针对每个步骤计量,显示为每秒处理的元素数量。如需以“每秒字节数”为单位查看此指标,请向下滚动到吞吐量(字节数/秒)图表。

直观呈现数据的图表,显示了流水线中四个步骤的吞吐量。

工作器错误日志计数

工作器错误日志计数显示任何时间点在所有工作器中观察到的错误率。

关于已记录的每个错误及其发生次数的摘要。

数据新鲜度(无论是否使用 Streaming Engine)

数据新鲜度指标显示数据元素的时间戳与流水线处理事件的时间之间的差值(以秒为单位)。每当数据元素上发生事件时(例如,网站上的点击或 Pub/Sub 中的数据注入),数据元素便会收到一个时间戳。数据处理时间是输出水印。

Dataflow 作业可随时处理多个元素。数据新鲜度图表中的数据点会显示相对于事件时间具有最长延迟时间的元素。因此,图表中的同一条线可以显示多个元素的数据,该条线上的每个数据点均显示流水线中该阶段具有最长延迟时间的元素的数据。

如果尚未处理某些输入数据,则输出水印可能会延迟,从而影响数据新鲜度。如果水印时间和事件时间之间存在显著差异,则表示操作缓慢。

如需了解详情,请参阅 Apache Beam 文档中的水印和延迟数据部分。

信息中心包括以下两个图表:

  • 数据新鲜度(按阶段)
  • 数据新鲜度

直观呈现数据的图表,显示流处理流水线中的数据新鲜度。

在上图中,突出显示的区域表明事件时间和输出水印时间之间存在显著差异,这表示操作缓慢。

系统延迟时间(无论是否使用 Streaming Engine)

系统延迟时间是指某数据项已处理或等待处理的当前最长秒数。此指标表示元素在流水线中任意一个来源内等待的时间。处理完毕后,系统会调整最长时长。以下是其他注意事项:

  • 对于多个来源和接收器,系统延迟时间是指元素在写入到所有接收器之前在来源内等待的最长时长。
  • 有时,来源不会为元素在来源内等待的时间段提供值。此外,该元素可能没有用于定义其事件时间的元数据。 在这种情况下,系统延迟时间从流水线最初收到该元素的时间开始计算。

信息中心包括以下两个图表:

  • 各阶段的系统延迟时间
  • 系统延迟时间

直观呈现数据的图表,显示了流处理流水线中的系统延迟时间。

积压

积压信息中心提供有关等待处理的元素的信息。信息中心包括以下两个图表:

  • 积压消息秒数(仅限 Streaming Engine)
  • 积压字节数(无论是否使用 Streaming Engine)

积压消息秒数图表显示了在没有新数据到达且吞吐量未变化的情况下处理当前积压消息需要的时间(以秒为单位)。预估的积压时间是根据吞吐量和来自输入源的待处理积压字节数计算的。流式自动扩缩功能使用此指标来确定何时扩容或缩容。

显示流处理流水线中的积压消息秒数的数据可视化图表。

积压字节数图表显示了某个阶段的已知未处理输入的数量(以字节为单位)。此指标将可供每个阶段使用的剩余字节数与上游阶段进行比较。为准确报告此指标,必须正确配置流水线提取的每个来源。Pub/Sub 和 BigQuery 等原生来源已受到开箱支持,但自定义来源需要一些额外的实现。如需了解详情,请参阅自定义无界限来源的自动扩缩

直观呈现数据,显示了流式处理流水线中的积压字节数图表。

处理(仅限 Streaming Engine)

处理信息中心提供有关活跃用户操作的信息。信息中心包括以下两个图表:

  • 用户处理延迟时间热图
  • 各阶段的用户处理延迟时间

用户处理延迟时间热图显示第 50、95 和 99 百分位分布的最大用户操作延迟时间。您可以使用热图来查看是否有任何长尾操作导致了较高的整体系统延迟或对整体数据新鲜度产生了负面影响。

第 99 百分位的高延迟对作业的影响通常比第 50 百分位的高延迟小。要在上游问题成为下游问题之前解决它,请设置第 50 百分位的高延迟提醒政策。

显示流处理流水线的用户处理延迟时间热图的数据可视化图。

各阶段的用户处理延迟时间图表显示按阶段细分的每个活跃用户操作的第 99 百分位。如果用户代码导致了瓶颈,此图表会显示哪个阶段包含瓶颈。您可以按照以下步骤调试流水线:

  1. 使用图表找到延迟异常高的阶段。

  2. 在作业详情页面的执行详情标签页中,对于图表视图,选择阶段工作流。在阶段工作流图表中,找到延迟异常高的阶段。

  3. 要查找关联的用户操作,请在图表中点击该阶段的节点。

  4. 如需查找更多详细信息,请打开 Cloud Profiler,并使用 Cloud Profiler 在正确的时间范围内调试堆栈轨迹。查找您在上一步中确定的用户操作。

显示流处理流水线的各阶段用户处理延迟时间的数据可视化图。

并行处理(仅限 Streaming Engine)

并行处理图表显示用于每个阶段的数据处理的大致键数。Dataflow 根据流水线的并行性进行扩缩。在 Dataflow 中,流水线的并行性是指在任何给定时间以最有效率的方式处理数据所需的估算线程数。任何给定键的处理都是序列化的,因此一个阶段的键总数表示该阶段的最大可用并行性。可以使用并行性指标来查找慢速或卡住的流水线的热键或瓶颈。

直观呈现数据,显示了流式处理流水线中的并行处理图表。

持久性(仅限 Streaming Engine)

持久性信息中心显示特定流水线阶段写入和读取 Persistent Disk 存储的速率(以每秒字节数为单位)。信息中心包括以下两个图表:

  • 存储写入
  • 存储读取

写入和读取操作的速度受所选磁盘的最大 IOPS(每秒输入/输出操作数)的限制。如需确定当前磁盘是否导致了瓶颈,请查看工作器正在使用的磁盘的 IOPS。如需详细了解永久性磁盘的性能限制,请参阅性能限制

显示流处理流水线的存储写入图表的数据可视化图。

重复项(仅限 Streaming Engine)

重复项图表显示已作为重复项过滤掉的特定阶段所处理的消息数量。Dataflow 支持许多保证 at least once 传送的来源和接收器。at least once 传送的缺点是可能会产生重复项。Dataflow 可保证 exactly once 传送,这意味着系统会自动过滤掉重复项。通过重新处理相同的元素来保存下游阶段,从而确保状态和输出不受影响。通过减少每个阶段产生的重复项数量,可以优化流水线以减少占用的资源数量并提升性能。

直观呈现数据,显示了流式处理流水线中的重复项图表。

计时器(仅限 Streaming Engine)

计时器信息中心显示特定流水线阶段中的待处理计时器数量以及已处理计时器数量。由于窗口依赖于计时器,因此这一指标可让您跟踪窗口的进度。

信息中心包括以下两个图表:

  • 各阶段的待处理计时器
  • 各阶段的处理中计时器

这些图表显示特定时间点的窗口待处理或处理速率。各阶段的待处理计时器图表显示由于瓶颈而延迟的窗口数量。各阶段的处理中计时器图表显示当前正在收集元素的窗口数量。

这些图表显示所有作业计时器,因此如果代码中的其他位置在使用计时器,这些计时器也会出现在这些图表中。

显示特定阶段中的待处理计时器数量的数据可视化图。

显示特定阶段中的已处理计时器数量的数据可视化图。

CPU 利用率

CPU 利用率是用 CPU 的使用量除以可用于处理的 CPU 数量得到的值。 该指标针对每个工作器计量,显示为百分比。 信息中心包括以下四个图表:

  • CPU 利用率(所有工作器)
  • CPU 利用率(统计数据)
  • CPU 利用率(前 4 名)
  • CPU 利用率(后 4 名)

以动画方式直观呈现数据,显示了一个 Dataflow 工作器的 CPU 利用率。

内存利用率

内存利用率是工作器使用的内存估算量,以每秒字节数为单位。信息中心包括以下两个图表:

  • 工作器内存利用率上限(估算的每秒字节数)
  • 内存利用率(估算的每秒字节数)

工作器内存利用率上限图表提供有关每个时间点在 Dataflow 作业中使用最多内存的工作器的信息。如果在作业执行期间的不同时间点,使用最多内存的工作器发生变化,则图表中的同一条线会显示多个工作器的数据,该条线中的每一个数据点均显示该时间点使用最多内存的工作器的数据。该图表会将工作器使用的估算内存量与内存限制进行比较(以字节为单位)。

您可以使用此图表来排查内存不足 (OOM) 问题。此图表未显示工作器内存不足崩溃问题。

内存利用率图表显示 Dataflow 作业中所有工作器使用的内存用量与内存限制进行比较的估算量(以字节为单位)。

输入和输出指标

如果您的流处理 Dataflow 作业使用 Pub/Sub 读取或写入记录,则系统会显示输入指标和输出指标。

同一类型的所有输入指标会组合在一起,所有输出指标也会组合在一起。例如,所有 Pub/Sub 指标都将分组到一个部分下。每个指标类型都将组织到单独的部分中。如需更改所显示的指标,请从左侧选择最能代表您要查找的指标的部分。下图显示了所有可用的部分。

此示例图片将 Dataflow 作业的输入部分和输出部分单独显示。

输入指标输出指标部分都将显示以下两个图表。

一系列图表,显示 Dataflow 作业的输入和输出指标。

每秒请求数

每秒请求数是指来源或接收器在一段时间内读取或写入数据的 API 请求速率。 如果此速率下降到零,或者相对于预期行为而言,在很长一段时间内大幅降低,则流水线可能无法执行某些操作。此外,也可能没有任何可读取的数据。在这种情况下,请检查具有较大系统水印的作业步骤。此外,您还应该检查工作器日志,看看是否存在错误或表明处理速度缓慢的迹象。

显示来源或接收器在一段时间内读取或写入数据的 API 请求数量的图表。

每秒响应错误数(按错误类型划分)

每秒响应错误数(按错误类型划分)是指来源或接收器在一段时间内读取或写入数据失败的 API 请求速率。如果此类错误频繁出现,则这些 API 请求可能会拖慢处理速度。您必须调查此类失败的 API 请求。为帮助排查这些问题,请查看常规 I/O 错误代码文档以及来源或接收器使用的任何具体错误代码文档,例如 Pub/Sub 错误代码

显示来源或接收器在一段时间内读取或写入数据失败的 API 请求速率的图表。

使用 Metrics Explorer

您可以在 Metrics Explorer 中查看以下 Dataflow I/O 指标:

如需查看 Dataflow 指标的完整列表,请参阅 Google Cloud 指标文档

Pub/Sub 指标即将发生变化(仅限 Streaming Engine)

Streaming Engine 目前使用同步拉取来使用 Pub/Sub 中的数据,但从 2022 年 2 月起,我们将迁移到流式拉取以提高性能。现有的每秒请求数每秒响应错误数图表和指标仅适用于同步拉取。我们将添加一个新的指标来指示流式拉取连接的运行状况以及会终止这些连接的所有错误。

此迁移不需要用户进行任何参与。在迁移期间,作业可能有时会使用同步拉取,而有时又会使用流式拉取。因此,同一作业有时可能会显示同步拉取指标,而有时又会显示流式拉取指标。迁移完成后,系统会从界面中移除同步拉取指标。

此迁移还会影响 Cloud Monitoring 中的 job/pubsub/read_countjob/pubsub/read_latencies 指标。当作业使用流式拉取时,这些计数器不会递增。

不使用 Streaming Engine 的流式传输作业不会迁移到 Streaming Pull,并且不会受此更改的影响。它们将继续显示同步拉取指标。

如需详细了解流式拉取迁移,请参阅使用 Pub/Sub 进行流式传输页面。

如果您对此更改有任何疑问,请与您的客户支持团队联系。

查看流水线

当您选择特定 Dataflow 作业时,监控界面会显示该作业中流水线的相关信息。此信息包括流水线在 Dataflow 服务上运行时的图形表示、作业摘要、作业日志以及流水线中每个步骤的相关信息。

Dataflow 监控界面可提供流水线的图形表示:即执行图。在流水线的执行图中,每个方框表示流水线中的一个转换。每个方框都包含转换名称和一些有关作业状态的信息,其中包括以下内容:

  • 正在运行:该步骤正在运行。
  • 已加入队列FlexRS 作业中的步骤已加入队列。
  • 成功:该步骤已成功完成。
  • 已停止:由于作业停止,该步骤已停止。
  • 未知:该步骤未能报告状态。
  • 失败:该步骤未能完成。

基本执行图

流水线代码:

Java


  // Read the lines of the input text.
  p.apply("ReadLines", TextIO.read().from(options.getInputFile()))
     // Count the words.
     .apply(new CountWords())
     // Write the formatted word counts to output.
     .apply("WriteCounts", TextIO.write().to(options.getOutput()));

Python


(
    pipeline
    # Read the lines of the input text.
    | 'ReadLines' >> beam.io.ReadFromText(args.input_file)
    # Count the words.
    | CountWords()
    # Write the formatted word counts to output.
    | 'WriteCounts' >> beam.io.WriteToText(args.output_path))

Go


  // Create the pipeline.
  p := beam.NewPipeline()
    s := p.Root()
  // Read the lines of the input text.
  lines := textio.Read(s, *input)
  // Count the words.
  counted := beam.ParDo(s, CountWords, lines)
  // Write the formatted word counts to output.
  textio.Write(s, *output, formatted)

注意:右侧图片中的某些名称与此 SDK 中的转换名称不匹配。

执行图:

Dataflow 监控界面中显示的 WordCount 流水线执行图。

图 2:显示的 WordCount 流水线的代码及 Dataflow 监控界面中生成的执行图。

复合转换

在执行图中,您可以展开复合转换(即包含多个嵌套子转换的转换)。 展开式复合转换在执行图中以箭头标示。点击此箭头即可展开相关转换并查看其中所含的子转换。

流水线代码:

Java


  // The CountWords Composite Transform
  // inside the WordCount pipeline.

  public static class CountWords
    extends PTransform<PCollection<String>, PCollection<String>> {

    @Override
    public PCollection<String> apply(PCollection<String> lines) {

      // Convert lines of text into individual words.
      PCollection<String> words = lines.apply(
        ParDo.of(new ExtractWordsFn()));

      // Count the number of times each word occurs.
      PCollection<KV<String, Long>> wordCounts =
        words.apply(Count.<String>perElement());

      return wordCounts;
    }
  }

注意:右侧图片中的 FormatCounts 与此 SDK 无关。

Python


# The CountWords Composite Transform inside the WordCount pipeline.
@beam.ptransform_fn
def CountWords(pcoll):
  return (
      pcoll
      # Convert lines of text into individual words.
      | 'ExtractWords' >> beam.ParDo(ExtractWordsFn())
      # Count the number of times each word occurs.
      | beam.combiners.Count.PerElement()
      # Format each word and count into a printable string.
      | 'FormatCounts' >> beam.ParDo(FormatCountsFn()))

Go


  // The CountWords Composite Transform inside the WordCount pipeline.
  func CountWords(s beam.Scope, lines beam.PCollection) beam.PCollection {
    s = s.Scope("CountWords")

    // Convert lines of text into individual words.
    col := beam.ParDo(s, &extractFn{SmallWordLength: *smallWordLength}, lines)

    // Count the number of times each word occurs.
    return stats.Count(s, col)
  }

注意:右侧图片中的 FormatCounts 与此 SDK 无关,右侧图片中的某些名称与此 SDK 中的转换名称不匹配。

执行图:

WordCount 流水线执行图,其中展开了 CountWords 转换以显示其组件转换。

图 3:显示的 CountWords 转换的各子步骤的流水线代码及展开的整个流水线执行图。

转换名称

Dataflow 可通过几种不同的方式来获取监控执行图中显示的转换名称:

Java

  • Dataflow 可以使用您在应用转换时分配的名称。您为 apply 方法提供的第一个参数将作为转换名称。
  • Dataflow 可以推断转换名称:根据类名称(如果您已构建自定义转换)或 DoFn 函数对象的名称(如果您使用的是 ParDo 等核心转换)进行推断。

Python

  • Dataflow 可以使用您在应用转换时分配的名称。您可以通过指定转换的 label 参数设置转换名称。
  • Dataflow 可以推断转换名称:根据类名称(如果您已构建自定义转换)或 DoFn 函数对象的名称(如果您使用的是 ParDo 等核心转换)进行推断。

Go

  • Dataflow 可以使用您在应用转换时分配的名称。您可以通过指定 Scope 来设置转换名称。
  • Dataflow 可以推断转换名称:根据结构体名称(如果您使用结构体 DoFn)或函数名称(如果您使用函数 DoFn)进行推断。

了解指标

实际用时

点击某个步骤时,实际用时指标会显示在步骤信息面板中。实际用时提供了在所有工作器的所有线程中完成以下操作所花费的大致总时长:

  • 初始化步骤
  • 处理数据
  • 重排数据
  • 结束步骤

对于复合步骤,实际用时会告知您在各个分步骤中所花费时间的总和。此估算值可帮助您确定执行缓慢的步骤,以及诊断流水线中的哪个部分超出了预期执行时间。

您可以查看某个步骤在流水线中运行所花费的时间。
图 4:实际用时指标可帮助您确保流水线高效运行。

侧边输入指标

侧边输入指标反映了侧边输入访问模式和算法对流水线性能的影响。如果您的流水线使用侧边输入,Dataflow 会将集合写入永久性层(如磁盘),而您的转换操作会从该永久性集合中读取内容。这些读取和写入操作会影响作业的运行时间。

如果您选择的转换会创建或使用侧边输入集合,Dataflow 监控界面便会显示侧边输入指标。您可以在步骤信息面板的侧边输入指标部分中查看相关指标。

创建侧边输入的转换

如果所选转换创建了侧边输入集合,侧边输入指标部分便会显示集合名称以及如下指标:

  • 写入操作用时:写入侧边输入集合所花的时间。
  • 写入的字节数:已写入侧边输入集合的总字节数。
  • 从侧边输入读取用时和字节数:一个包含更多指标的表,这些指标用于使用侧边输入集合的所有转换(称为“侧边输入使用者”)。

从侧边输入读取用时和字节数表包含各侧边输入使用者的以下信息:

  • 侧边输入使用者:侧边输入使用者的转换名称。
  • 读取操作用时:此使用者在读取侧边输入集合上所花的时间。
  • 读取的字节数:此使用者从侧边输入集合中读取的字节数。

如果您的流水线包含一个可创建侧边输入的复合转换,请展开此复合转换,直到您看到创建该侧边输入的特定子转换。然后,选择该子转换以查看侧边输入指标部分。

图 5 显示了创建侧边输入集合的转换的侧边输入指标。

您可以选择子转换,使其侧边输入指标显示在“步骤信息”侧边栏中。
图 5:此执行图包含一个展开式复合转换 (MakeMapView)。用于创建侧边输入的子转换 (CreateDataflowView) 处于选中状态,并且侧边输入指标显示在步骤侧边栏中。

使用一个或多个侧边输入的转换

如果选择的转换使用一个或多个侧边输入,侧边输入指标部分便会显示从侧边输入读取用时和字节数表。此表会显示每个侧边输入集合的以下信息:

  • 侧边输入集合:侧边输入集合的名称。
  • 读取操作用时:转换在读取此侧边输入集合上所花的时间。
  • 读取的字节数:转换从此侧边输入集合中读取的字节数。

如果您的流水线包含一个可读取侧边输入的复合转换,请展开此复合转换,直到您看到读取该侧边输入的特定子转换。然后,选择该子转换以查看侧边输入指标部分。

图 6 显示读取侧边输入集合的转换的侧边输入指标。

您可以选择转换,使其侧边输入指标显示在“步骤信息”侧边栏中。
图 6:JoinBothCollections 转换用于读取侧边输入集合。在此执行图中,JoinBothCollections 处于选中状态,并且侧边输入指标显示在步骤信息侧边栏中。

识别侧边输入性能问题

重复是常见的侧边输入性能问题。如果您的侧边输入 PCollection 过大,工作器将无法在内存中缓存整个集合。因此,工作器必须反复读取永久性侧边输入集合。

在图 7 中,侧边输入指标表明,从侧边输入集合读取的总字节数远远大于集合的实际大小(写入的总字节数)。

您可以选择转换,使其侧边输入指标显示在“步骤信息”侧边栏中。
图 7:有关重复的一个例子。侧边输入集合为 563 MB,而使用转换读取的总字节数几乎达到 12 GB。

如需提升此流水线的性能,请重新设计算法,以避免循环访问或重新获取侧边输入数据。在此示例中,流水线生成两个集合的笛卡尔积。算法遍历整个侧边输入集合以获取主集合的各元素。您可以通过将主集合的多个元素一起进行批处理来改善管道的访问模式。这项更改可减少工作器必须重新读取侧边输入集合的次数。

如果您的流水线通过应用带有一个或多个大型侧边输入的 ParDo 来执行联接操作,则可能会出现另一个常见的性能问题。在这种情况下,工作器会将大部分处理时间用于从侧边输入集合中读取联接操作。

图 8 显示了此问题的侧边输入指标示例:

您可以选择转换,使其侧边输入指标显示在“步骤信息”侧边栏中。
图 8:JoinBothCollections 转换的总处理时间为 18 分 31 秒。工作器将大部分处理时间(10 分 3 秒)用于读取 10 GB 的侧边输入集合。

要提升此流水线的性能,请使用 CoGroupByKey 代替侧边输入。

建议和诊断

Dataflow 提供了一些建议,用于提高作业性能、降低费用以及排查错误。本部分介绍如何查看和解释建议。请注意,某些建议可能与您的使用场景无关。

诊断

日志下的诊断标签页会收集并显示流水线中生成的某些日志条目。其中包括指示流水线可能存在问题的消息以及包含堆栈轨迹的错误消息。系统会对收集的日志条目进行重复信息删除,然后合并到错误组中。

具有“服务错误”错误组的 Dataflow 作业的“诊断”标签页。

错误报告包含以下信息:

  • 带有错误消息的错误列表。
  • 每个错误发生的次数。
  • 直方图,指示每个错误发生的时间。
  • 最近发生该错误的时间。
  • 错误首次发生的时间。
  • 错误的状态。

如需查看特定错误的错误报告,请点击错误列下的说明。随即将显示错误报告页面。如果错误是服务错误,则会显示包含文档(包括进一步步骤)的附加链接(“问题排查指南”)。

Dataflow 服务错误的错误组详情页面。

如需详细了解该页面,请参阅查看错误

忽略错误

如需忽略错误消息,请打开诊断标签页,点击要忽略的错误,然后打开解决状态菜单(标记为以下选项之一:待解决 | 已确认 | 已解决 | 已忽略),然后选择已忽略

建议

建议标签页显示 Dataflow 提供的与流水线相关的数据分析。这些数据分析的目标是识别有可能在费用和性能方面进行改善的情况。

包含示例建议的 Dataflow 作业的“建议”标签页。

更新日期列表示上次观察数据分析的时间。建议将存储 30 天,从更新日期算起。

以编程方式访问建议

如需以编程方式访问建议,请使用 Recommender API

忽略建议

您可以在 Recommendation Hub 中忽略项目的建议。

如需忽略建议,请点击控制台左上角的导航菜单,然后选择首页 > 建议。在 Dataflow 诊断卡片上,点击查看全部,选择要忽略的建议,然后点击忽略

后续步骤