kubernetes上的keydape和使用log4j2记录json布局格式

kubernetes上的keydape和使用log4j2记录json布局格式,json,kubernetes,jboss,log4j,keycloak,Json,Kubernetes,Jboss,Log4j,Keycloak,我使用官方的codecentric图表在Kubernetes部署了Keyclope。现在我想将keydape日志转换成json格式,以便将它们导出到Kibana。这是一个运行在Wildfly上的Java应用程序。如果您检查pod内运行的主进程,您将看到如下内容: /usr/lib/jvm/java/bin/java -D[Standalone] -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Dj

我使用官方的codecentric图表在Kubernetes部署了Keyclope。现在我想将keydape日志转换成json格式,以便将它们导出到Kibana。

这是一个运行在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
...
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
...
因此,日志配置作为一个JVM选项传递给Java进程,并从路径/opt/jboss/keydape/standalone/configuration/logging.properties上的文件中读取

如果检查该文件的内容,则该文件有如下部分:

-Dlogging.configuration=file:/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/部署中的卷,并将其作为文件装载到pod/部署定义中的确切路径。如果您正确执行了所有步骤,您应该能够根据需要自定义日志记录格式。

这是一个在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
...
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
...
因此,日志配置作为一个JVM选项传递给Java进程,并从路径/opt/jboss/keydape/standalone/configuration/logging.properties上的文件中读取

如果检查该文件的内容,则该文件有如下部分:

-Dlogging.configuration=file:/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/部署中的卷,并将其作为文件装载到pod/部署定义中的确切路径。如果正确执行所有步骤,您应该能够根据需要自定义日志记录格式。

原始回复的注释指向执行此操作的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)

对原始回复的注释指向执行此操作的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)

谢谢你的帮助。事实上,logging.properties文件是在每次服务器启动后从xml配置生成的。因此,一旦Jboss启动,带有json格式化程序的文件的内容就不正确了。这个答案是不正确的。WildFly文档非常明确,没有手动更改logging.properties。我怀疑下面的回复提供了一个更好的解决方案@andrediremanda you's right。最后,有一个jbosscli命令可以执行此操作。它将在服务器启动时自动执行,我们可以通过它扔钥匙斗篷头盔。谢谢您的帮助。事实上,logging.properties文件是在每次服务器启动后从xml配置生成的。因此,一旦Jboss启动,带有json格式化程序的文件的内容就不正确了。这个答案是不正确的。WildFly文档非常明确,没有手动更改logging.properties。我怀疑下面的回复提供了一个更好的解决方案@andrediremanda you's right。最后,有一个jbosscli命令可以执行此操作。它将在服务器启动时自动执行,我们可以通过它抛出KeyClope头盔图表