如何读取 Zookeeper 事务日志?
Posted
技术标签:
【中文标题】如何读取 Zookeeper 事务日志?【英文标题】:How do one read the Zookeeper transaction log? 【发布时间】:2013-07-27 12:25:29 【问题描述】:是否有任何现有的工具可以帮助读取 Zookeeper 事务日志?默认情况下,它是二进制格式,我想以人类可读的形式阅读它。
【问题讨论】:
【参考方案1】:我不知道你是否已经解决了这个问题。
答案:
cd the zookeeper dir.
如果你想读取快照,使用:
java -cp zookeeper-3.4.6.jar:lib/log4j-1.2.16.jar:lib/slf4j-log4j12-1.6.1.jar:lib/slf4j-api-1.6.1.jar org.apache.zookeeper.server.SnapshotFormatter version-2/snapshot.xxx
如果你想阅读日志,使用:
java -cp zookeeper-3.4.6.jar:lib/log4j-1.2.16.jar:lib/slf4j-log4j12-1.6.1.jar:lib/slf4j-api-1.6.1.jar org.apache.zookeeper.server.LogFormatter version-2/log.xxx
【讨论】:
4 年后,您的帖子仍然有用!非常感谢奥利弗和托尼。我试图在日志文件夹内的服务器日志上运行此命令(没有意识到我打算在事务日志上运行它......) 使用 zookeeper 3.5.6 这对我有用(更新了 jar 名称并且必须添加黄麻):java -cp lib/zookeeper-3.5.6.jar:lib/log4j-1.2.17.jar:lib/slf4j-log4j12-1.7.25.jar:lib/slf4j-api-1.7.25.jar:lib/zookeeper-jute-3.5.6.jar
LogFormatter 工具在 3.7 中被移除【参考方案2】:
你可以使用这样的东西
java -cp $ZOOKEEPER_CLASSPATH org.apache.zookeeper.server.LogFormatter [zookeeper log file path]
【讨论】:
我无法让它工作。不断返回Error: Could not find or load main class log.5200768f38
@Eye - 在执行 Vikas 的命令之前,您需要为 ZOOKEEPER_CLASSPATH
设置一个有效值。我个人更喜欢简单地重用 HBase 的类路径设置:hbase org.apache.zookeeper.server.LogFormatter <filename>
,它会自动加载类。【参考方案3】:
在前两个答案的基础上,使用 Zookeeper 3.5.6:来自包含所有 ZK 和支持 jar 运行的 /path/to/zookeeper/lib
目录:
java -cp * org.apache.zookeeper.server.LogFormatter /path/to/zookeeper/transaction/logs/version-2/log.xxx
【讨论】:
【参考方案4】:您可以为 ZooKeeper 3.6.o 及更高版本启用 ZooKeeper 审核日志。要启用审核日志,请在 conf/zoo.cfg 中配置 audit.enable=true。
要记住的一点是,来自同一集合的不同服务器的日志应该被聚合,因为它们中的每一个都包含仅从连接到该特定服务器的客户端执行的操作。
完整信息在这里:https://zookeeper.apache.org/doc/r3.6.1/zookeeperAuditLogs.html
【讨论】:
【参考方案5】:从zookeeper 3.6版开始,zookeeper发行版中有读取事务日志和快照的工具:
对于事务日志:
bin/zkTxnLogToolkit.sh --dump /datalog/version-2/log.f3aa6
对于快照:
./zkSnapShotToolkit.sh -d /data/zkdata/version-2/snapshot.fa01000186d
详情见official docs
【讨论】:
以上是关于如何读取 Zookeeper 事务日志?的主要内容,如果未能解决你的问题,请参考以下文章