本文讲述了在苍穹平台中遇到日志查询不到数据的问题时,如何通过逐步排查logstash、es、kafka服务及配置文件来定位问题。首先确认服务状态,再检查对平台的调整可能影响日志,然后查看log.conf配置和kafka、es的状态,最后通过模拟操作验证问题。强调了解基础原理是解决问题的关键。
问题:搭建苍穹,或者从其他服务迁移苍穹,访问monitor,日志查询不到数据。
分析:
1. 日志服务涉及到服务:logstash, es,kafka。首先需要确认下这三个服务是否正常,可使用命令service logstash status查看服务是否处于running状态。(注意:要留意有没有报异常,有可能服务运行中,但后台有异常的情况)
2. 日志服务排查完, 还是查不到日志,首先要想下,最近对苍穹做过什么调整,会不会造成日志查询不到。
3. 苍穹日志配置位置:mc-> 环境公共配置项 -> 搜log.conf。 日志简单原理:苍穹使用log打印的日志,会写入到kafka中,再有logstash从kafka中获取日志,写入到es中。
4. 首先先确认log.conf的配置文件是否正常。访问monitor -> 注册中心,选中服务,点击查看系统属性,搜索log.conf。查看topic和kafka服务是否正确。
5. 既然了解基本原理,那么首先要确认kafka是否正常。进入到kafka的bin目录(苍穹安装目录/elk/kafka/kafka_2.12-2.1.1/bin),执行命令./kafka-topics.sh --list --zookeeper ip:port 查询topic有哪些,服务正常的话,会产生{{clusterName}}-log的topic,clusterName为集群编码。然后再获取跟topic有没有生产者。
6. 第五步若获取信息不对,则可定位为kafka的问题,那么需要检查mc上关于kafka的配置是否正确。(注意:这里的IP,要跟kafka监听的IP一致,查看kafka服务下的server.properties文件,搜listeners)
6. 若kafka服务正常,那么可假设服务能正常输出日志的。再分析es是否能正常输出。正常情况下es会每天产生一个苍穹日志索引,在浏览器访问 http://IP:9200/_cat/indices 查询是否产生索引。
7. 若es不能正常产生索引文件,则分析logstash是否正常。由于logstash是将kafka的日志转存到es中,那么对于logstash的排除也就相对简单些。首先确认服务是running中,第二,查看日志文件logstash-plain.log,只要从kafka中读取到消息,则会产生日志。tail -f logstash-plain.log 。若无日志产生,那就是苍穹没有写入日志到kafka中。需要分析为什么日志没有传进来。
8. 模拟操作:使用kafka模拟生产者发消息,有logstash消费,再观察es是否产生对应的索引。也是可以定位问题原因的。
kafka发消息命令,进入到kafka/bin目录下。执行: ./kafka-console-producer.sh --topic clustername-log --broker-list IP:9092 (clustername为集群编码,IP为kafka监听IP),连接后,随便发送内容,然后再访问curl http://IP:9200/_cat/indices 查看索引是否生成了。
总结:针对monitor的日志分析,要灵活处理,只要了解了基础原理,就能逐个功能排除确认。对于任何问题,也就能迎刃而解了。
推荐阅读