Zookeeper日志管理Ubuntu实践指南
Zookeeper在Ubuntu上的日志存储路径由zoo.cfg(事务/快照日志)和log4j.properties(应用日志)共同决定,需提前创建对应目录并授权。
/etc/zookeeper/conf/zoo.cfg,设置dataLogDir(事务日志,记录所有写操作)和dataDir(快照日志,记录数据快照,默认与事务日志分开存储提升性能)。示例如下:dataDir=/var/lib/zookeeper/data       # 快照日志目录
dataLogDir=/var/log/zookeeper         # 事务日志目录
/etc/zookeeper/conf/log4j.properties,设置zookeeper.log.dir指定应用日志路径(如/var/log/zookeeper)。示例如下:zookeeper.log.dir=/var/log/zookeeper
log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/zookeeper.log
zookeeper)读写权限:sudo mkdir -p /var/lib/zookeeper/data /var/log/zookeeper
sudo chown -R zookeeper:zookeeper /var/lib/zookeeper /var/log/zookeeper
Zookeeper日志级别决定了日志的详细程度,可根据需求调整(如DEBUG用于详细调试,INFO用于常规监控,ERROR仅记录错误)。
log4j.properties:找到log4j.rootLogger配置项,修改日志级别(如改为DEBUG):log4j.rootLogger=DEBUG, CONSOLE, ROLLINGFILE
sudo systemctl restart zookeeper
为防止日志文件过大占用磁盘空间,需通过logrotate工具实现自动轮转(按大小或时间分割日志)。
logrotate配置文件:在/etc/logrotate.d/下创建zookeeper文件,内容如下(按天轮转,保留7天日志,压缩旧日志):/var/log/zookeeper/zookeeper.log {
    daily                   # 按天轮转
    rotate 7                # 保留7天日志
    compress                # 压缩旧日志
    delaycompress           # 延迟压缩(避免压缩当天日志)
    missingok               # 日志不存在时不报错
    notifempty              # 日志为空时不轮转
    copytruncate            # 复制日志后清空原文件(避免重启服务)
}
sudo logrotate -vf /etc/logrotate.d/zookeeper
Zookeeper 3.4.0及以上版本内置自动清理功能,可定期清理过期快照和事务日志,减少磁盘占用。
zoo.cfg中添加以下两项(默认关闭):autopurge.purgeInterval=24  # 清理频率(小时),设置为24表示每天清理一次
autopurge.snapRetainCount=3 # 保留的快照文件数量(保留最新的3个)
tail命令实时查看最新日志(如应用日志):tail -f /var/log/zookeeper/zookeeper.log
grep命令过滤ERROR级别的日志,快速定位问题:grep "ERROR" /var/log/zookeeper/zookeeper.log
ls命令查看日志目录下的文件:ls -lh /var/log/zookeeper/
chmod 640),避免泄露。cron设置定期任务(如每周一检查),及时发现磁盘空间不足、节点异常等问题。