1. 日志文件位置配置
Debian系統上,Zookeeper的日志路徑主要由zoo.cfg
和log4j.properties
兩個配置文件控制。dataLogDir
參數(位于zoo.cfg
)指定事務日志的存儲目錄(如/var/log/zookeeper
),log4j.properties
中的zookeeper.log.dir
(或ZOO_LOG_DIR
環境變量)定義普通日志的輸出目錄。修改配置后需重啟Zookeeper服務使變更生效。
2. 日志級別調整
Zookeeper使用SLF4J+Log4J的日志框架,日志級別從高到低分為FATAL
(致命錯誤)、ERROR
(錯誤事件)、WARN
(警告)、INFO
(常規信息)、DEBUG
(調試詳情)、TRACE
(最詳細追蹤)。通過修改log4j.properties
中的zookeeper.rootLogger
參數(如zookeeper.rootLogger=INFO, CONSOLE
)可調整全局日志級別,更細粒度的級別可通過log4j.appender.<appender_name>.Threshold
設置(如將文件appender設為DEBUG
以捕獲詳細日志)。
3. 日志輪轉設置
為避免日志文件過大,可通過兩種方式實現輪轉:
log4j.properties
中配置DailyRollingFileAppender
或RollingFileAppender
,例如設置log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender
(按天輪轉)、log4j.appender.ROLLINGFILE.MaxFileSize=10MB
(單文件最大10MB)、log4j.appender.ROLLINGFILE.MaxBackupIndex=5
(保留5個備份文件)。/etc/logrotate.d/zookeeper
配置文件,內容示例:/var/log/zookeeper/*.log {
daily
missingok
rotate 7
compress
notifempty
create 640 root adm
}
該配置實現每日輪轉、保留7天、壓縮舊日志的功能。4. 日志清理方法
zkCleanup.sh
腳本(位于bin
目錄),例如清理7天前的事務日志和保留3個快照:./bin/zkCleanup.sh -n 3 -d 7
zoo.cfg
中配置autopurge.snapRetainCount
(保留快照數,如3)和autopurge.purgeInterval
(清理間隔,單位小時,如24),開啟自動清理功能。5. 日志查看與分析
tail -f /var/log/zookeeper/zookeeper.log
實時查看日志,cat /var/log/zookeeper/zookeeper.out
查看啟動日志。grep
、awk
等工具提取關鍵信息,例如統計ERROR
日志數量:grep 'ERROR' /var/log/zookeeper/zookeeper.log | wc -l
或提取特定IP的訪問日志:grep '192.168.1.100' /var/log/zookeeper/zookeeper.log | sort | uniq -c | sort -nr
zkServer.sh printlog
命令查看事務日志內容(需配合LogFormatter
工具解析二進制日志)。6. 權限與安全設置
確保Zookeeper日志目錄的權限正確,避免未授權訪問。通常將日志目錄所有者設為運行Zookeeper的用戶(如zookeeper
),權限設為640
:
sudo chown -R zookeeper:zookeeper /var/log/zookeeper
sudo chmod -R 640 /var/log/zookeeper/*
若日志包含敏感信息(如客戶端IP、操作內容),需額外采取措施(如日志脫敏)保護數據安全。