在google cloud apache beam python sdk中记录信息/调试消息

在google cloud apache beam python sdk中记录信息/调试消息,python,google-cloud-platform,google-cloud-dataflow,apache-beam,Python,Google Cloud Platform,Google Cloud Dataflow,Apache Beam,我想在运行数据流程序时在屏幕上打印信息、调试或异常消息。当以“DirectRunner”的形式运行管道时,我能够做到这一点。但是,当使用运行程序“DataflowRunner”运行时,相同的程序不会在dataflow控制台上打印任何内容。这是代码,它非常基本 import apache_beam as beam from apache_beam.io import ReadFromText from apache_beam.io import WriteToText from apach

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

 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()

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

我认为您共享的代码片段没有问题,事实上它符合文档中提供的所有步骤。因此,我使用您的代码运行了一个示例管道,并能够验证所有内容都已成功记录(请参阅屏幕截图2和3中的日志
打印元素…
):

  • 作业日志:

  • 过程数据步骤中记录:

  • Stackdriver日志记录中的日志:


正如我前面链接的日志文档中所解释的,步骤日志和作业日志选项卡仅分别显示步骤或作业的最新日志和相关日志,因此您应该转到管道的Stackdriver日志,以获得日志的完整视图(稍后可以根据您的首选项进行筛选)

考虑到您之前说过可以看到日志,但现在已经看不到了,有几件事可能会发生:

  • 您之前检查了步骤日志(添加的日志显示在其中),现在查看的是作业日志(不显示它们)
  • 日志已从步骤日志选项卡中消失,该选项卡仅显示最近的日志
  • 您的日志已从Stackdriver过期(根据)

  • 以防其他人偶然发现这一点。我仍然看到这个问题,但我看到了时间的变化。也就是说,当天早些时候,我在stackdriver弹出窗口中获取了日志,当天晚些时候,它停止工作


    一般来说,python beam runner的维护似乎不是很好。

    对我来说,步骤日志不会出现在数据流控制台中。我需要进入Stackdriver并使用高级过滤器:

    resource.type="dataflow_step"
    resource.labels.job_name="my job name"
    resource.labels.step_id:"my step name"
    

    通过这种方式,我可以查看作业步骤中使用python logger记录的日志消息。

    感谢您检查并发送所有详细信息。我使用以下命令运行代码:python test_print.py--runner'DataflowRunner'--project'syw analytics repo dev'--staging_location'gs://rohan_staging/staging'--temp_location'gs://rohan_staging/temp'--job_name testprint,但我仍然没有看到步骤记录。我无法附加屏幕截图,但步骤日志没有任何内容,stackdriver也没有。是因为我使用的是2.4.0版吗?我可以升级到最新版本并进行尝试。我还尝试使用参数--output'gs://rohan_staging/data/logs.txt'将日志语句保存在此文件中,但此文件甚至没有创建。关于
    --output
    标志,我想您可能会对包含它这一事实感到困惑,但默认情况下它不起作用,另一方面,我发现非常奇怪的是,在我的案例中,完全相同的代码打印日志,但在你的案例中却没有。在这里您可以找到有关的更多信息,但我猜您没有覆盖默认配置,是吗?此外,您是否可以尝试使用DirectRunner运行代码,如python pipe.py--runner DirectRunner?日志是否使用它显示?在我的例子中,它们确实会以信息级别出现。是的,如果我使用--runner DirectRunner运行,则会显示日志。我认为当我使用dataflow运行时,日志不会出现,因为可能在dataflow的项目级别禁用了stackdriver日志记录。我将与项目负责人核实。这不是答案,作为对原始问题的评论会更有帮助。