Zookeeper中日志文件种类


日志种类

  • 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]$ 

修改运行日志输出路径

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


End~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值