
# 中间件-Zookeeper日志
ZooKeeper是一个分布式的、开放源码的分布式应用程序协调服务，是将复杂且容易出错的分布式一致性服务封装起来，构成一个高效可靠的系统，并以一系列简单易用的原子操作提供给用户使用。ZooKeeper的主要功能包括配置维护、域名服务、分布式同步、组服务等。它提供了一个分布式独享锁、选举、队列的接口，主要用来解决分布式系统中一致性、可用性和并发控制等问题。
ZooKeeper 的日志主要分为三种：系统日志（System Logs）、事务日志（Transaction Log）和快照日志（Snapshot Log）：
1. 事务日志（Transaction Log）：
   - 事务日志记录了ZooKeeper集群中所有的事务操作，包括客户端的请求和服务器端的响应。
   
   - 事务日志的默认存储位置由zoo.cfg配置文件中的dataLogDir参数指定。如果没有配置dataLogDir，则事务日志将存储在dataDir指定的目录下。
   
   - 在事务日志的目录中，存在version-2的子目录，这个目录表示当前ZooKeeper使用的事务日志格式版本号。在该目录下，存在一系列名为log.\<txid\> 的文件，其中\<txid\>是一个十六进制数，表示写入该日志的第一个事务的ID。
   
   - 由于事务日志是二进制文件，不能直接通过文本编辑器查看其内容。可以使用ZooKeeper 自带的工具（如 zkServer.sh 脚本中的 printlog 命令）来查看和解析事务日志。
    
2. 快照日志（Snapshot Log）：
   - 快照日志是ZooKeeper 内存数据状态的序列化表示，它包含了ZooKeeper数据树在某个时间点的完整副本。
   
   - 快照日志的存储位置与事务日志相同，也在dataLogDir或dataDir指定的目录下。在快照日志的目录中，存在名为version-2的子目录，以及一系列名为snapshot.\<zxid\>的文件，其中\<zxid\>是一个十六进制数，表示触发快照时提交的最后一个事务的ID。
   
   - 与事务日志不同，快照日志是文本文件，可以使用文本编辑器直接查看其内容。由于快照日志包含了大量的数据，因此文件可能会非常大。
    
3. 系统日志（System Logs）： ZooKeeper的系统日志（也称为运行日志或应用日志）通常记录了ZooKeeper集群在运行过程中产生的各种信息，包括但不限于启动和停止信息、配置加载、节点连接和断开、请求处理、选举过程等。
   
#### 采集方法
使用ICAgent采集日志，接入前请参考[安装ICAgent（区域内主机）](https://support.huaweicloud.com/usermanual-lts/lts_02_0013.html)完成ICAgent安装。然后再通过采集ECS-文本日志方式将日志上报至LTS服务，详细操作请参考[云主机ECS文本日志接入LTS](https://support.huaweicloud.com/usermanual-lts/lts_04_1031.html)。
#### Zookeeper日志示例以及字段含义
```
2024-05-06 10:28:25,123 [myThread-1] INFO org.apache.zookeeper.server.ZooKeeperServer - Accepted socket connection from /192.168.1.100:56789
```
表1Zookeeper日志字段说明 
| 字段   | 说明                                                     | 示例                                                                                                           |
|:---|:---|:---|
| 时间戳  | 日志生成的具体时间，以yyyy-MM-dd HH:mm:ss,SSS的格式展示。               | 2024-05-06 10:28:25,123                                                                                      |
| 线程ID | 生成该日志的线程ID。                                            | myThread-1                                                                                                   |
| 日志级别 | 常见的日志级别包括DEBUG（调试）、INFO（信息）、WARN（警告）和ERROR（错误）等。       | INFO                                                                                                         |
| 日志来源 | 日志是由org.apache.zookeeper.server.ZooKeeperServer这个类生成的。 | org.apache.zookeeper.server.ZooKeeperServer                                                                  |
| 日志内容 | -                                                      | Accepted socket connection from /192.168.1.100:56789 ZooKeeper服务器接受了一个来自IP地址192.168.1.100、端口号56789的socket连接。 |
   
#### 日志位置
ZooKeeper的系统日志文件（也称为运行日志或应用日志）的位置通常取决于ZooKeeper的配置。可以通过log4j.properties文件中的配置来指定。如log4j.properties 中的zookeeper.log.dir配置。在log4j.properties文件中，您可以找到一个名为zookeeper.log.dir的配置项，它指定了日志文件的目录。例如：
```
zookeeper.log.dir=/path/to/zookeeper/logs
```
