91 分布式ELK 日志采集系统 Only matched data are send to output.

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环境

  1. 先安装zk 解压zookeeper-3.4.14
  2. 进入到 \conf 修改:zoo_sample.cfg 为 zoo.cfg
    修改配置文件:dataDir=F:/path/kafkaandzk/zookeeper-3.4.14/data
  3. 进入到bin目录:zookeeper-3.4.14\bin
  4. zkServer.cmd

先安装kafka环境

  1. 解压kafka安装包
  2. 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

  1. 下载ES镜像问题
    docker pull elasticsearch
  2. 运行ES
    docker run -it --name elasticsearch -d -p 9200:9200 -p 9300:9300 -p 5601:5601 elasticsearch
  3. 测试运行结果
    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输入数据源:

  1. 本地文件
  2. Kafka
  3. Redis/mysql
    Logstash输出数据源:
  4. Es
  5. Mongdb
  6. Redis
  7. Mysql

1.上传logstash-6.4.3.tar.gz到服务中
2.tar –zxvf logstash-6.4.3.tar.gz
3.cd logstash-6.4.3

  1. bin/logstash-plugin install logstash-input-kafka
  2. 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中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章