首页 > 解决方案 > 在谷歌云 apache 梁 python sdk 中记录信息/调试消息

问题描述

我想在运行数据流程序时在屏幕上打印信息或调试或异常消息。在以“DirectRunner”身份运行流水线时,我能够做到这一点。但是同一个程序在使用运行程序“DataflowRunner”运行时不会在数据流控制台上打印任何内容。这是代码,它非常基本。

 import apache_beam as beam
 from apache_beam.io import ReadFromText
 from apache_beam.io import WriteToText
 from apache_beam.options.pipeline_options import PipelineOptions
 from apache_beam.options.pipeline_options import SetupOptions
 import logging

 class ProcessData(beam.DoFn):

   def process(self, element, var):
     logging.getLogger().setLevel(logging.INFO)
     logging.info("Print the element %s",element)
     logging.info("Print the var %s",var)

 logging.getLogger().setLevel(logging.INFO)
 #Initialize the pipeline
 pipeline_options = PipelineOptions()
 pipeline_options.view_as(SetupOptions).save_main_session = True
 p = beam.Pipeline(options=pipeline_options)

 p | 'Read the data file' >> beam.io.textio.ReadFromText('gs://rohan_staging/data/test.txt') | 'Process Data' >> beam.ParDo(ProcessData(),1)
 p.run()

我之前能够在控制台上看到这些消息,但突然间我不再看到它们了。我不知道我做错了什么,或者我以前做错了什么。请建议我如何在云数据流控制台上查看信息消息。

标签: pythongoogle-cloud-platformgoogle-cloud-dataflowapache-beam

解决方案


我在您共享的代码段中看不到任何问题,实际上它符合文档中提供的在 Dataflow 中记录管道消息的所有步骤。因此,我使用您的代码运行了一个示例管道,并且能够验证所有内容都已成功记录(请参阅Print the element...屏幕截图 2 和 3 中的日志):

  • 作业日志: 在此处输入图像描述

  • 过程数据步骤中的日志: 在此处输入图像描述

  • Stackdriver Logging 中的日志: 在此处输入图像描述


正如我之前链接的日志记录文档中所解释的,步骤日志作业日志选项卡仅分别显示步骤或作业的最新和相关日志,因此您应该转到管道的 Stackdriver 日志以获得完整的查看您的日志(您可以稍后根据您的偏好进行过滤)。

鉴于您说您能够更早地看到日志但现在看不到,可能会发生几件事:

  1. 您之前正在检查步骤日志(显示您添加的日志),现在您正在查看作业日志(不显示它们)。
  2. 日志已从步骤日志选项卡中消失,该选项卡仅显示最近的日志。
  3. 您的日志已从 Stackdriver 过期(根据保留限制)。

推荐阅读