ZooKeeper日志分析与健康检查
日志分析和健康检查是运维关键技能。
日志分析与排查
日志位置:
| 日志 | 目录 |
|---|---|
| 事务日志 | dataDir/version-2/log.* |
| 快照 | dataDir/version-2/snapshot.* |
| 运行日志 | logs/zookeeper.log |
事务日志分析:
Bash
# 使用LogFormatter工具
java -cp zookeeper.jar org.apache.zookeeper.server.LogFormatter log.100000001
# 输出事务详情
zxid: 0x100000001
type: create
path: /app/config
data: {"key":"value"}
time: 2026-05-24 10:00:00
排查技巧:
| 场景 | 检查内容 |
|---|---|
| Leader切换 | 检查选举日志 |
| 延迟异常 | 分析事务处理时间 |
| 连接超时 | 检查心跳和会话日志 |
运行日志关键信息:
properties
选举日志: LOOKING → LEADING/FOLLOWING
连接日志: Connection received from xxx
异常日志: Exception in thread xxx
快照与事务日志
文件作用:
| 文件 | 作用 |
|---|---|
| 快照 | 保存某一时刻完整数据状态 |
| 事务日志 | 记录所有写操作 |
恢复流程:
properties
1. 加载最近的快照
2. 回放快照之后的事务日志
3. 恢复到最新一致状态
快照生成:
Bash
# zoo.cfg配置
snapCount=100000 # 每10万事务生成快照
清理策略:
Bash
# 自动清理配置
autopurge.snapRetainCount=3 # 保留最近3个快照
autopurge.purgeInterval=1 # 每小时清理
手动清理:
text
# 使用PurgeTxnLog工具
java -cp zookeeper.jar org.apache.zookeeper.server.PurgeTxnLog
-d /dataDir -n 5
注意:生产环境必须开启自动清理,避免磁盘满。
集群健康检查
检查项目:
| 项目 | 检查方式 | 标准 |
|---|---|---|
| Leader状态 | stat查看Mode | 有且仅有一个Leader |
| 节点存活 | ruok或stat | 返回imok |
| ZXID一致 | 各节点srvr对比 | ZXID相近 |
| 连接数 | mntr或cons | 在合理范围 |
| 延迟 | mntr latency | <100ms正常 |
健康标准:
| 标准 | 说明 |
|---|---|
| Leader唯一 | 有且仅有一个Leader |
| 过半存活 | 过半节点响应 |
| ZXID相近 | 各节点ZXID差距<10 |
| 延迟正常 | 平均延迟<100ms |
告警规则:
| 告警 | 条件 |
|---|---|
| Leader切换频繁 | >3次/小时 |
| 连接数异常 | >maxClientCnxns×0.8 |
| 延迟升高 | >100ms持续5分钟 |
| 磁盘使用高 | >80% |
健康检查脚本:
text
#!/bin/bash
# 检查集群健康状态
for host in $HOSTS; do
echo "Checking $host..."
echo stat | nc $host 2181 | grep Mode
echo mntr | nc $host 2181 | grep latency
done
提示:定期健康检查和告警配置保障集群稳定。
要点总结
- 事务日志用LogFormatter工具分析
- 快照保存数据状态,日志记录写操作
- 恢复:加载快照+回放日志
- autopurge自动清理避免磁盘满
- 健康检查关注Leader、ZXID、延迟、连接数
- 配置告警规则及时发现异常
- 定期执行健康检查脚本
📝 发现内容有误?点击此处直接编辑