我们使用zeebe分布式工作流引擎,它使用log4j作为日志框架。这是一个通过helm部署在kubernetes上的spring Boot 应用程序。不幸的是,它不包括支持json日志记录的log4j-layout-template-json jar。任何需要第三方应用程序代码修改的方法看起来都不正确,因为项目正在积极开发中。我们需要不断升级第三方应用程序,因此分叉会使部署变得更加困难。有什么可能的方法来配置它的json日志记录,以便日志可以运送到EFK堆栈?谢谢
log4j-layout-template-json
lnvxswe21#
现在我会创建自己的镜像,然后创建并发出一个pull请求,将缺失的依赖项导入Zeebe,这样将来它就会存在。https://github.com/camunda/zeebe/blob/main/CONTRIBUTING.md
jaxagkaj2#
一般的解决方案很简单:您需要将log4j-layout-template-json添加到应用程序的类路径中,并使用其他库创建Docker镜像。魔鬼就在细节中:每个发行版都有不同的方法将库添加到类路径。Camunda Zeebe似乎正在使用Appassembler来创建其二进制发行版,该发行版使用this script来 Boot 应用程序。所以你有两个选择
/usr/local/zeebe/lib
/usr/local/zeebe/config
CLASSPATH_PREFIX
例如,您可以添加额外的Log4j Core模块和自定义配置文件到/usr/local/log4j2目录,Docker文件如下所示:
/usr/local/log4j2
FROM camunda/zeebe:latest# Download additional Logj4 2.x artifactsRUN apt -y update && apt -y install curlRUN 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 fileCOPY log4j2.xml /usr/local/log4j2/# Check artifactsARG LOG4J_APPSERVER_SUM=53d8e78277324145cde435b515b1c7f1ba02b93e7a1974411ce7c5511a8c6b69ARG LOG4J_JUL_SUM=c9b33dffb40bd00d4889ea4700f79d87a2e4d9f92911a3a008ae18c0bb3fb167ARG LOG4J_LAYOUT_TEMPLATE_JSON_SUM=62d2c2b8e80a74ca65d80cf2f9aa0eab3a1350349c7b03b428c5b53004cc751bRUN 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.jarEOF# Add additional classpath entriesENV CLASSPATH_PREFIX=/usr/local/log4j2/*:/usr/local/log4j2# Use Log4j also for java.util.loggingENV JAVA_OPTS=-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager# Start the applicationENTRYPOINT ["tini", "--", "/usr/local/bin/startup.sh"]
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"]
2条答案
按热度按时间lnvxswe21#
现在我会创建自己的镜像,然后创建并发出一个pull请求,将缺失的依赖项导入Zeebe,这样将来它就会存在。https://github.com/camunda/zeebe/blob/main/CONTRIBUTING.md
jaxagkaj2#
一般的解决方案很简单:您需要将
log4j-layout-template-json
添加到应用程序的类路径中,并使用其他库创建Docker镜像。魔鬼就在细节中:每个发行版都有不同的方法将库添加到类路径。
Camunda Zeebe似乎正在使用Appassembler来创建其二进制发行版,该发行版使用this script来 Boot 应用程序。所以你有两个选择
/usr/local/zeebe/lib
,将Log4j Core配置文件添加到/usr/local/zeebe/config
,CLASSPATH_PREFIX
环境变量。例如,您可以添加额外的Log4j Core模块和自定义配置文件到
/usr/local/log4j2
目录,Docker文件如下所示: