Zookeeper日志详解

本文遵循BY-SA版权协议,转载请附上原文出处链接。


本文作者: 黑伴白

本文链接: http://heibanbai.com.cn/posts/6a9ff91b/

Zookeeper日志详解

在 Apache ZooKeeper 中,日志主要分为事务日志(Transaction Logs)、快照日志(Snapshot Logs)、运行日志(Runtime Logs,有时也称为服务日志)以及启动日志(Startup Logs)。下面详细介绍这四类日志的存在性、默认存储位置、日志名称以及如何配置它们的路径和存储策略。

1. 事务日志(Transaction Logs)

存在性:存在。

默认存储位置:通常与 ZooKeeper 的数据目录相同,默认路径在 dataDir 指定的目录下。

日志名称:事务日志文件通常以 log. 开头,例如 log.1234567890

配置路径和存储策略

  • 配置路径:通过 dataLogDir 属性指定事务日志的存储目录。如果不配置,默认使用 dataDir

    1
    dataLogDir=/var/lib/zookeeper/log
  • 存储策略:事务日志的滚动和清理策略可以通过 autopurge.snapRetainCountautopurge.purgeInterval 配置。

    1
    2
    autopurge.snapRetainCount=3
    autopurge.purgeInterval=1

    这表示保留最近 3 个快照,并每天检查一次是否需要清理旧的事务日志。

2. 快照日志(Snapshot Logs)

存在性:快照日志通常指的是 ZooKeeper 的数据快照文件,用于持久化存储某一时刻的数据状态。

默认存储位置:与事务日志相同,默认在 dataDir 指定的目录下。

日志名称:快照文件通常以 snapshot. 开头,例如 snapshot.1234567890

配置路径和存储策略

  • 配置路径:通过 dataDir 属性指定快照的存储目录。

    1
    dataDir=/var/lib/zookeeper/data
  • 存储策略:同样通过 autopurge.snapRetainCountautopurge.purgeInterval 配置快照的保留和清理策略。

3. 运行日志(Runtime Logs / 服务日志)

存在性:存在。

默认存储位置:默认在 ZooKeeper 的安装目录下的 logs 目录中,具体路径取决于安装方式。

日志名称:通常为 zookeeper.out 或者以日期命名的日志文件,如 zookeeper-2023-10-01.log,具体取决于日志框架的配置。

配置路径和存储策略

  • 配置路径:通过 log4j.appender.file.File 属性(如果使用 Log4j)或其他日志框架的配置文件指定日志文件的路径。

    示例(Log4j 配置):

    1
    2
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=/var/log/zookeeper/zookeeper.log
  • 存储策略:可以配置日志的滚动策略,例如按大小或按日期滚动,以及保留的日志文件数量。

    示例(Log4j 按大小和数量滚动):

    1
    2
    log4j.appender.file.MaxBackupIndex=10
    log4j.appender.file.MaxBackupFileSize=10MB

4. 启动日志(Startup Logs)

存在性:启动日志通常包含在运行日志中,记录 ZooKeeper 启动过程中的信息。

默认存储位置:与运行日志相同,默认在 logs 目录下。

日志名称:通常包含在 zookeeper.log 或者按日期命名的日志文件中。

配置路径和存储策略

  • 配置路径:与运行日志相同,通过日志框架的配置文件指定。

  • 存储策略:同样通过日志框架的滚动和保留策略进行配置。

总结与配置示例

以下是一个典型的 ZooKeeper 配置文件 zoo.cfg 中关于日志路径和存储策略的示例配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 数据目录,用于存储快照
dataDir=/var/lib/zookeeper/data

# 事务日志目录
dataLogDir=/var/lib/zookeeper/log

# 自动清理策略
autopurge.snapRetainCount=3
autopurge.purgeInterval=1

# 如果使用 Log4j,可以在 conf/log4j.properties 中配置运行日志
# 示例 log4j.properties 配置:
# log4j.rootLogger=INFO, CONSOLE, ROLLINGFILE
# log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
# log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
# log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p %c{6} - %m%n
# log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
# log4j.appender.ROLLINGFILE.File=/var/log/zookeeper/zookeeper.log
# log4j.appender.ROLLINGFILE.MaxBackupIndex=10
# log4j.appender.ROLLINGFILE.MaxBackupFileSize=10MB
# log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout
# log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p %c{6} - %m%n

注意事项

  1. 权限:确保 ZooKeeper 进程对配置的日志和数据目录具有读写权限。
  2. 磁盘空间:定期监控日志和快照占用的磁盘空间,避免因日志过多导致磁盘空间不足。
  3. 性能影响:将 dataDirdataLogDir 配置在不同的物理磁盘上,可以提高 ZooKeeper 的性能,因为事务日志的写入通常是顺序写,而快照的读写可能是随机访问。

通过合理配置 ZooKeeper 的各类日志路径和存储策略,可以提高系统的稳定性、可维护性和性能。


蚂蚁🐜再小也是肉🥩!


Zookeeper日志详解
http://heibanbai.com.cn/posts/6a9ff91b/
作者
黑伴白
发布于
2024年11月12日
许可协议

“您的支持,我的动力!觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付