Google 云数据流中的 Beam 应用程序日志

Logs for Beam application in Google cloud dataflow

我有一个 Beam 应用程序,它 运行 通过 direct运行ner 在本地成功运行,并在我的本地控制台上为我提供了代码中的所有日志信息。但是当我在 google 云数据流环境中尝试 运行ning 时,我只能在本地控制台上看到这些日志信息,但它们不会显示在 Google 云数据流控制台上工作,既不在他们的 StackDriver 日志记录页面中。

这是我从本地控制台对 运行 我的数据流代码 运行ner 所做的:

mvn compile exec:java -Dexec.mainClass= ... \
                      -Dexec.args=... "   \ 
                      -Pdataflow-runner

并且所有日志都会返回到此本地控制台。但是,当我在浏览器上转到 Google 云控制台并搜索我的数据流作业的日志时,我在代码 LOGGER.info(msg) 的任何地方都看不到这些日志。我只看到与数据流管道相关的日志。

所以我想知道我的 Beam 应用程序 运行 是否以这样一种方式分开,即主要 class 不在管道内的部分在本地 运行 而只是管道的一部分代码将被发送到 google 云端执行。因此,那些不在管道代码中的日志信息将不会在 Google Cloud Dataflow 日志中提供。

你是对的,主程序不在 Google Cloud 上 运行 - 它只构建管道并将其提交给 Dataflow 服务。

您可以通过在调试器中单步执行主程序来轻松确认这一点:它是一个常规 Java 程序,只是执行过程中发生的事情之一是 pipeline.run()在你的程序中调用,它在引擎盖下将到目前为止的管道步骤打包成一个 HTTP 请求到 Dataflow 服务说 "here's a specification of a pipeline, please run this"。如果此调用没有发生,或者网络出现故障,Dataflow 甚至永远不会知道您的程序存在。

Dataflow 只是 - 一种响应 HTTP 请求的服务 - 它与 运行 Java 程序没有不同的方式,因此它无法了解程序中的任何内容您的程序没有明确发送给它;例如,它无法了解您的日志语句。

此外,如果您使用templates,那么您的主程序的执行与管道的执行完全分离:主程序提交管道模板并完成,您可以请求运行 稍后使用不同参数的模板,可能多次或根本没有。

对于在 2020 年寻找此答案的任何人:DataFlow 工作日志(DoFn 等内部的内容)已移至“日志资源管理器”,StackDriver 似乎已消失或已重命名。

转到 Google 云控制台。

日志记录 > 日志资源管理器

日志字段:数据流步骤

日志名称:dataflow.googleapis.com/worker