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

时间:2015-12-15 10:29:38

标签: apache-spark pyspark google-cloud-dataproc google-cloud-logging

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

this question开始,我了解到我可以通过向流畅的配置添加日志文件来实现这一目标,该配置位于/etc/google-fluentd/google-fluentd.conf

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

logger = logging.getLogger()
logger = logging.getLogger('py4j')

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

由于

1 个答案:

答案 0 :(得分:5)

TL;博士

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

解决方法

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

import pyspark
sc = pyspark.SparkContext()
logger = sc._jvm.org.apache.log4j.Logger.getLogger(__name__)

第二部分涉及一种尚未得到本机支持的解决方法。如果你看一下

下的spark属性文件
/etc/spark/conf/log4j.properties

在群集的主服务器上,您可以看到如何为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
...

请注意,这意味着log4j日志仅发送到控制台。 dataproc代理将获取此输出并将其作为job driver ouput返回。但是,为了能够流畅地获取输出并将其发送到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
...

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