如何把kafka Log4j1.x升级到Log4j2.x ?

Zookeeper的log4j升级为log4j2的升级方案 近期由于zookeeper的使用的log4j-1.2.17版本被扫描出来了安全漏洞,需要将其升级到2.17.1版本,下面记录下升级过程我的zookeeper部署在 /usr/local/zookeeper,目录需要根据自己的需要进行更改。 阅读详情

b6857538ff0c2879f0e12e39851f379e.gif

背景说明

在去年2021-12-09左右,那时候log4j 2的远程代码执行漏洞,Java程序员和运维在朋友圈疯狂转发,当初定义的CVE号为:CVE-2021-44228 ,然后影响版本只是Apache Log4j 2.x <= 2.14.1受该漏洞影响,Log4j1.x声明是不受到此漏洞影响范围内的,临时构建出来了2.15.0-rc2防护版本,但是后续不让人消停啊。

官方于又于2021.12.13号官方已经发布稳定修复漏洞版本 https://logging.apache.org/log4j/2.x/download.html  「2.16.0」,看了一下提交记录,删除了Messge Lookups的方法。

大家以为的终极版本2.16.0出来后,又爆出DOS拒绝服务攻击漏洞,所以官方在「2021.12.17」又推出了最新版本 「2.17.0」

继官方推出2.17.0版本修复DOS拒绝服务攻击后,又出现远程代码执行 (RCE) 攻击的特征漏洞,官方于2021.12.28推出了 「2.17.1」  版本,虽然此漏洞的利用条件极高,需要可以控制配置文件,但是官方评分还是6.6分(https://logging.apache.org/log4j/2.x/security.html#),属于「中危漏洞」。

最近看官方,2022-02-23又升级到2.17.2了,但是看官方安全说明是正常迭代,不涉及修复关联漏洞。

a9df1d35d7d9cb67baf5027df63172c3.png

利用Java语言开发的程序其实好多都在用Log4j日志框架,当然也包括我们常用的开源服务kafka、zookeeper、Nacos等。

比如这些开源的服务就有一个特征,就是当你线上使用是较老一点点的版本,基本里面引用的都是Log4j 1版本,虽然log4j 2的远程代码执行漏洞没有连累1.x版本,但是1.x版本也有漏洞(CVE-2020-9488 CVE-2019-17571), 而且1.x版本是EOL状态的版本,并且最新1.x版本的包是没有解决漏洞问题的。

b3f8aeca50f9edbd8cd099e392509422.png

b4213e6207f76f33bf6d2e3e0ee80e3e.png

d22c1f5f532b20731c7aa7e6e7452e3d.png

EOL代表不再维护迭代的版本, 所以一般对于安全性要求高的公司,这种情况是不允许的,所以理想的处理办法是在不修改源码的情况下能够修复这些漏洞,同时满足生产安全要求,如果实在不行,只能让有编程开发能力的同学拉取官方对应版本代码分支重新编译一个版本。

从log4j2的官网https://logging.apache.org/log4j/2.x/了解到,log4j1.x和log4j2.x是存在一定的兼容性的,它们实现的都是SLF4J的API,理论上来说是可以通过替换Jar包切换的, 所以今天我这里介绍一下Kafka和Zookeepr替换修复的方法。

我这里还是以官方最新发布的2.17.2的版本为例子。

zookeeper从log4j1.x升级到log4j2.x

基本信息,kafka版本:3.4.14  操作系统:Centos7.9  Java版本:1.8.0_152 ,升级过程如下。

1、下载官方最新log4j 2.17.2版本包并解压

wget --no-check-certificate https://dlcdn.apache.org/logging/log4j/2.17.2/apache-log4j-2.17.2-bin.tar.gz

tar xf apache-log4j-2.17.2-bin.tar.gz

2、同时下载要替换的slf4j-api 1.7.32版本jar包

wget --no-check-certificate https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.32/slf4j-api-1.7.32.jar

3、查询zookeeper引用信息

[root@labs zookeeper]# ls lib/ |grep -Ei 'log4j|slf'
log4j-1.2.17.jar
slf4j-api-1.7.25.jar
slf4j-log4j12-1.7.25.jar

然后分别删除slf4j-log4j12、slf4j-api和log4j三个包:

[root@labs kafka]# rm -f lib/{slf4j-log4j12-1.7.25.jar,slf4j-api-1.7.25.jar,log4j-1.2.17.jar}

4、替换新包

分别把apache-log4j-2.17.2-bin目录下的:

log4j-1.2-api-2.17.2.jar
log4j-api-2.17.2.jar
log4j-core-2.17.2.jar
log4j-slf4j-impl-2.17.2.jar

和slef4j-api-1.7.32.jar同步到zookeeper安装目录下的lib目录下。

5、关闭jmx

如果不关闭jmx,zookeeper启动会报类(org.apache.log4j.jmx.HierarchyDynamicMBean)找不到,详情如下:

[root@labs zookeeper]# cat /data/logs/zookeeper/zookeeper.out 
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/jmx/HierarchyDynamicMBean
        at org.apache.zookeeper.jmx.ManagedUtil.registerLog4jMBeans(ManagedUtil.java:51)
        at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:77)
        at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:55)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:119)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:81)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.jmx.HierarchyDynamicMBean
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 5 more

ebd645002030684b40925023d687eb05.png

如上源码可知前置条件是JMX开启才才会加载此类实例化,并不是直接import的, 因为zookeeper启动可以设置参数来控制是否启用jmx,所以简单粗暴的方式就是,直接修改启动脚本bin/zkServer.sh,然后启动。

ZOOMAIN="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=$JMXLOCALONLY -Dzookeeper.jmx.log4j.disable=true org.apache.zookeeper.server.quorum.QuorumPeerMain"

但是这有个问题,就是你全局禁用了,so,可能影响jmx监控数据的采集,所以可以看看源代码尝试完全修复 or 临时跳过,最简单:

if (Boolean.getBoolean("zookeeper.jmx.log4j.disable") == true) {
            return;
        }
改成:
if (1 == 1) {
            return;
        }

5、测试可用性

  1. 启动zookeeper服务,看看是否可以正常运行;

  2. 然后利用zkCli.sh客户端连接,进行create,get等操作验证。

kafka从log4j1.x升级到log4j2.x

基本信息,kafka版本:2.2.2   操作系统:Centos7.9  Java版本:1.8.0_152 ,升级过程如下。

1、下载官方最新log4j 2.17.2版本包并解压

wget --no-check-certificate https://dlcdn.apache.org/logging/log4j/2.17.2/apache-log4j-2.17.2-bin.tar.gz

tar xf apache-log4j-2.17.2-bin.tar.gz

2、同时下载要替换的slf4j-api 1.7.32版本jar包

wget --no-check-certificate https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.32/slf4j-api-1.7.32.jar

3、查询kafka引用信息

[root@labs kafka]# ls libs/ |grep -Ei 'slf|log4j'
kafka-log4j-appender-2.2.2.jar
log4j-1.2.17.jar
slf4j-api-1.7.25.jar
slf4j-log4j12-1.7.25.jar

然后分别删除slf4j-log4j12、slf4j-api和log4j三个包:

[root@labs kafka]# rm -f libs/{slf4j-log4j12-1.7.25.jar,slf4j-api-1.7.25.jar,log4j-1.2.17.jar}

4、替换新包

分别把apache-log4j-2.17.2-bin目录下的:

log4j-1.2-api-2.17.2.jar
log4j-api-2.17.2.jar
log4j-core-2.17.2.jar
log4j-slf4j-impl-2.17.2.jar

和slef4j-api-1.7.32.jar同步到kafka安装目录下的libs目录下。

5、测试可用性

  1. 启动kafka服务看看可以正常启动吗;

  2. 利用自带生产者工具kafka-console-producer.sh和消费者工具kafka-console-consumer.sh测试功能。

b03edff59c8b3cc50536582994dafd1f.png

又被漏洞追着跑?log4j2升级到 2.23.1 操作流程 Java 用第三方开源包,免不了被漏洞追着跑,几乎每年都要对最新爆出的漏洞组件进行升级,今年要升级的是 log4j2 和 nacos,升级到最新版本。额外补充一下我在将某项目从 log4j 升级到 log4j2 的过程中碰到的一个小问题,log4j.properties 中引用环境变量的方法是。门面包版本包不匹配时,日志直接被忽略了,别问我怎么知道的,这是我画蛇添足把这个包升级到 2.0.5 后得出的教训。,但是对于 log4j2.xml 配置文件中,这个方式不生效了,而是用 ${sys:系统变量} 阅读详情

相关推荐

logback 1.2.6 和 slf4j 1.7.32

logback 1.2.6 和 slf4j 1.7.32

log4j从1.x平滑升级至2.x

log4j从1.x平滑升级至2.x

weixin_43872895的博客 6385

apache-log4j-2.17.2-bin.tar

这个是解决了漏洞版本

springboot 升级 log4j 遇到的问题汇总如下 低版本升级

springboot 升级 log4j 遇到的问题汇总如下 低版本升级

专注技术实战落地的开发,覆盖 Linux 运维、容器部署、Web 开发、自动化工具搭建等领域,提供从环境配置到问题排查的全流程教程,附完整命令行、代码示例与操作截图,助力开发者快速解决项目实际难题。有技术疑问可私聊交流。 1046

IFIX5.8在Win10系统下的安装避坑指南

本文提供了IFIX5.8在Windows 10系统下的详细安装教程与避坑指南。针对常见的驱动缺失、UAC拦截及兼容性报错等问题,文章从安装前准备、分步安装流程到安装后配置与驱动修复,给出了系统性的解决方案,帮助工控从业者顺利完成部署。

f6g7h8i9j的博客 364

【AI实践】Dify调用本地和在线模型服务

Ollama可以本地部署模型,如何集成私有数据、如何外部应用程序对接,因此需要有一个应用开发框架。ip地址需要换成自己电脑的IP地址;模型名称需要和Ollama模型名称保持一致;docker是虚拟环境的主机,Ollama部署在本地主机,无法通过本机访问。找到Ollama,配置本地Ollama已经验证的模型,如phi3。在docker页面里面,也可以看到running。docker已经安装完成的情况下。,打开dify,注册登录后。在工作区选择调用即可。

AI_Gump的博客 4855

将log4j的项目升级到log4j2

0.背景 虽然大部分的java项目使用的都是logback,但是仍然有很多开源项目使用log4j,例如kafka、zookeeper。但是log4j已经于2012年停止更新,并且log4j扫出如下安全漏洞: https://rnd-vulncenter.huawei.com/vuln/toViewOfficialDetail?cveId=CVE-2020-9488 https://rnd-vulncenter.huawei.com/vuln/toViewOfficialDetail?cveId=CVE-20

weixin_36142042的博客 7447

面试题-手撕NMS(非极大值抑制)

非极大值抑制(Non-Maximum Suppression,NMS)是一种常用于目标检测和计算机视觉中的算法,用于去除重叠的边界框,保留最可能是真实目标的边界框。其核心就是对一组检测框,找出其中属于同一个类别且分数最高的那个框,然后把和这个框的IOU值大于阈值的那些框都删掉。

zhaoyqcsdn的博客 1108

log4j1.x升级log4j2.x

最近再弄项目的log4j日志升级,中间也遇到一些问题,现在尽可能完整的总结一下,方便以后查看,同时也可以给需要的网友们参考。由于今天心情不是很在状态,不想闲扯淡,直接进入正题 对于log4j1.x的配置这里不多说,网上有很多资料,也不是今天的主题 日志升级过程 1.1 删除 log4j1.x jar 包(使用ant命令打包的话同时删除ivy.xml里面的jar包配置信息) 1.2

Mr_Right_TT的专栏 4403

揭秘Outlook/QQ邮箱伪造:如何利用Unicode编码绕过SPF检测

本文深入剖析了利用Unicode编码进行邮件显示名伪造的攻击手法,揭示了攻击者如何通过插入零宽字符等特殊编码绕过SPF检测,使邮件在Outlook、QQ邮箱等客户端中看似来自可信发件人。文章通过Python代码示例演示了伪造过程,并提供了从用户自查到管理员部署DMARC策略的多层次防御建议。

weixin_29063035的博客 333

ASReview:基于主动学习的AI文献筛选工具,提升科研效率

主动学习是机器学习的一个重要分支,其核心原理是让算法能够主动选择最有价值的数据进行标注,从而以更低的成本获得更好的模型性能。这一技术通过人机协作的闭环流程,显著提升了数据标注和模型训练的效率和精度。在工程实践中,主动学习尤其适用于数据标注成本高昂或数据类别不平衡的场景,例如医学影像分析、自然语言处理中的文本分类以及推荐系统的冷启动问题。通过优先标注模型最不确定的样本,它能够有效解决传统机器学习面临的冷启动和数据稀疏性挑战。本文聚焦的ASReview项目,正是将主动学习原理应用于系统文献综述这一具体场景,通过

weixin_28725959的博客 431

log4j到log4j2升级迁移方案

序:这段时间因为维护的项目存在大量日志打印,严重拖慢整体响应时间,在做性能优化的工作中对这块内容进行了升级换代,由以前的log4j升级为log4j2,以实现日志异步打印。接下来记录一下这个费时半个月的迁移踩过的坑! 相关操作步骤: 1. 在项目中移除log4j的依赖,并添加log4j2的相关依赖.(选择log4j2的版本时请留意,2.10.x之后的版本是基于java9的!如果有使用到...

anhui7797的博客 650

抓包工具(五)2025版 Burp Suite Professional的下载、安装、使用

抓包工具(五)2025版 Burp Suite Professional的下载、安装、使用

ACGkaka的博客 2万+

Log4j2 重大漏洞与解决方案

从12月10日(上周五)开始,朋友圈,各种论坛、公众号和群,都在讨论一个Log4j的漏洞,多少程序员半夜爬起来改代码,甚至威胁到了全球网络安全。为什么这个漏洞反应这么强烈呢?

小夏陌的博客 7万+

【TouchDesigner】三维渲染

Cmera COMP Uniform Scale(按比例缩放):沿x,y,z三个轴等比例缩放相机(通常不建议改变相机大小)。 Constrain To(约束到):让相机附属到某个指定元件上,跟随指定元件运动。 Look At(朝向):让相机在移动过程中始终面对指定的元件。 Pah SOP(相机的路径):输入SOP元件名字,为相机指定移动路径。 Geometry Comp Geometry COMP中的参数与Camera COMP中的参数用法大部分都相似。特殊的是它的instacne页面的

wangpuqing1997的博客 5459

使用自己的数据跑通mmsegmentation

使用自己的数据跑通mmsegmentation,解决以下报错:1)type object 'FileClient' has no attribute 'infer_client' 2)It is expected output_size equals to 2, but got size 3 3)训练测试结果报NAN 4)KeyError: 'MyDataset is not in the dataset registry' 5)预训练模型和加载的网络结构层名有差异,unexpected key .....

猫猫与橙子的博客 1656

Spring Boot发布2.6.2、2.5.8:升级log4j2到2.17.0

12月22日,Spring官方发布了Spring Boot 2.5.8(包括46个错误修复、文档改进和依赖项升级)和2.6.2(包括55个错误修复、文档改进和依赖项升级)。这两个版本均为缺...

程序猿DD 1574

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Log4j2 自定义appender

Log4j 2介绍: Log4j 2是Java的流行日志记录程序包,几乎每个大型应用程序都包含其自己的日志记录或跟踪API,将日志语句插入代码是调试它的低技术方法。这也可能是唯一的方法,因为调试器并不总是可用或不适用。对于多线程应用程序和整个分布式应用程序通常是这种情况。 经验表明,日志记录是开发周期的重要组成部分。它具有几个优点。它提供有关应用程序运行的精确上下文。一旦插入到代码中,就无需人工干预即可生成日志输出。此外,日志输出可以保存在永久性介质中,以便以后进行研究。除了在开发周...

宇哥996的博客 2780

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

log4j2漏洞升级

一、影响范围: Apache Log4j 2.x <= 2.15.0-rc1 二、可能受影响的应用不限于以下内容: Spring-Boot-strater-log4j2 Apache Struts2 Apache Solr Apache Druid Apache Flink ElasticSearch Flume Dubbo Jedis Logstash Kafka Apache Storm 三、解决办法: 1、等待官方升级 log4j2 版本。 2、自己升级 log

magic_kid_2010的专栏 7627

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

logback-kafka-appender兼容性全解析:Logback 1.2门槛、Kafka版本矩阵与5个替代方案盘点

logback-kafka-appender 是一个将应用日志直接发布到 Apache Kafka 的 Logback Appender 组件,曾是最流行的"logback 日志接入 Kafka"方案之一。不过该项目目前已在 GitHub 上归档停维护,很多新手在选择它之前都会纠结:它兼容哪些 Logback 和 Kafka 版本?还能放心用吗?有没有更好的替代?本文就围绕 logback-kaf

gitblog_01103的博客 294

appender log4j 扩展_Log4j2 自定义appender

Log4j 2介绍:Log4j 2是Java的流行日志记录程序包,几乎每个大型应用程序都包含其自己的日志记录或跟踪API,将日志语句插入代码是调试它的低技术方法。这也可能是唯一的方法,因为调试器并不总是可用或不适用。对于多线程应用程序和整个分布式应用程序通常是这种情况。经验表明,日志记录是开发周期的重要组成部分。它提供有关应用程序运行的精确上下文。一旦插入到代码中,就无需人工干预即可生成日志输出。...

weixin_35545176的博客 792

SpringBoot2.x下使用log4j2打印JSON日志(支持ELK机制)

文章目录1. pom依赖1.1 替换日志依赖1.2 项目需要Jackson包,保证项目中包含jackson的依赖2. 修改代码2.1 打印pv日志类2.1.1 修改配置文件2.1.2 修改输出代码2.2 打印业务日志2.3 打印error日志3. 附录代码附录1:输出项目名称附录2:重写Log4jLogEvent源码附录3:完整的log4j2-spring.xml文件4. 推荐阅读 默认情况下SpringBoot2.x采用的是logback打印日志,而log4j2性能优于logback。 默认情况下log

qq_29595463的博客 2607

Apache Kafka 4.0 与 Kafka 3.x 版本区别

项目Kafka 3.xKafka 4.0元数据管理ZooKeeper 可选,KRaft 合作KRaft 唯一支持KIP‑848 预览默认启用点对点队列无支持(KIP‑932 早期)MM1 存量支持移除 MM1日志框架Log4j 可用强制 Log4j2Java 版本支持 Java8+,建议 Java11客户端需 Java11,Broker需 Java17升级路径均可滚动升级需在 3.9+ 完成 KRaft 再升级。

喝醉酒的小白 1727

Kafka 4.0 升级实战路线图、关键变更与避坑清单

Kafka 4.0升级指南摘要:仅支持KRaft模式,需先迁移并升级至3.9.x;客户端需Java≥11;移除ZooKeeper、Scala 2.12等旧组件。升级步骤需逐台Broker滚动重启,最终化后启用新协议。关键变化包括:消费者poll(long)改为poll(Duration)、生产者默认linger.ms=5、事务协议加固等。注意配置项重命名(如whitelist→include)和工具移除(如MirrorMaker 1)。升级后需验证KIP-848再均衡协议和事务写一致性,关注1小时消息时间戳

hello.reader 2073

Log4j原理&源码解析

一文搞懂Log4j原理

王文萱的博客 6025

记录一:升级springboot版本:1.5.10.RELEASE至2.1.6.RELEASE

提示:本文章只记录 文章目录前言一、pom文件的修改1.parent版本号修改2.修改java版本3.添加redis依赖包4.jasypt包升级5.kafaka也需要升级6.最后别忘了处理log4j的安全漏洞的版本升级二、配置文件的修改1.oracle配置修改2.redis配置修改总结 前言 提示:简单记录一次本人升级SpringBoot从1.X版本到2.X的升级步骤,以及遇到的问题。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pom文件的修改 1.parent版本号修改 升级前:

weixin_42599026的博客 2417
上一篇: K8S之Pod控制器
下一篇: 什么是横向扩展和纵向扩展?
后场技术
博客等级 码龄11年 156粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值