big*_*ano 5 logging google-cloud-dataflow apache-beam
我有一个Beam应用程序,可以使用directrunner在本地成功运行,并向我提供本地控制台中代码中包含的所有日志信息。但是,当我尝试在google cloud数据流环境中运行它时,我只在本地控制台上看到了这些日志信息,但是它们并没有显示在Google Cloud Console上的数据流作业中,也没有在其StackDriver日志记录页面中显示。
这是我从本地控制台为数据流运行程序运行代码的操作:
mvn compile exec:java -Dexec.mainClass= ... \
-Dexec.args=... " \
-Pdataflow-runner
Run Code Online (Sandbox Code Playgroud)
并且所有日志都将在此本地控制台上返回。但是,当我在浏览器上转到Google Cloud Console并搜索我的数据流作业日志时,在LOGGER.info(msg)任何地方的代码中都看不到这些日志。我只看到与数据流管道相关的日志。
因此,我想知道我的Beam应用程序是否以这样的方式单独运行,即不在管道内部的主类的一部分在本地运行,并且仅管道代码的一部分会发送到google cloud以便在那里执行。因此,不在管道代码中的那些日志信息将不会在Google Cloud Dataflow日志中提供。
你是对的,主程序不在 Google Cloud 上运行 - 它只是构建管道并将其提交到 Dataflow 服务。
您可以通过在调试器中单步调试主程序来轻松确认这一点:它是一个常规的 Java 程序,执行过程中发生的事情之一就是pipeline.run()程序中的调用,它在幕后打包了以下步骤:到目前为止,我们已经将管道插入到对数据流服务的 HTTP 请求中,并表示“这是管道的规范,请运行它”。如果此调用没有发生,或者网络出现故障,Dataflow 甚至永远不会知道您的程序存在。
数据流就是这样 - 一种响应 HTTP 请求的服务 - 它不是运行 Java 程序的不同方式,因此它无法了解程序中未明确发送给它的任何内容;例如,它无法了解您的日志语句。
此外,如果您使用templates,那么主程序的执行与管道的执行完全解耦:主程序提交管道模板并完成,您可以稍后请求使用不同的参数运行模板,可能多次或一点也不。
| 归档时间: |
|
| 查看次数: |
886 次 |
| 最近记录: |