Zookeeper日志管理指南
Zookeeper的日志管理主要依赖两个核心配置文件:log4j.properties(控制日志输出行为)和zoo.cfg(管理日志存储路径及自动清理)。
log4j.properties配置
log4j.rootLogger设置全局日志级别,可选值包括OFF(关闭)、FATAL(致命错误)、ERROR(错误)、WARN(警告)、INFO(信息,默认)、DEBUG(调试)、TRACE(跟踪)、ALL(所有)。例如:log4j.rootLogger=INFO, CONSOLE。Appender配置输出到控制台(CONSOLE)或文件(ROLLINGFILE/DAILYROLLINGFILE)。例如,使用DailyRollingFileAppender按天轮转日志:zookeeper.root.logger=INFO, ROLLINGFILE
zookeeper.log.dir=/var/log/zookeeper
zookeeper.log.file=zookeeper.log
log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}
log4j.appender.ROLLINGFILE.DatePattern='.'yyyy-MM-dd
MaxFileSize(单个文件最大大小,如10MB)和MaxBackupIndex(保留的备份文件数量,如5)控制文件大小和数量。例如:log4j.appender.ROLLINGFILE.MaxFileSize=10MB
log4j.appender.ROLLINGFILE.MaxBackupIndex=5
zoo.cfg配置
dataLogDir指定事务日志的存储目录(默认与快照日志共用dataDir,建议分开存储以提升性能)。例如:dataLogDir=/var/lib/zookeeper/log。autopurge.snapRetainCount(保留的快照/事务日志数量)和autopurge.purgeInterval(清理频率,单位:小时,默认0表示关闭)开启自动清理。例如:autopurge.snapRetainCount=3
autopurge.purgeInterval=24
日志轮转用于防止日志文件过大占用磁盘空间,主要有两种方式:
log4j.properties配置RollingFileAppender(按文件大小轮转)或DailyRollingFileAppender(按日期轮转),如上述配置示例所示。这种方式适合精细化控制轮转规则。logrotate工具logrotate配置文件(如/etc/logrotate.d/zookeeper),内容示例如下:/var/log/zookeeper/zookeeper.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
该配置表示每天轮转一次,保留最近7天的压缩日志,使用copytruncate避免重启Zookeeper服务。cat /var/log/zookeeper/zookeeper.log(默认日志路径)。zkServer.sh脚本查看特定日期日志:./bin/zkServer.sh get-logs --date "2025-10-30"。LogFormatter工具解析二进制日志文件(如快照日志),示例命令:java -classpath .:slf4j-api-1.7.25.jar:./zookeeper-3.4.6.jar org.apache.zookeeper.server.LogFormatter /var/lib/zookeeper/version-2/snapshot.*.log
zoo.cfg中的autopurge.snapRetainCount和autopurge.purgeInterval参数开启自动清理。例如,设置autopurge.snapRetainCount=3(保留最近3个快照/事务日志)和autopurge.purgeInterval=24(每24小时清理一次),Zookeeper会自动删除旧文件。zkCleanup.sh脚本:./bin/zkCleanup.sh -n 3 -d 24(保留最近3个文件,每24小时清理一次)。#!/bin/bash
DATA_DIR=/var/lib/zookeeper/log
COUNT=30
ls -t $DATA_DIR/log.* | tail -n +$((COUNT+1)) | xargs rm -f
将脚本添加到crontab中,设置为每天凌晨执行:0 2 * * * /root/clean_zook_log.sh > /dev/null 2>&1。chmod设置文件权限(如640),使用chown设置文件所有者(如zookeeper:zookeeper)。例如:chmod 640 /var/log/zookeeper/zookeeper.log
chown zookeeper:zookeeper /var/log/zookeeper/zookeeper.log
INFO级别(平衡性能与信息量),调试时使用DEBUG级别(输出详细信息),避免使用TRACE级别(影响性能)。ERROR、WARN级别的日志,及时排查问题(如连接超时、数据不一致)。