问题描述
业务侧反馈了一个诡异问题,有些日志通过容器的实时日志能够查到,但是通过聚合日志界面却找不到。而且找不到的还是时间比较前的,过了很久再查也是查不到,感觉是丢失了。
环境描述
环境是灵雀云,聚合日志功能是灵雀云自带的,跟日志组件相关的架构图如下:

问题排除
检查了kafka服务、lanaya服务都正常,日志也没有明显的报错。
查看kafka消息队列堆积情况,由于kafka启用了集群鉴权,故需先配置一下才能查:
# cat /tmp/consumer.properties
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="xxxxxxx~HHv";
然后到kafka目录下,查看由哪些group
cd /opt/kafka_2.12-2.2.1/bin
sh kafka-consumer-groups.sh --bootstrap-server 10.1.xxx.xxx:9092 --command-config /tmp/consumer.properties --list
根据查到的group,及之前在lanaya的研究,确定了哪个是业务日志使用的group,然后再查看堆积情况:
sh kafka-consumer-groups.sh --bootstrap-server 10.1.xxx.xxx:9092 --group alauda_log --command-config /tmp/consumer.properties --describe
发现LAG这列(也就是堆积数)存在很多的负值,截取部分结果如下:
TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID
ALAUDA_LOG_TOPIC 2 28770006 4516870 -24253136 lanaya@lanaya-597b7cc85c-b7vwn
ALAUDA_LOG_TOPIC 8 28770060 4516882 -24253178 lanaya@lanaya-597b7cc85c-b7vwn
ALAUDA_LOG_TOPIC 13 28770059 4516866 -24253193 lanaya@lanaya-597b7cc85c-b7vwn
ALAUDA_LOG_TOPIC 18 28971707 28971707 0 lanaya@lanaya-597b7cc85c-b7vwn
ALAUDA_LOG_TOPIC 15 28971758 28971758 0 lanaya@lanaya-597b7cc85c-86npq
ALAUDA_LOG_TOPIC 25 28769782 4516867 -24252915 lanaya@lanaya-597b7cc85c-86npq
ALAUDA_LOG_TOPIC 9 28971756 28971774 18 lanaya@lanaya-597b7cc85c-86npq
正常来说,LAG应该是0或者是正整数,出现负值应该是有问题的。先解决这个问题再看看。
问题解决
根据上面结果可以看出现在偏移量是有问题的。所以我想到的是把偏移量重置。和业务沟通过,不怕之前的数据丢失,所以我直接把偏移量重置到最新的:
sh kafka-consumer-groups.sh --bootstrap-server 10.1.xxx.xxx:9092 --command-config /tmp/consumer.properties --group alauda_log --reset-offsets --to-latest --execute --all-topics
–to-latest 请注意这个参数,如果你的业务要求尽量不丢日志,那就不要直接使用这个。具体的参数建议研究下。
这里还有个问题,当消费者还在消费的时候是无法reset队列的,所以需要先停止消费,然后再重置。
kubectl scale deployment lanaya -n cpaas-system --replicas=0
重置完成后再把lanaya启动,把上面命令里的0改为原来的副本数执行即可。
经过以上处理,业务侧观察了一段时间,没再出现日志丢失的情况,问题解决。
总结
- kafka队列深度异常导致日志收集出现缺少,一般都是kafka队列堆积导致,可以通过kafka-consumer-groups.sh –reset-offsets命令重置偏移量解决。
- 要先熟悉架构,不然太难了。我之前不熟悉这个,每查一步都要摸索很久,后面找到厂商要了个架构图才有了比较清楚的认识。
...