由于Kafka集群的运维兄弟没对线上环境Zookeeper做处理,因此 zookeeper.out
文件会不断增大,没几天时间,文件已经有6G。故而需要做一些改进,避免这种情况。
目前,咪咕Kafka及Zookeeper是分离部署的(即:未使用Kafka本身自带的Zkper),故而要想修改Zookeeper的日志,需如下操作:
准备工作
1 执行如下命令,找到Kafka/Zookeeper:
ps -ef|grep kafka
# 如果是找zookeeper进程,那么就把kafka替换成zookeeper
结果展示如下:
migu 141395 1 91 Jan08 ? 9-23:31:12 /usr/java/jdk1.8.0_131/bin/java -Xms30g -Xmx30g -XX:PermSize=64m -XX:MaxPermSize=128m -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Djava.awt.headless=true -Xloggc:/usr/local/kafka/bin/../logs/kafkaServer-gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M
由结果可知,Kafka目录为 /usr/local/kafka
,同理,也可找到Zookeeper目录为 /usr/local/zookeeper
。
2 执行如下命令,查看Zookeeper状态:
[root@5fe1601 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower
如上所示,该实例是一个 follower
。需注意,如果Zookeeper集群只有3个实例,那么日志修改务必先修改 follower
节点的配置,再修改 leader
节点的配置,否则可能会导致问题。
修改日志
下面我们来修改日志输出:
1 在 conf/log4j.properties
中,找到:
# Define some default values that can be overridden by system properties
zookeeper.root.logger=INFO, CONSOLE
改为:
# Define some default values that can be overridden by system properties
zookeeper.root.logger=INFO,ROLLINGFILE
这样,日志就会打印到 ${zookeeper.log.dir}/${zookeeper.log.file}
,即: ./zookeeper.log
。也可根据需要,修改 zookeeper.log.dir
及 zookeeper.log.file
的值,在文件 conf/log4j.properties
中。
2 修改 bin/zkEvn.sh
,找到:
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
ZOO_LOG4J_PROP="INFO,CONSOLE"
fi
修改为:
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fi
3 【可选】此时,如果重启Zookeeper,就会发现在当前目录生成 zookeeper.log
文件,但此时已然会生成一个 zookeeper.out
文件,内容为空。虽然不影响使用,但是不优雅,如何解决该问题呢?只需在 bin/zkServer.sh
中:
3.1 注释如下内容:
# _ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper.out"
3.1 将如下内容:
nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}"
"-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
-cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
修改为:
nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}"
"-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
-cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" >&1 < /dev/null &
3.3 执行如下命令,重启Zookeeper:
zkServer.sh restart
这样,Zookeeper就不会再向zookeeper.out文件中打印日志了。
4 同样的操作,修改Zookeeper集群中的其他Zookeeper实例,注意:建议在最后修改 leader
节点 ,避免修改日志中途有额外的选举操作,影响线上性能。
参考文档
Zookeeper 日志输出到指定文件夹:https://www.cnblogs.com/zhwbqd/p/3957018.html
Zookeeper Log4j日志输出修改:http://yangyoupeng-cn-fujitsu-com.iteye.com/blog/1922459
Zookeeper在线迁移:http://blog.csdn.net/lirenzuo/article/details/71080063
---------------END----------------
后续的内容同样精彩
长按关注“IT实战联盟”哦
注意:本文归作者所有,未经作者允许,不得转载