zookeeper日志各类日志简介

こ雲淡風輕ζ 提交于 2020-02-22 05:09:22

zookeeper服务器会产生三类日志:事务日志、快照日志和log4j日志。

在zookeeper默认配置文件zoo.cfg(可以修改文件名)中有一个配置项dataDir,该配置项用于配置zookeeper快照日志和事务日志的存储地址。在官方提供的默认参考配置文件zoo_sample.cfg中,只有dataDir配置项。其实在实际应用中,还可以为事务日志专门配置存储地址,配置项名称为dataLogDir,在zoo_sample.cfg中并未体现出来。在没有dataLogDir配置项的时候,zookeeper默认将事务日志文件和快照日志文件都存储在dataDir对应的目录下。建议将事务日志(dataLogDir)与快照日志(dataLog)单独配置,因为当zookeeper集群进行频繁的数据读写操作是,会产生大量的事务日志信息,将两类日志分开存储会提高系统性能,而且,可以允许将两类日志存在在不同的存储介质上,减少磁盘压力。log4j用于记录zookeeper集群服务器运行日志,该日志的配置地址在conf/目录下的log4j.properties文件中,该文件中有一个配置项为“zookeeper.log.dir=.”,表示log4j日志文件在与执行程序(zkServer.sh)在同一目录下。当执行zkServer.sh 时,在该文件夹下会产生zookeeper.out日志文件。下面主要介绍事务日志与快照日志。

事务日志

事务日志指zookeeper系统在正常运行过程中,针对所有的更新操作,在返回客户端“更新成功”的响应前,zookeeper会保证已经将本次更新操作的事务日志已经写到磁盘上,只有这样,整个更新操作才会生效。

根据上文所述,可以通过zoo.cfg文件中的dataLogDir配置项找到事物日志存储地点:
在这里插入图片描述
在datalog/目录下存在一个文件夹version-2,该文件夹中保存着事物日志文件:
在这里插入图片描述

从截图中我们可以看出,日志文件的命名规则为log.**,文件大小为64MB,**表示写入该日志的第一个事务的ID,十六进制表示。

事务日志可视化

zookeeper的事务日志为二进制文件,不能通过vim等工具直接访问。其实可以通过zookeeper自带的jar包读取事务日志文件。

首先将libs中的slf4j-api-1.6.1.jar文件和zookeeper根目录下的zookeeper-3.4.9.jar文件复制到临时文件夹analyse中,然后执行如下命令:

Java -classpath .:slf4j-api-1.6.1.jar:zookeeper-3.4.9.jar  org.apache.zookeeper.server.LogFormatter   ../Data/datalog/version-2/log.1

执行后Terminal显示如下(部分):
在这里插入图片描述

快照日志

zookeeper的数据在内存中是以树形结构进行存储的,而快照就是每隔一段时间就会把整个DataTree的数据序列化后存储在磁盘中,这就是zookeeper的快照文件。

zookeeper快照日志的存储路径同样可以在zoo.cfg中查看,如上文截图所示。访问dataDir路径可以看到version-2文件夹:
  在这里插入图片描述
  从截图中可以看出,zookeeper快照文件的命名规则为snapshot.,其中表示zookeeper触发快照的那个瞬间,提交的最后一个事务的ID。
  与日志文件一样Zookeeper也为快照文件提供了可视化的工具org.apache.zookeeper.server包中的SnapshotFormatter类,接下来就使用该工具输出该事务日志文件;
  在这里插入图片描述
  在这里插入图片描述
  在这里插入图片描述
  快照文件的末尾:
  Session Details (sid, timeout, ephemeralCount):   0x364f5fce9ac0000, 40000, 0   0x264f4bf16ab0000, 40000, 0
  这里是说当前抓取快照文件的时间Zookeeper中Session的详情,有两个session超时时间都是40000毫秒ephemeral节点为0;

日志清理

在zookeeper 3.4.0以后,zookeeper提供了自动清理snapshot和事务日志功能,通过配置zoo.cfg下的autopurge.snapRetainCount和autopurge.purgeInterval这两个参数实现日志文件的定时清理。
  在这里插入图片描述
  autopurge.snapRetainCount这个参数指定了需要保留的文件数目,默认保留3个;

autopurge.purgeInterval这个参数指定了清理频率,单位是小时,需要填写一个1或者更大的数据,默认0表示不开启自动清理功能。

点赞 4

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!