【发布时间】:2019-07-26 13:15:51
【问题描述】:
我使用官方以代码为中心的图表在 Kubernetes 中部署了 Keycloak。现在我想将 Keycloak 日志制作成 json 格式,以便将它们导出到 Kibana。
【问题讨论】:
标签: json kubernetes jboss log4j keycloak
我使用官方以代码为中心的图表在 Kubernetes 中部署了 Keycloak。现在我想将 Keycloak 日志制作成 json 格式,以便将它们导出到 Kibana。
【问题讨论】:
标签: json kubernetes jboss log4j keycloak
对原始回复的评论指向执行此操作的 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)
【讨论】:
这是一个在 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 定义中的确切路径。如果您正确执行所有步骤,您应该能够根据需要自定义日志记录格式。
【讨论】: