分布式日志采集(elk+kafka)

目的

        分布式系统的日志,每个服务器节点web服务都会产生各自的日志文件,如果想要整合或者排查日志,就需要到每个节点下逐一查看日志文件这样会比较麻烦。所以需要一个方案将日志采集放到一个位置进行存储和查询。 这里就可以使用elk+kafka的方式解决。

       elk(elasticsearch、logstash、kibana)的首字母缩写。elasticsearch用来存储采集的日志数据,logstash负责采集日志,kibana作为es的可视化分析查询工具。

原理

eIk 采集日志的原理:

1.需要在每个服务器上安装 logstash

2.logstash需要配置固定读取某个日志文件

3.logstash将我们的日志文件格式化为json 的格式输出到es 中

4.开发者使用kibana连接到es中查询存储日志内容

elk+kafka 原理:

1.springboot 项目会基于 aop 的方式拦截系统中日志

日志(错误日志)
错误日志:异常通知

请求与响应日志信息---前置或者环绕通知。
2.将该日志投递到我们 kafka 中注意该过程一定要是异步的形式

3.Logstash 数据源---kafka 订阅 kafka 的主题获取日志消息内容

4.在将日志消息内容输出到es 中存放

5.开发者使用Kibana 连接到 ElasticSeach 查询存储日志内容

elk+kafka的环境搭建

elaticsearch和kibana的安装使用的docker,也可以自己下载安装包进行安装

elaticsearch

安装elasticsearch
1.下载 ES 镜像问题
docker pull elasticsearch
2.运行ESdocker run -it --name elasticsearch -d -p 9200:9200 -p 9300:9300 -p  5601:5601 elasticsearch

3. 测试运行结果
http://192.168.163.129:9200/

如果出现以下报错就是创建的es容器有冲突,需要删除已有的es容器或者镜像重命名

logstash

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

4.bin/logstash-plugin install logstash-input-kafka

5.bin/logstash-plugin install logstash-output-elasticsearch

配置文件mylog.conf:

 启动:

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#

kafka

这里我们用window版本的,如果是在Linux环境。可以自行了解安装

kafka依赖zookeeper,所以需要先装zk:

 演示代码

演示使用springboot框架,aop前置通知采集请求信息入kafka

kafka的spring-boot配置信息:

  浏览器访问:127.0.0.1:8881/项目名称/getMeberl,aop前置通知会把请求信息封装投递给kafka,logstash从kafka里自动拿到数据存入到es中,使用kibana查看存储的数据,如图:

 复制出来放到格式化工具里

为什么要使用es存储日志

   es是一种搜索服务器,底层是基于Lucene,支持倒排索引,做搜索的效率是特别高的。基于业务需要还是可以考虑选择Mongdb、Redis、Mysql。后面会更新一篇flume采集入hdfs做大数据存储、分析、统计

为什么elk要结合kafka

1.如果单纯的使用 elk 的话,服务器节点扩容 需要每个服务器上安装我们Logstash步骤比较冗余

2.Logstash 读取本地日志文件,可能会对本地的磁盘 io 性能会有一定影响。

优化

        图中可以看出请求触发aop,前置通知中往kafka里send消息,如果kafka出现异常、网络抖动都会影响主流程的一个请求响应效率和是否出异常的问题。所以需要把数据放到内存队列中,然后开一个线程,在另一个线程里循环从内存队列里取数据入kafka这样不会影响请求的正常执行业务和响应。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: elk+kafka+filebeat 是一种常见的数据处理和分析架构。ELK指的是Elasticsearch、Logstash和Kibana,它们分别用于数据存储、数据处理和数据可视化。Kafka是一个分布式流处理平台,用于处理大量的实时数据流。Filebeat是一个轻量级的日志数据收集器,用于将日志数据发送到ELKKafka中进行处理和分析。这种架构可以帮助企业实现实时数据处理和分析,提高数据的价值和利用率。 ### 回答2: Elk(Elasticsearch,Logstash和Kibana)是一个开源的数据分析平台,其可帮助组织收集、分析、可视化并作出更明智的决策。Elk框架大致包含三个主要组成部分:Elasticsearch、Logstash和Kibana。其中,Elasticsearch是一个基于Lucene的搜索和分析引擎,Logstash是一种数据收集引擎,而Kibana则为数据可视化提供了一种界面。 Kafka 是一个分布式的消息发布订阅系统,其主要目的是为服务之间的通信提供高吞吐和低延迟的解决方案。Kafka 的核心设计思想是基于发布订阅模式,确保系统的整个数据流可以持久化存储,同时支持高效和可扩展的水平拓展。 相比之下,Filebeat 是一个轻量级的日志收集器,用于从多个服务器上收集和转发日志数据。该工具提供了一个快速且灵活的方法来读取多个日志文件,包括系统日志、应用程序日志和安全日志等。由于其轻量化的特性,Filebeat 可以提供高性能的数据收集,并消耗较少的系统资源。 底层架构上,Filebeat 可以将日志数据转发到 Kafka 以供后续处理,同时,Kafka 可以将处理完成的数据转发到 Elasticsearch 索引中,从而让 Kibana 提供友好的用户界面进行可视化和分析。在这个集成方案中,每个组件都贡献其自身的优势,从而实现了一个用于日志收集、处理、存储和展现的完整系统。 ### 回答3: Elasticsearch、Logstash、Kibana和Beats,简称ELK,是一个开源的数据收集和分析平台。随着互联网的不断发展,日志数据的产生量已经变得越来越大,ELK逐渐成为了企业处理和分析大数据的主流工具之一。其中,Kafka和Filebeat则是ELK平台中重要的两个工具。 Kafka是一种高吞吐量的分布式发布-订阅消息系统,它可以处理消费者规模不断增长的数据流,实现消息的持久化、数据复制、分区和提交等功能。在ELK平台中,Kafka用于将采集过来的日志数据进行传输,具体流程如下: 首先,用Filebeat采集产生的日志数据,将数据推送到Kafka中;然后,从Kafka中取出数据,通过Logstash进行数据过滤、解析和清洗;最后,Logstash将清洗后的数据推送到Elasticsearch中进行存储和分析。 Filebeat是一个开源的轻量级数据收集工具,可以采集不同服务器上的日志数据,并将数据发送到Kafka中。Filebeat具有占用资源低、运行效率高等优点,是在ELK平台中数据采集的重要工具。 综上所述,Kafka和Filebeat作为ELK平台中重要的数据收集和传输工具,可以帮助企业快速、高效地收集和分析海量的日志数据,实现企业数据的全面监控和分析,提高企业的运营效率和竞争力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值