【问题标题】:Structured Logging with Apache Spark on Google Kubernetes Engine在 Google Kubernetes Engine 上使用 Apache Spark 进行结构化日志记录
【发布时间】:2023-03-16 23:20:01
【问题描述】:

我在 Google Kubernetes Engine 集群上运行 Apache Spark 应用程序,它将 STDOUT 和 STDERR 的任何输出传播到 Cloud Logging。但是,不会传播粒度日志严重性级别。所有消息在 Cloud Logging 中都只有 INFO 或 ERROR 严重性(取决于它是写入 stdout 还是 stderr),并且实际严重性级别隐藏在文本属性中。

我的目标是格式化 Structured Logging JSON format 中的消息,以便将严重性级别传播到 Cloud Logging。不幸的是,Apache Spark 仍然使用已弃用的 log4j 1.x 库进行日志记录,我想知道如何格式化日志消息,以便 Cloud Logging 可以正确提取它们。

到目前为止,我使用的是以下默认 log4j.properties 文件:

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{1}: %m%n

【问题讨论】:

    标签: apache-spark log4j google-kubernetes-engine stackdriver google-cloud-logging


    【解决方案1】:

    在 GKE 集群中启用 Cloud Logging 时,日志记录由 GKE 管理,因此无法像在 GCE 实例中那样轻松更改日志格式。

    要在 GKE 中推送 JSON 格式的日志,您可以尝试以下选项:

    1. 使您的软件以 JSON 格式推送日志,以便 Cloud Logging 检测 JSON 格式的日志条目并以此格式推送它们。

    2. 按照here 中的建议管理您自己的 fluentd 版本并设置您自己的parser,但解决方案将由您管理,不再由 GKE。

    3. 添加一个 sidecar 容器,用于读取您的日志并将其转换为 JSON,然后将 JSON 转储到标准输出。 GKE 中的日志代理会将 Sidecar 的日志提取为 JSON

    请记住,在使用选项三时,有一些注意事项可能会导致大量资源消耗,并且您将无法按照 here 的说明使用 kubectl 日志。

    【讨论】:

      猜你喜欢
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      • 2018-08-23
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      相关资源
      最近更新 更多