为什么要使用到elk实现分布式日志收集?
在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的Bug的话,需要在每个节点上使用传统的命令方式查询,这样效率非常低下。
因此我们需要集中化的管理日志,ELK则应运而生。
传统方式服务器搜索日志命令:
elk采集流程:
Elk E=Elasticsearch
L=Logstash
K=Kibana连接到我们ElasticSeach图像化界面查询日志
Elk+kafka
Elk采集日志的原理:
1.需要在每个服务器上安装Logstash(搬运工)
2.Logstash需要配置固定读取某个日志文件
3.Logstash将我们的日志文件格式化为json的格式输出到es中
4.开发者使用kibana连接到ElasticSeach查询存储日志内容。
为什么需要将日志存储在ElasticSeach而不是mysql中呢 ?
ElasticSeach 底层使用到倒排索引 搜索效率高
1.如果单纯的使用elk的话,服务器节点扩容 需要每个服务器上安装我们Logstash
步骤比较冗余。
2.Logstash读取本地日志文件,可能会对本地的磁盘io性能会有一定影响。
elk+kafka原理:
1.springboot项目会基于aop的方式拦截系统中日志
日志(错误日志)
错误日志:异常通知
请求和响应日志信息—-前置或者环绕通知。
2.将该日志投递到我们kafka中注意该过程一定要是异步的形式。
3.Logstash 数据源—-kafka 订阅kafka的主题 获取日志消息内容
4.在将日志消息内容输出到es中存放
开发者使用Kibana连接到ElasticSeach 查询存储日志内容。