【问题标题】:Keycloak on kubernetes and logging json layout format with log4j2Kubernetes 上的 Keycloak 和使用 log4j2 记录 json 布局格式
【发布时间】:2019-07-26 13:15:51
【问题描述】:

我使用官方以代码为中心的图表在 Kubernetes 中部署了 Keycloak。现在我想将 Keycloak 日志制作成 json 格式,以便将它们导出到 Kibana。

【问题讨论】:

    标签: json kubernetes jboss log4j keycloak


    【解决方案1】:

    对原始回复的评论指向执行此操作的 cli 命令。

      cli:
    # Custom CLI script
    custom: |
      /subsystem=logging/json-formatter=json:add(exception-output-type=formatted, pretty-print=false, meta-data={label=value})
      /subsystem=logging/console-handler=CONSOLE:write-attribute(name=named-formatter, value=json)
    

    【讨论】:

      【解决方案2】:

      这是一个在 Wildfly 上运行的 Java 应用程序。如果您检查 pod 内正在运行的主进程,您将看到如下内容:

      /usr/lib/jvm/java/bin/java -D[Standalone] -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Dorg.jboss.boot.log.file=/opt/jboss/keycloak/standalone/log/server.log -Dlogging.configuration=file:/opt/jboss/keycloak/standalone/configuration/logging.properties -jar /opt/jboss/keycloak/jboss-modules.jar -mp /opt/jboss/keycloak/modules org.jboss.as.standalone -Djboss.home.dir=/opt/jboss/keycloak -Djboss.server.base.dir=/opt/jboss/keycloak/standalone -Djboss.bind.address=10.217.0.231 -Djboss.bind.address.private=10.217.0.231 -b 0.0.0.0 -c standalone.xml
      

      这里的重要部分如下:

      -Dlogging.configuration=file:/opt/jboss/keycloak/standalone/configuration/logging.properties
      

      因此,日志记录配置作为 JVM 选项传递给 Java 进程,并从路径 /opt/jboss/keycloak/standalone/configuration/logging.properties 上的文件中读取。

      如果您检查文件的内容,它有如下部分:

      ...
      handler.CONSOLE=org.jboss.logmanager.handlers.ConsoleHandler
      handler.CONSOLE.level=INFO
      handler.CONSOLE.formatter=COLOR-PATTERN
      handler.CONSOLE.properties=autoFlush,target,enabled
      handler.CONSOLE.autoFlush=true
      handler.CONSOLE.target=SYSTEM_OUT
      handler.CONSOLE.enabled=true
      ...
      

      您需要在此日志记录配置中确定要更改的内容,以满足您的 JSON 要求。一个例子是:

      formatter.json=org.jboss.logmanager.formatters.JsonFormatter
      formatter.json.properties=keyOverrides,exceptionOutputType,metaData,prettyPrint,printDetails,recordDelimiter
      formatter.json.constructorProperties=keyOverrides
      formatter.json.keyOverrides=timestamp\=@timestamp
      formatter.json.exceptionOutputType=FORMATTED
      formatter.json.metaData=@version\=1
      formatter.json.prettyPrint=false
      formatter.json.printDetails=false
      formatter.json.recordDelimiter=\n
      

      然后,在 Kubernetes 中,您可以使用所需的日志记录配置创建 ConfigMap,将其定义为 pod/deployment 中的卷,并将其作为文件挂载到 pod/deployment 定义中的确切路径。如果您正确执行所有步骤,您应该能够根据需要自定义日志记录格式。

      【讨论】:

      • 感谢您的帮助。实际上 logging.properties 文件是在每次服务器启动后从 xml 配置生成的。所以一旦 Jboss 启动,带有 json formatter 的文件内容就被粉碎了
      • 这个答案不正确。 WildFly 文档非常明确地指出不要手动更改 logging.properties docs.jboss.org/author/display/WFLY10/…
      • 我怀疑以下回复提供了更好的解决方案stackoverflow.com/a/54522501/888876
      • @AndredeMiranda 你是对的。最后,有一个 jboss cli 命令可以做到这一点。它将在服务器启动时自动执行,我们可以通过它抛出 keycloak helm chart
      猜你喜欢
      • 2021-02-16
      • 2022-11-25
      • 2018-07-18
      • 2018-08-23
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多