对 Dataflow 流水线使用 Cloud Monitoring

Cloud Monitoring 提供了强大的日志记录和诊断功能。通过 Dataflow 与 Monitoring 的集成,您可以从 Monitoring 信息中心访问各种 Dataflow 作业指标,例如作业状态、元素计数、系统延隔时间(适用于流式传输作业)和用户计数器。您还可以使用 Monitoring 提醒功能来接收各种条件的通知,例如,流式传输系统延隔时间过长或作业失败。

准备工作

按照 Java 快速入门Python 快速入门Go 快速入门设置 Dataflow 项目。然后,构建并运行流水线

如需在 Metrics Explorer 中查看日志,工作器服务账号必须具有 roles/monitoring.metricWriter 角色。

自定义指标

对于您在 Apache Beam 流水线中定义的任何指标,Dataflow 都会将其作为自定义指标报告给 Monitoring。Apache Beam 具有三种流水线指标CounterDistributionGauge

  • Dataflow 向 Monitoring 报告 CounterDistribution 指标。
  • Distribution 以四个子指标的形式报告,后缀分别为 _MAX_MIN_MEAN_COUNT
  • Dataflow 不支持根据 Distribution 指标创建直方图。
  • Dataflow 大约每 30 秒向 Monitoring 报告一次增量更新。
  • 为避免冲突,所有 Dataflow 自定义指标都导出为 double 数据类型。
  • 为简单起见,所有 Dataflow 自定义指标都导出为 GAUGE 指标种类。您可以监控 GAUGE 指标在一段时间内的增量,如以下 Monitoring Query Language 示例所示:

     fetch dataflow_job
     | metric 'dataflow.googleapis.com/job/user_counter'
     | filter (metric.job_id == '[JobID]')
     | delta 1m
     | group_by 1m, [value_user_counter_mean: mean(value.user_counter)]
     | every 1m
     | group_by [metric.ptransform, metric.metric_name],
       [value_user_counter_mean_aggregate: aggregate(value_user_counter_mean)]
    
  • Dataflow 自定义指标在 Monitoring 中显示为标签为 metric_name: metric-nameptransform: ptransform-namedataflow.googleapis.com/job/user_counter

  • 为了向后兼容,Dataflow 还会将自定义指标作为 custom.googleapis.com/dataflow/metric-name 报告给 Monitoring。

  • Dataflow 自定义指标受到 Monitoring 中基数的限制。

  • 每个项目最多只能有 100 个 Dataflow 自定义指标。这些指标发布为 custom.googleapis.com/dataflow/metric-name

报告给 Monitoring 的自定义指标会按照 Cloud Monitoring 价格计费。

使用 Metrics Explorer

使用 Monitoring 探索 Dataflow 指标。 请按照本部分中的步骤操作,并观察为您的每个 Apache Beam 流水线提供的标准指标。如需详细了解如何使用 Metrics Explorer,请参阅使用 Metrics Explorer 创建图表

  1. 在 Google Cloud 控制台中,选择 Monitoring

    进入 Monitoring

  2. 在导航窗格中,选择 Metrics Explorer

  3. 选择指标窗格中,在过滤条件中输入 Dataflow Job

  4. 从显示的列表中,选择要观察的某个作业的指标。

    • 作业状态:每 30 秒(以及发生更新时)以 enum 形式提供一次作业状态(失败、成功)。注意:enum 值不能绘制成图表,也不能用于提醒,但您可以使用 Cloud Monitoring 网页界面检索此值。要实现提醒功能,请使用“失败”指标,作业失败时该指标设置为 1。
    • 失败:如果作业因失败而退出,则“失败”指标设置为 1。 使用此指标可根据失败流水线的数量发出相应提醒并绘制图表。
    • Elapsed time:作业所用时间(以秒为单位),此指标每 30 秒报告一次。
    • 系统延隔时间:整个流水线的最长延迟(以秒为单位报告)。
    • 当前 vCPU 计数:作业当前使用的虚拟 CPU 数量,该指标随值的变化而更新。
    • vCPU 总使用量:作业使用的虚拟 CPU 总数,该指标随值的变化而更新。
    • 永久性磁盘总使用量:作业所用永久性磁盘的累计总量(以 GB 秒为单位),该指标随值的变化而更新。注意:有两种不同类型的永久性磁盘(即 SSD 和 HDD)。二者均使用相同指标名称进行报告,并使用指标标签进行区分。
    • 总内存用量:为作业分配的内存累计总量(以 GB 秒为单位),随值的变化而更新。
    • 元素计数:每个 PCollection 的元素数量。注意:此指标针对于单个 PCollection,而不是作业级,因此还不能用于提醒。
    • 预估字节计数:每个 PCollection 处理的字节数。 注意:此指标针对于单个 PCollection,而不是作业级,因此还不能用于提醒。

运行 Dataflow 作业时,您可能还需要监控来源和接收器的指标。例如,您可能希望监控 BigQuery Storage API 指标。如需了解详情,请参阅创建信息中心、图表和提醒,以及来自 BigQuery Data Transfer Service 的指标的完整列表。

创建提醒政策和信息中心

利用 Monitoring,您可以访问与 Dataflow 相关的指标。创建信息中心以绘制指标的时间序列,并创建提醒政策以便在指标达到指定值时通知您。

创建资源组

为了更轻松地设置提醒和构建信息中心,请创建包含多个 Apache Beam 流水线的资源组。

  1. 在 Google Cloud 控制台中,选择 Monitoring

    进入 Monitoring

  2. 在导航窗格中,选择群组

  3. 点击创建群组

  4. 输入群组名称。

  5. 添加过滤条件以定义此群组包含的 Dataflow 资源。 例如,您可以使用流水线的名称前缀作为其中一个过滤条件。 创建群组。

  6. 创建群组后,您就可以看到与该群组中资源相关的基本指标。

为 Dataflow 指标创建提醒政策

通过 Monitoring,您可以创建提醒并在指标超过指定阈值时收到通知。例如,当流处理流水线的系统延隔时间增加到预定义值以上时,您可以收到通知。

  1. 在 Google Cloud 控制台中,选择 Monitoring

    进入 Monitoring

  2. 在导航窗格中,选择提醒

  3. 点击创建政策

  4. 新建提醒政策页面上,定义提醒发出条件和通知渠道。
    例如,要为 WindowedWordCount Apache Beam 流水线群组的系统延隔时间设置提醒,请执行以下步骤:

    1. 点击选择指标
    2. 选择指标字段中,输入 Dataflow Job
    3. 对于指标类别,请选择作业
    4. 对于指标,选择系统延隔时间

    每次触发提醒时,都会创建一个突发事件和相应的事件。如果您在提醒中指定了通知机制(例如电子邮件或短信),您将会收到通知。

构建自定义监控信息中心

您可以使用与 Dataflow 最为相关的图表构建 Monitoring 信息中心。 如需将图表添加到信息中心,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,选择 Monitoring

    进入 Monitoring

  2. 在导航窗格中,选择信息中心

  3. 点击创建信息中心

  4. 点击添加微件

  5. 添加微件窗口中,对于数据,选择指标

  6. 选择指标窗格中,对于指标,输入 Dataflow Job

  7. 选择指标类别和指标。

您可以根据需要向信息中心添加任意数量的图表。

从 Monitoring 代理接收工作器虚拟机指标

您可以使用 Monitoring 来监控永久性磁盘、CPU、网络和进程指标。运行流水线时,请从 Dataflow 工作器虚拟机实例启用 Monitoring 代理。请参阅可用的 Monitoring 代理指标列表。

要启用 Monitoring 代理,请在运行流水线时使用 --experiments=enable_stackdriver_agent_metrics 选项。工作器服务账号必须具有 roles/monitoring.metricWriter 角色。

要在不停止流水线的情况下停用 Monitoring 代理,请启动替换作业并且不指定 --experiments=enable_stackdriver_agent_metrics 参数,以更新流水线。

存储和保留

已完成或已取消的 Dataflow 作业的相关信息会存储 30 天。

操作日志存储在 _Default 日志存储桶中。 Logging API 服务名称为 dataflow.googleapis.com。如需详细了解 Cloud Logging 中使用的 Google Cloud 受监控的资源类型和服务,请参阅受监控的资源和服务

如需详细了解 Logging 将保留日志条目多长时间,请参阅“配额和限制:日志保留期限”中的保留期限信息。

如需了解如何查看操作日志,请参阅监控和查看流水线日志

后续步骤

如需了解详情,请考虑探索以下资源: