Zookeeper中日志文件种类

Camille ·
更新时间:2024-09-20
· 617 次阅读

日志种类 Zookeeper在运行期间主要输出三类文件:快照(snapshot)事务日志(transaction log)运行日志。其中snapshot存放于dataDir中,事务日志在未设置dataLogDir参数时默认与snapshot存放路径相同,运行日志zookeeper.out默认存放在启动脚本的当前路径下 snapshot是zookeeper节点存储的数据的永久备份,而事务日志transaction log则是用于存储Znode的变化信息。当事务日志文件变得较大时,Zookeeper会将当前所有znode节点的最新状态生成快照snapshot存储到dataDir中,同时生成新的事务日志,用于接收最新的znodes变化。在生成新快照期间,也许会有新的事务被追加到旧的事务日志中,因此有些比快照更新的事务也许会存放在上一个版本的事务日志中 在Zookeeper的默认设置中,默认将snapshot和事务日志放置在同一个文件夹中,且默认会永久保存这两种文件。在Zookeeper 3.4.0之后可以通过设置conf/zoo.cfg中的autopurge.snapRetainCountautopurge.purgeInterval参数来开启定时清理,每次保留固定数量的快照与其对应的事务日志 官方文档中建议将快照snapshot和事务日志transaction log存放于不同存储设备中,即单独设置dataLogDir存放事务日志,并且不与dataDir在同一设备下,因为是否设置独立存储设备用于存储日志,将会对Zookeeper吞吐量有较大影响 zookeeper.out文件在官方文档中并没有被称为运行日志,在此只是一种通俗的便于理解的称呼,zookeeper的默认存放路径在启动zkServer.sh脚本的当前路径下,这就导致每次启动zkServer.sh时都很难记住生成的zookeeper文件存放位置,因此建议修改其生成路径,便于每次出错后能快速定位错误 Zookeeper使用SLF4J(Simple Logging Facade for Java)作为其日志的基本框架(接口),为了向后兼容,Zookeeper绑定使用的是LOG4J(Log for Java)作为其具体的日志解决方案,log4j是Apache的开源项目之一。当然也可以在SLF4J的基础上使用其他的日志框架,这取决于你的具体应用 独立存储事务日志 conf/zoo.cfg的默认参数设置中没有dataLogDir参数,也没有相关介绍,但是在官方文档的Advanced Configuration部分有具体描述。具体设置可参考: 15 # 自定义Zookeeper集群数据本地存储路径 16 dataDir=/opt/module/zookeeper-3.4.14/zkData 17 # 设置事务日志transaction log的存储路径,默认是dateDir,但是理应存储在不同设备下,避免对吞吐量造成负面影响 18 dataLogDir=/opt/module/zookeeper-3.4.14/logs/transaction 快照和事务日志定期清理 在Zookeeper 3.4.0之后可以通过设置conf/zoo.cfg中的autopurge.snapRetainCountautopurge.purgeInterval参数来开启定时清理,每次保留固定数量的快照与其对应的事务日志。具体设置可参考: 34 # The number of snapshots to retain in dataDir 35 autopurge.snapRetainCount=3 36 # Purge task interval in hours 37 # Set to "0" to disable auto purge feature 38 autopurge.purgeInterval=1 事务日志可视化 事务日志transaction log默认都是二进制文件,关于日志格式化输出,官方文档中也有相应介绍,基本都是基于zookeeper和slf4j提供的API实现二进制日志文件格式转换,命令使用格式为java -cp zookeeper-3.4.14.jar:lib/slf4j-api-1.7.25.jar org.apache.zookeeper.server.LogFormatter ,注意:其中所使用的包的版本需要根据自己的zookeeper调整,使用的LogFormatter类应该都是固定的。具体使用可参考: [tomandersen@hadoop101 zookeeper-3.4.14]$ [tomandersen@hadoop101 zookeeper-3.4.14]$ [tomandersen@hadoop101 zookeeper-3.4.14]$ java -cp zookeeper-3.4.14.jar:lib/slf4j-api-1.7.25.jar org.apache.zookeeper.server.LogFormatter logs/transaction/version-2/log.300000001 SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. ZooKeeper Transactional Log File with dbid 0 txnlog format version 2 20-2-19 上午10时02分46秒 session 0x1000034fab40000 cxid 0x0 zxid 0x300000001 createSession 30000 20-2-19 上午10时03分38秒 session 0x1000034fab40000 cxid 0x2 zxid 0x300000002 create '/TomAndersen,#5468697320697320546f6d416e64657273656e277320706572736f6e616c20736974652e,v{s{31,s{'world,'anyone}}},F,1 20-2-19 上午10时03分44秒 session 0x1000034fab40000 cxid 0x4 zxid 0x300000003 closeSession null EOF reached after 3 txns. [tomandersen@hadoop101 zookeeper-3.4.14]$ [tomandersen@hadoop101 zookeeper-3.4.14]$ [tomandersen@hadoop101 zookeeper-3.4.14]$ 修改运行日志输出路径 具体修改zookeeper.out的输出路径,可以参考:Zookeeper修改运行日志zookeeper.out输出路径

以上是个人结合各种资料的理解,如果存在错误恳请各位留言指正,感谢!

End~
作者:TomAndersen



Zookeeper 日志文件

需要 登录 后方可回复, 如果你还没有账号请 注册新账号