1,传统日志采集存在哪些问题?
2, 分布式+日志采集有哪些方案?
3,ElasticSearch+logstash+Kibana作用
4,ELK为何需要结合kafka
5,基于docker构建elk
6,springboot项目整合elk实现异步日志 采集
传统日志采集存在哪些缺点
在传统项目中,如果在生产环境,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的bug、的话,需要在每台节点上使用传统的命令方式查询,这样效率非常低,传统方式服务器搜索日志命令。
Elk E=
ElasticSeach(存储日志信息)
l Logstash(搬运工)
K Kibana连接到我们ElasticSeach图形化界面查询日志
Elk+kafka
ELk 采集日志的原理。
1,需要在每个服务器上安装Logstash
2,logstash需要配置固定读取某个日志文件
3,logstash将我们的日志文件格式转为json的格式输出到es中。
4,开发者使用kafka 连接到ElasticSearch 查询存储日志内容
为什么需要将日志存储在elasticSearch,而不是mysql
elasticsearch 底层使用倒排索引 搜索日志效率。
为什么需要使用elk+kafka
1,如果单纯的使用elk的话, 服务器节点扩容 需要每个服务器上安装我们的logstash步骤比较冗余。
2.Logstash 读取本地日志文件,可能会对本地的磁盘io性能会有一定的影响。
elk+kafka原理:
1,springboot项目会基于aop的方式 拦截系统中的日志。
日志(错误日志)
错误日志:异常通知
请求与响应日志信息: 前置或者环绕通知。
2,将该日志投递到我们kafka中, 注意该过程一定要是异步的日志。
3.logstash数据源---kafka订阅到kafka 的主题 获取日志消息内容。
4,将日志消息内容输出到es中存放。
开发者使用Kibana连接到ElasticSeach 查询存储日志内容
ELK=ElasticSeach+Logstash+Kibana,日志收集原理如下所示。
1、每台服务器集群节点安装Logstash日志收集系统插件
2、每台服务器节点将日志输入到Logstash中
3、Logstash将该日志格式化为json格式,根据每天创建不同的索引,输出到ElasticSearch中
4、浏览器使用安装Kibana查询日志信息
该方案的缺点: 就是每个服务器节点上都会安装Logstash座读写日志IO操作,可能性能不是很好,
Elk+kafka环境的构建
ElasticSeach(存储日志信息)
l Logstash(搬运工)
K Kibana连接到我们ElasticSeach图形化界面查询日志
Elk+kafka
kafka依赖于zk。
Zk环境
Kafka环境
ElasticSeach+Kibana
Logstash 配置订阅kafka主题
Springboot项目aop拦截日志
构建kafka环境
Win安装kafka
安装前环境要求
需要有jdk环境
先安装zk环境
- 先安装zk 解压zookeeper-3.4.14
- 进入到 \conf 修改:zoo_sample.cfg 为 zoo.cfg
修改配置文件:dataDir=F:/path/kafkaandzk/zookeeper-3.4.14/data - 进入到bin目录:zookeeper-3.4.14\bin
- zkServer.cmd
先安装kafka环境
- 解压kafka安装包
- kafka_2.13-2.5\kafka_2.13-2.5.0
启动和停止kafka
.\bin\windows\kafka-server-start.bat .\config\server.properties
修改server.properties
log.dirs=F:/path/kafkaandzk/kafka/kafka-logs
注意解压文件名称:去除 版本名称,不然再启动的时候有可能
构建es环境
elk+kafka
docker安装ES & Kibana
安装elasticsearch
- 下载ES镜像问题
docker pull elasticsearch - 运行ES
docker run -it --name elasticsearch -d -p 9200:9200 -p 9300:9300 -p 5601:5601 elasticsearch - 测试运行结果
http://192.168.163.129:9200/
注意:-p 5601:5601 是kibana的端口地址 (我这里kibana的container共用elasticsearch的网络,所以这样设置
安装Kibana
docker run -it -d -e ELASTICSEARCH_URL=http://127.0.0.1:9200 --name kibana --network=container:elasticsearch kibana
测试运行结果
http://192.168.163.129:5601/app/kibana#
logstash 同步到 elasticsearch
Logstash是一个开源数据收集引擎,具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地
Logstash输入数据源:
- 本地文件
- Kafka
- Redis/mysql
Logstash输出数据源: - Es
- Mongdb
- Redis
- Mysql
1.上传logstash-6.4.3.tar.gz到服务中
2.tar –zxvf logstash-6.4.3.tar.gz
3.cd logstash-6.4.3
- bin/logstash-plugin install logstash-input-kafka
- bin/logstash-plugin install logstash-output-elasticsearch
logstash-plugin.bat install logstash-output-elasticsearch
Kafka logstash配置文件
input {
kafka {
bootstrap_servers => "192.168.18.224:9092"
topics => "mayikt-log"
}
}
filter {
Only matched data are send to output.
}
output {
elasticsearch {
action => "index" #The operation on ES
hosts => "192.168.163.129:9200" #ElasticSearch host, can be array.
index => "my_logs" #The index to write data to.
}
}
启动 ./logstash -f ../config/kafka.conf
Elk整合实际项目
实际项目基于aop拦截日志,将请求日志写入到kafka中。