我应该使用哪个记录器在 Cloud Logging 中获取数据
Posted
技术标签:
【中文标题】我应该使用哪个记录器在 Cloud Logging 中获取数据【英文标题】:Which logger should I use to get my data in Cloud Logging 【发布时间】:2016-03-21 02:20:33 【问题描述】:我正在使用 Cloud Dataproc 运行 PySpark 作业,并希望使用 Python 的 logging
模块记录信息。目标是将这些日志推送到 Cloud Logging。
从this question,我了解到我可以通过将日志文件添加到位于/etc/google-fluentd/google-fluentd.conf
的fluentd 配置中来实现。
但是,当我查看 /var/log
中的日志文件时,我找不到包含我的日志的文件。我尝试使用默认的 python 记录器和 'py4j' 记录器。
logger = logging.getLogger()
logger = logging.getLogger('py4j')
谁能说明我应该使用哪个记录器,以及应该将哪个文件添加到 fluentd 配置中?
谢谢
【问题讨论】:
【参考方案1】: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
在集群的主节点上,您可以看到 log4j 是如何为 spark 配置的。目前看起来如下:
# 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=%dyy/MM/dd HH:mm:ss %p %c: %m%n
# Settings to quiet third party logs that are too verbose
...
请注意,这意味着 log4j 日志仅发送到控制台。 dataproc 代理将获取此输出并将其作为job driver ouput 返回。但是,为了让 fluentd 获取输出并将其发送到 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=%dyy/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=%dyy/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 集群上的默认 fluentd 配置应该会选择它。如果您想将文件设置为其他内容,您可以按照this question 中的说明进行操作,以熟练掌握该文件。
【讨论】:
将文件附加程序设置添加到配置文件,随后重置我的 DataProc 集群并运行作业后,我在 Cloud Logging 中找不到我的日志。但是,我注意到spark-log4j.log
文件不在/var/log/spark/
目录中。我是否需要执行任何其他步骤才能使 log4j 登录到该文件。此外,我看不到这种方法将如何在执行程序节点上工作,因为它们无法访问 spark 上下文以连接到 JVM。以上是关于我应该使用哪个记录器在 Cloud Logging 中获取数据的主要内容,如果未能解决你的问题,请参考以下文章
Google Stackdriver Logging无法在Google Cloud Shell和GKE中使用
Google Cloud Logging 包含/排除过滤器的文档在哪里?
BigQuery - 如何在 Cloud Logging 中查看失败的预定查询?