完整的解决方案:把ELK和springboot的日志解决方案弄明白

优采云 发布时间: 2022-11-01 06:37

  完整的解决方案:把ELK和springboot的日志解决方案弄明白

  日志监控解决方案

  日志在我们的系统故障定位中起着关键作用。我们的框架代码、系统环境、业务逻辑一般都会产生一些日志。我们通常将这些日志记录下来后采集,以便在需要时进行查询和检索。ELK是开源领域流行且成熟的一站式日志解决方案。

  记录采集程序

  日志采集的代理实际上是一个程序,将数据从源传递到目的地。我们将使用具有数据订阅功能的中间件作为日志采集、分析、存储的中间管道,实现解耦。目前业界比较流行的日志采集解决方案主要有Flume、Logstash、FileBeat和Fluentd

  等待。

  水槽

  Flume 是一个高可用、高可靠、分布式的海量日志采集、聚合和传输系统。Flume 支持在日志系统中自定义各种数据发送者,可以采集数据。Flume 提供了简单处理数据并写入各种数据*敏*感*词*(如文本、HDFS、HBase 等)的能力。Flume的核心是从数据源(Source)采集数据,然后将采集到的数据发送到指定的目的地(Sink)。

  为了保证投递过程的成功,在将数据发送到目的地之前,会将数据缓存在通道中。当数据真正到达目的地后,Flume 会删除缓存的数据。整个过程如下图所示。

  ​​​

  Flume的数据流是通过事件(Event)来运行的,事件是通过对传输的数据进行封装而得到的,是Flume中数据传输的基本单元。在文本文件的情况下,事件通常是一行记录。事件携带日志数据和标头信息。这些事件由代理外部的数据源生成。当 Source 捕获事件时,会执行特定的格式化,然后 Source 会将事件推送到(单个或多个)Channel 中。通道可以被认为是一个缓冲区,它将保存事件直到*敏*感*词*完成处理事件。Sink 负责持久化日志或将事件推送到另一个 Source。

  日志存储

  Logstash 是一个分布式日志采集框架。开发语言是 JRuby。它经常与 Elasticsearch 和 Kibana 结合使用,形成著名的 ELK 技术栈。

  Logstash 非常适合采集 的日志数据。它可以与ELK结合使用,也可以单独作为日志采集软件使用。当 Logstash 单独出现时,它可以将日志存储在各种存储系统或临时中转系统中,例如 MySQL、Redis、Kafka、HDFS、Lucene、Solr 等,不一定是 Elasticsearch。

  Logstash 在设计上非常规范,它收录三个组件。因为架构比较灵活,如果不想用Logstash做存储,也可以连接Elasticsearch,也就是上面提到的ELK。Logstash 的 采集 流程如下图所示。

  ​​​

  文件节拍

  FileBeat 和 Logstash 一样,是一个日志采集和处理工具,它基于原创的 Logstash 源代码。与 Logstash 相比,FileBeat 更轻量级,占用资源更少。FileBeat 涉及两个组件:Prospector 和 采集器(Harvester)。FileBeat 用于读取文件并将事件数据发送到指定的输出。FileBeat 的工作流程如下: 打开 FileBeat 时,会启动一个或多个检测器来检测您设置的日志路径或日志文件。找到每个日志文件后,FileBeat 将启动 采集器。每个 采集器 读取日志文件的新内容并将数据发送到 libbeat,libbeat 聚合这些事件并将聚合数据发送到您设置的外部*敏*感*词*。下面是 FileBeat 的官方*敏*感*词*。

  ​​​

  流利的

  业界一直使用 ELK 来管理日志。众所周知,Logstash 是一个具有实时通道能力的数据采集引擎,但与 Fluentd 相比,性能略逊一筹,所以逐渐被 Fluentd 取代,ELK 也变成了 EFK,同时 Fluentd 加入了 CNCF作为云原生成员。

  Fluentd 是一个开源数据采集器,专为使用 JSON 数据格式处理数据流而设计。它采用插件式架构(几乎所有源存储和目标存储都有插件),具有高扩展性、高可用性,实现高可靠的信息转发。Flueted由三部分组成,如下图所示。

  ​​​

  

  ● Input:负责采集数据或主动抓取数据,支持Syslog、HTTP、File tail等。

  ● 缓冲区:负责数据采集的性能和可靠性。还有不同类型的缓冲区,例如可以配置的文件或内存。

  ● 输出:负责将数据输出到目的地,例如文件。

  ELK日志解决方案 ELK简介

  ELK 是软件集合 Elasticsearch、Logstash 和 Kibana 的缩写。这三个软件及其相关组件可以创建一个*敏*感*词*的日志实时处理系统。ELK 已经成为目前最流行的中心化日志解决方案。在最简单的 ELK 方案中,只有 Logstash 通过输入插件从多个数据源获取日志,然后过滤插件进行数据结构处理,然后将数据输出存储在 Elasticsearch 中。通过 Kibana 展示,下面是 ELK 最典型的架构图。

  ​​​

  该架构适用于简单场景,适合初学者搭建和使用。在之前的log采集解决方案中,我们知道Logstash的采集存在性能瓶颈,所以通常在log采集端使用FileBeat作为log采集Agent。下面简单介绍另一种ELK日志改进方案——FileBeat+ELK,流程如下图所示。

  ​​​

  ● FileBeat:获取服务器上指定路径下的日志文件,并将这些日志转发给Logstash实例进行处理。FileBeat 旨在提高可靠性并减少延迟。在微服务所在的服务器上部署FileBeat,主要用于采集微服务日志文件,并将数据采集输出到指定的文件或队列服务器。

  ● Logstash:可以作为服务器端的数据处理管道,从多个来源中提取数据,转换后存储在Elasticsearch中。简单来说,就是一个采集、分析、过滤日志的工具。从文件系统或服务器队列聚合、过滤和输出到 Elasticsearch 存储。

  ● Elasticsearch:是一个开源的分布式搜索引擎,通常用作日志存储服务器,提供采集、分析、存储数据三种功能。

  Kibana:它是一个基于 Web 的图形界面,可以读取 Elasticsearch 上的集群数据,显示 Web 查询页面,并提供历史日志数据查询,用于搜索、分析和显示存储在 Elasticsearch 中的日志数据。

  ELK 在微服务架构中的局限性

  传统ELK方案最大的优势在于对整个日志流程的支持。从log采集、storage到display的所有链接都是“开箱即用”的,但是在微服务项目的实际使用中还是存在的。一些问题。

  ● 如果每台服务器都想享受ELK日志方案,需要在宿主机上安装代理客户端,而采集器像Logstash本身占用内存较多,存在与宿主应用抢占资源的问题。

  ● ELK的log采集机制是使用Agent从磁盘读取增量日志文件,

  但是,磁盘读取会遇到资源消耗增加、日志读取速度慢等问题。

  ● 每次部署新的服务集时,都需要部署相关的Agent。后期Agent升级和配置环境的运维会出现一系列问题。

  Spring Boot 的日志记录解决方案

  针对ELK的上述问题,我们有必要在基于Spring Boot框架的微服务应用系统中采用更高效、更简单、更轻量级的日志解决方案。

  我们知道 Spring Boot 使用 LogBack 作为默认文件系统,而 LogBack 有一个非常强大的 Appender 机制,可以将日志动态输出到指定的 Appender,这样在记录 采集 时,就不需要每个微所有服务安装了Agent,日志可以通过第三方消息中间件异步转发,无需将日志放在磁盘上,避免了为每个主机安装LogAgent采集进程;同时,可以使用自定义修改后的LoggerAppender,通过Nexus私服更新,应用系统可以在编译期间完成日志LogAppender的升级,避免了每次修改升级Agent代码应用程序集。同时,对于 Logger append 的 sink 写入端,可以选择Kafka或Redis等高性能中间件作为高并发日志系统的缓存,避免影响ELK服务的稳定性。下面是基于Spring Boot采集日志、采集日志、存储日志的改进方案架构图。

  ​​​

  自定义 Appender 配置加载

  以下是 Logback.XML 中的自定义 Appender 实现,使用异步 Appender。这样服务调用LogBack打印日志时,不会阻塞当前应用代码继续执行正常逻辑。

  

  自定义 Appender 的实现

  根据上面Logback.XML的配置,我们配置了一个Kafka类型的Sink输出Appender:MqAppender。具体代码实现如下。

  ​​​

  ​​​

  在这个自定义的 Appender 类中,有两个核心方法:init 方法和 append 方法。init方法的主要作用是完成当前应用程序所需的资源初始化;append方法是日志截取方法,BaseMqProducer类是初始化时构造的Kafka-Producer客户端对象,会调用send方法将构造的日志消息发送到Kafka中间件。需要注意的是,在append方法中,需要过滤掉Kafka自己的日志输出,避免死循环。限于篇幅,我们只分享Append的思路,Kafka的BaseMqProducer的具体实现方法不再赘述。

  日志消费服务

  日志消费服务的主要功能是根据Topic和日志消息负载信息(PayLoad)将Kafka采集到的日志分发到不同的Elasticsearch索引中。下面是Kafka客户端日志消费服务的自动配置代码。

  ​​​

  ​​​

  以下是Kafka的日志消费代码。@KafkaListener 注解用于消费 TopicPattern 下日志中的数据。MqHandler可以做消息过滤、预警、聚合、数据处理等,最终将消息发送到Elasticsearch存储引擎。

  ​​​

  日志存储

  对于日志存储,Spring Boot 2.2.0 已经兼容 Elasticsearch 7.x,可以直接引入 Elasticsearch 的 Maven 依赖。日志的实体类定义代码如下所示。

  ​​​

  下面是持久化的实现逻辑。

  ​​​

  日志展示需要启动Kibana,默认地址为:5601。浏览Kibana界面,Kibana会自动检测Elasticsearch中是否存在索引名,通过Filter搜索框可以检索到日志,如下图.

  ​本文讲解的内容是服务监控治理和日志监控方案。如果你觉得对你有帮助,可以点赞关注!

  解决方案:SEO SpyGlass搜索引擎工具

  搜索引擎优化望远镜

  (搜索引擎定位软件)是一款简单,方便易用的软件,可以搜索引擎定位,EO SpyGlass中文版的创建收录各种网站与您的竞争对手,需要下载的用户连接它。

  SEO望远镜软件知识兔简介

  SEO SpyGlass是一款简单,方便且易于使用的软件,可以搜索引擎位置。SEO SpyGlass创建一个详细的数据报告,将每个网站与您的竞争对手联系起来,以及他们的页面评级,Alexa评级,锚文本,页面标题,主题报告和其他信息

  

  SEO望远镜软件以知识兔为特色

  1、输入您的竞网站网址,对网站进行全面分析;

  2、分析内容包括对竞争网站的分析及其自身网站的分析;

  3.可进行自动分析。

  SEO望远镜使用说明知识兔子

  

  1. 下载SEO望远镜中文版并安装此网站数据分析工具

  2. 输入要分析的网站网址

  点击下载

  下载体验

  点击下载

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线