我应该使用哪个记录器来获取Cloud Logging中的数据

Gil*_*obs 4 apache-spark pyspark google-cloud-logging google-cloud-dataproc

我正在使用Cloud Dataproc运行PySpark作业,并希望使用loggingPython模块记录信息.目标是将这些日志推送到Cloud Logging.

这个问题,我了解到我可以通过向流畅的配置添加日志文件来实现这一点,该配置位于/etc/google-fluentd/google-fluentd.conf.

但是,当我查看日志文件时/var/log,我找不到包含我的日志的文件.我已经尝试使用默认的python记录器和'py4j'记录器.

logger = logging.getLogger()
logger = logging.getLogger('py4j')
Run Code Online (Sandbox Code Playgroud)

任何人都可以了解我应该使用哪个记录器,以及应该将哪个文件添加到流畅的配置中?

谢谢

小智 5

TL;博士

现在不支持本机,但将在Cloud Dataproc的未来版本中本机支持.也就是说,在此期间有一个手动解决方法.

解决方法

首先,确保将python日志从spark上下文发送到正确的log4j记录器.为此,请将您的记录器声明为:

import pyspark
sc = pyspark.SparkContext()
logger = sc._jvm.org.apache.log4j.Logger.getLogger(__name__)
Run Code Online (Sandbox Code Playgroud)

第二部分涉及一种原生支持的解决方法.如果你看下面的spark属性文件

/etc/spark/conf/log4j.properties
Run Code Online (Sandbox Code Playgroud)

在群集的主服务器上,您可以看到如何为spark配置log4j.目前它看起来如下:

# Set everything to be logged to the console
log4j.rootCategory=INFO, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c: %m%n

# Settings to quiet third party logs that are too verbose
...
Run Code Online (Sandbox Code Playgroud)

请注意,这意味着log4j日志仅发送到控制台.dataproc代理将获取此输出并将其作为作业驱动程序输出返回.但是,为了能够流畅地获取输出并将其发送到Google Cloud Logging,您需要使用log4j写入本地文件.因此,您需要修改log4j属性,如下所示:

# Set everything to be logged to the console and a file
log4j.rootCategory=INFO, console, file
# Set up console appender.
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c: %m%n

# Set up file appender.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/var/log/spark/spark-log4j.log
log4j.appender.file.MaxFileSize=512KB
log4j.appender.file.MaxBackupIndex=3
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c: %m%n

# Settings to quiet third party logs that are too verbose
...
Run Code Online (Sandbox Code Playgroud)

如果您将文件设置为/var/log/spark/spark-log4j.log,如上所示,Dataproc群集上的默认流畅配置应该将其拾取.如果您想将文件设置为其他内容,可以按照此问题中的说明轻松获取该文件.