我们正在使用zeebe分布式工作流引擎,该引擎使用log4j作为其日志框架。它是一个通过 helm 在 kubernetes 上部署的 Spring Boot 应用程序。不幸的是,它不包括启用 json 日志记录的
log4j-layout-template-json
jar。由于该项目正在积极开发中,因此任何需要修改第三方应用程序代码的方法看起来都不合适。我们需要不断升级第三方应用程序,因此分叉它会使部署变得更加困难。
有哪些可能的方法可以将其配置为 json 日志记录,以便将日志发送到 EFK 堆栈?
谢谢
一般解决方案很简单:您需要将
log4j-layout-template-json
添加到应用程序的类路径中,并使用附加库创建 Docker 映像。
问题在于细节:每个发行版都有不同的方法将库添加到类路径。
Camunda Zeebe 似乎正在使用 Appassembler 创建其二进制发行版,该发行版使用 this script 来启动应用程序。所以你有两个选择:
/usr/local/zeebe/lib
,并将 Log4j Core 配置文件添加到 /usr/local/zeebe/config
,CLASSPATH_PREFIX
环境变量。例如,您可以使用如下 Docker 文件将其他 Log4j Core 模块和自定义配置文件添加到
/usr/local/log4j2
目录:
FROM camunda/zeebe:latest
# Download additional Logj4 2.x artifacts
RUN apt -y update && apt -y install curl
RUN curl -SL https://dist.apache.org/repos/dist/release/logging/log4j/2.20.0/apache-log4j-2.20.0-bin.tar.gz | \
tar -xz --strip-components=1 --one-top-level=/usr/local/log4j2 \
apache-log4j-2.20.0-bin/log4j-appserver-2.20.0.jar \
apache-log4j-2.20.0-bin/log4j-jul-2.20.0.jar \
apache-log4j-2.20.0-bin/log4j-layout-template-json-2.20.0.jar
# Add a custom configuration file
COPY log4j2.xml /usr/local/log4j2/
# Check artifacts
ARG LOG4J_APPSERVER_SUM=53d8e78277324145cde435b515b1c7f1ba02b93e7a1974411ce7c5511a8c6b69
ARG LOG4J_JUL_SUM=c9b33dffb40bd00d4889ea4700f79d87a2e4d9f92911a3a008ae18c0bb3fb167
ARG LOG4J_LAYOUT_TEMPLATE_JSON_SUM=62d2c2b8e80a74ca65d80cf2f9aa0eab3a1350349c7b03b428c5b53004cc751b
RUN sha256sum -c <<EOF
${LOG4J_APPSERVER_SUM} /usr/local/log4j2/log4j-appserver-2.20.0.jar
${LOG4J_JUL_SUM} /usr/local/log4j2/log4j-jul-2.20.0.jar
${LOG4J_LAYOUT_TEMPLATE_JSON_SUM} /usr/local/log4j2/log4j-layout-template-json-2.20.0.jar
EOF
# Add additional classpath entries
ENV CLASSPATH_PREFIX=/usr/local/log4j2/*:/usr/local/log4j2
# Use Log4j also for java.util.logging
ENV JAVA_OPTS=-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
# Start the application
ENTRYPOINT ["tini", "--", "/usr/local/bin/startup.sh"]
我现在会创建自己的映像,然后创建并发出拉取请求,以将缺少的依赖项获取到 Zeebe 中,因此将来它会存在。 https://github.com/camunda/zeebe/blob/main/CONTRIBUTING.md