Zookeeper的日志管理主要依赖两个核心配置文件:zoo.cfg(路径:/etc/zookeeper/conf/zoo.cfg)和log4j.properties(路径:/etc/zookeeper/conf/log4j.properties)。
dataLogDir参数指定事务日志的存储路径(建议与dataDir(快照日志路径)分开,如dataLogDir=/var/log/zookeeper),避免单目录下日志文件过多影响性能。zookeeper.log.dir参数设置log4j日志的输出目录(如zookeeper.log.dir=/var/log/zookeeper),并可通过zookeeper.root.logger调整日志级别(如INFO、DEBUG)和输出目标(如ROLLINGFILE)。ZOO_LOG4J_PROP属性(如export ZOO_LOG4J_PROP="INFO,ROLLINGFILE"),覆盖log4j.properties中的默认配置。tail命令实时查看最新日志:tail -f /var/log/zookeeper/zookeeper.log(按Ctrl+C停止);less命令分页查看日志:less /var/log/zookeeper/zookeeper.log(按q退出);grep命令过滤关键信息:grep "ERROR" /var/log/zookeeper/zookeeper.log(查找所有包含“ERROR”的日志行)。zkServer.sh get-logs查看当前节点的最新日志;若需查看特定日期或服务器的日志,可添加--date(如--date "2025-09-20")或--server(如--server 192.168.1.100)参数。7000),进入org.apache.zookeeper.server.QuorumPeer→Logging→Recent Log Events,实时查看日志事件。zoo.cfg中的autopurge.snapRetainCount(保留的快照数量,如3)和autopurge.purgeInterval(自动清理间隔,单位:小时,如24)参数,定期清理旧的快照文件(snapshot.zxid)和事务日志(log.txid)。zkCleanup.sh脚本(路径:/usr/share/zookeeper/bin/zkCleanup.sh),通过-n参数指定保留的快照数量(如./zkCleanup.sh -n 3),清理除最近3个快照外的所有旧日志和快照。使用logrotate工具(Ubuntu默认预装)防止日志文件过大,配置文件路径:/etc/logrotate.d/zookeeper。示例配置如下:
/var/log/zookeeper/*.log {
daily # 每天轮转一次
missingok # 若日志文件不存在,不报错
rotate 7 # 保留7天的日志
compress # 压缩旧日志(如.gz格式)
notifempty # 若日志为空,不轮转
create 640 root adm # 创建新日志文件,权限640,属主root,属组adm
sharedscripts # 所有日志轮转完成后执行postrotate脚本
postrotate
/bin/kill -HUP `cat /var/run/zookeeper.pid 2>/dev/null` 2>/dev/null || true
endscript
}
sudo logrotate -f /etc/logrotate.d/zookeeper,检查/var/log/zookeeper目录下是否生成压缩的旧日志文件(如.gz)和新日志文件。FATAL> ERROR> WARN> INFO> DEBUG)缩小问题范围,优先查看ERROR及以上级别的日志。zoo.cfg中的clientPort、maxClientCnxns等参数,检查网络或配置是否异常。ERROR日志时,发送邮件或短信通知)。