Flink 替换 Logstash 解决日志收集丢失问题

news2024/9/27 23:33:04

在某客户日志数据迁移到火山引擎使用 ELK 生态的案例中,由于客户反馈之前 Logstash 经常发生数据丢失和收集性能较差的使用痛点,我们尝试使用 Flink 替代了传统的 Logstash 来作为日志数据解析、转换以及写入 ElasticSearch 的组件,得到了该客户的认可,并且已经成功协助用户迁移到火山。目前,Flink 已经支持该业务高峰期 1000+k/s 的数据写入。

本文主要介绍 Logstash 的使用痛点以及迁移到 Flink 的优势,探索在 ELK 生态中,Flink 替换 Logstash 的更多可能,推动用户从 EL(Logstash)K 迁移到 EF(Flink)K。

Logstash 简介

ELK 是一套开源的日志及数据监控和分析系统,主要是三个组件的简称:Elasticsearch, Logstash and Kibana,功能涵盖了从日志收集、解析、查询、分析、可视化等完整的解决方案。

上图描述了 ELK 里各组件的关系,基于 libbeat 框架的各种 beats 工具将日志及各种数据进行收集,可以直接写入 ES,也可以先写入到 Logstash 进行解析和处理再写入到 ES。如下图所示,Logstash 主要包括三个部分:

  • 输入插件:负责从各种不同的 source 读取数据,如文件、beats、Kafka等;

  • 过滤插件:负责按照指定的配置修改和处理数据,如 grok 插件可以从固定日志格式中提取对应信息,drop 插件可以丢失诸如 debug 日志等能力;

  • 输出插件:负责将结果数据输出,如将处理后的日志数据写入 ES 中。

Logstash 使用痛点

数据易丢失

Logstash 默认使用内存作为写入数据的缓存,一旦发生重启或者异常退出的时候,这部分数据就会发生丢失。虽然 Logstash 也提供了持久化队列来解决这个问题,但是由于数据仍然是写入机器磁盘中,当发生单机故障的时候,数据同样也会丢失。同时,数据周期性的落盘也会对数据的处理性能带来巨大的影响。

排查成本高

当日志数据格式不符合规范(如非标准 Json)造成丢失数据较多的情况时,需要在数据收集、数据解析、写 ES 等全链路排查数据丢失的原因,一般需要查看机器日志,收集、处理节点较多的时候,排查成本也比较高。

除了日志数据本身不规范外,当由于其他原因导致数据不能正确处理的其他情况,比如写 ES 各种异常,这部分数据也极易发生丢失,也需要查看日志进行跟踪和定位。虽然 Logstash 单独提供了死信队列来处理这些情况,但是在这个链路丢失的数据仍然有排查的成本。

收集、解析性能差

Logstash 提供的各种插件基本都是用 Ruby 实现的,虽然 Logstash 本身也运行在 Java 的 JVM 上,并通过 JRuby 将各种插件也跑在 JVM 上,但是相比 Flink 100% Java 语言运行和执行效率会更低一些。

当开启持久化队列(为了保证数据尽可能少丢失),由于数据需要频繁写磁盘,Logstash 处理性能会进一步降低。同时,Logstash 处理性能较差也是业界的一大共识。

不支持资源动态扩缩容

由于 Logstash 本身的资源部署不支持动态扩缩容,会造成低峰期较大的资源浪费。在该客户的案例中,业务高峰期的日志数据和活动期间的日志数据是在低峰期数据的 24 倍左右(高峰期 100w+ QPS,低峰期 50k QPS),且呈周期性变化。因此实际在业务低峰期,使用很少的资源就能够保证日志数据的收集和解析,所以支持资源动态扩缩容是必须且必要的。

Flink 使用优势

数据处理支持“at-least-once”语义

Flink 基于状态引入分布式 checkpoint 机制,用于保证数据消费的“at-least-once”语义。其中状态保存通过定期持久化到远端可靠存储(HDFS)来保证状态不丢失。

需要说明的是,Flink 本身基于状态是能够做到严格意义上的“exactly-once”语义的,即消费和处理的不丢不重。如果 ES 支持了主键的配置,也就是相同主键写入是幂等的情况下,则能在全链路做到“exactly-once”语义。

在该客户的案例中,我们通过工具读 Kafka 来统计写入条数,跟实际 Flink 写入 ES 的条数进行对比,证明了数据消费的“at-least-once”语义,解决了客户在友商上使用 Logstash 经常发生数据丢失的痛点。

灵活的异常数据处理

对于 Kafka 中解析失败的数据(比如格式为非 Json 的数据),在该客户的案例中,我们支持了这部分的异常数据写入独立的 ES 索引,同时标识数据写入原因(非标准 Json);对于写 ES 异常失败的数据,我们同样会将这部分数据写入独立的 ES 索引,并且记录写 ES 失败的原因,比如字段数超 1000,数据类型和模板定义的不一致等。

可以方便用户对异常日志数据做治理,如该客户推所有的上游业务日志标准 Json 化写入 Kafka 等。相对的,在该客户使用原友商的 Lostash 写入 ES 的时候,这部分的数据丢失不仅不易排查(甚至不易知晓),而且也难以治理(丢失了写 ES 失败的原因)。

高吞吐、低延迟的处理性能

Flink 作为当前最热的流式处理引擎,支持高吞吐、低延迟的处理日志数据,对数据处理能够达到秒级的延迟且经过业内在其他 Kafka 数据更复杂处理场景的大量验证,稳定而可靠。

资源自动扩缩容

在字节 Serverless Flink 中,我们也将支持资源随着写入 QPS 的动态调整,能够节省较大的资源。目前,该功能已经在字节内部得到了实际验证,在资源利用上取得了较大的收益。

更复杂的数据分析能力

相较于传统的 ELK 链路,在 Logstash 中对日志数据进行简单的数据格式匹配、内容替换等处理,Flink 还支持更强大的数据分析和处理,支持事件和业务处理时间,支持窗口计算、聚合、去重等。能对日志数据做更强大的数据处理和分析,将处理数据写入 ES 后,能实现 OLAP 数据查询和分析。

这部分数据处理和分析的能力也在字节内部得到了广泛的应用,为业务带来了很多实际的收益。

Flink vs Logstash 总结

对 Logstash 进行简单介绍后,结合该客户的案例,这里对比下 Flink 和 Logstash 的优劣:

Logstash

Flink

实际用户案例

数据一致性

数据消费和写入均可能发生数据丢失,且开启持久化队列后对性能影响较大

基于状态提供严格意义上的“at-least-once”语义

  • 友商 Logstash 写入 ES 发现数据丢失

  • 火山 Flink 经过和原始 Kafka 消息对比验证数据不丢失

异常数据处理

需要单独配置死信队列和对应的处理私信队列的逻辑,且处理失败原因不易追踪

提供数据解析失败和写 ES 失败数据单独往独立索引写入的能力,且同时记录处理失败原因,方便上游对日志进行治理

  • 友商 Logstash Json 解析失败的数据丢失(没有单独配置死信队列)

  • 火山 Flink 异常数据单独写 ES 的 error index,可用于用户日志数据的治理(日志中台推日志数据 Json 化)

处理性能

Ruby 语言本身执行效率低,且开启持久化队列后性能下降明显

纯 Java 执行语言,在大数据处理场景得到了广泛的验证,具有高吞吐、低延迟的特点

  • 友商 Logstash 200 topic 使用资源 320 cu,数据存在丢失现象(未开启持久化队列),也大部分 topic 在高峰期均有延迟

  • 火山 Flink 200 topic 使用资源 390 cu,收集数据无丢失,且高峰期没有延迟

弹性扩缩容

(未来)提供自动弹性扩缩容机制,在业务低峰期节省资源和成本

  • 该客户业务在一天之内有几小时左右日志数据高峰期,其他时间均为低峰期日志特点,弹性扩缩容能节省资源,被客户看重

复杂数据分析

不支持,官方插件仅支持基本日志字段处理

提供基于处理时间和事件时间,窗口计算等强大的处理语义和逻辑

暂未使用

【火山引擎流式计算 Flink版】

火山引擎流式计算 Flink版是脱胎于字节跳动最佳实践的新一代全托管、云原生实时计算平台。一套代码轻松搞定流批一体,助力企业将大数据平台向云原生、实时化、智能化方向升级。

目前,流式计算 Flink版 新人首购专享活动正在进行中。注册用户首次购买 Flink 产品包年包月,即可享受首月4折优惠,欢迎咨询体验。

「了解更多产品信息」


参考资料

  1. ELK Introduction — Log Consolidation with ELK Stack 1.2 documentation

  2. Filebeat overview | Filebeat Reference [8.10] | Elastic

  3. How Logstash Works | Logstash Reference [8.10] | Elastic

  4. Persistent queues (PQ) | Logstash Reference [8.10] | Elastic

  5. http://thomaslau.xyz/2019/08/14/2019-08-14-on_logstash_quiz1/

  6. Mid-uh 对比(图表)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1243067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PasteNow for mac剪贴板工具

PasteNow 是一款简单易用的剪贴板管理工具,可帮助用户快速存储和管理剪贴板上的文本和图片内容。用户可以使用 PasteNow 软件快速将文本内容保存到不同的笔记或页面中,也可以方便地将剪贴板上的图片保存到本地或分享给其他应用程序。 此外,P…

Java互联网+医院智能导诊系统源码 自动兼容H5小程序、Uniapp

随着信息和通信技术的进步,智能和移动技术越来越普遍,尤其在医疗保健领域,一些新型卫生信息系统被不断开发出来支持医院和其他卫生保健组织的管理和运作。 智能导诊系统是嵌入到医院和医疗保健卫生中心 HIS系统中的一种专门导诊系统,通过智能语音交互的方式帮助用户完成导诊、分…

XC2303 PFM 升压 DC-DC 变换器 SOT23-3封装 体积小 外围简单 适合小电流产品

XC2303系列产品是一种高效率、低纹波、工作频率高的 PFM 升压 DC-DC 变换器。XC2303系列产品仅需要四个元器,就可完成将低输入的电池电压变换升压到所需的工作电压,非常适合于便携式1~4 节普通电池应用的场合。 电路采用了高性能、低功耗的参考电压电路结构&#xf…

深度学习常见激活函数:ReLU,sigmoid,Tanh,softmax,Leaky ReLU,PReLU,ELU整理集合,应用场景选择

文章目录 1、ReLU 函数(隐藏层中是一个常用的默认选择)1.1 优点1.2 缺点 2、sigmoid 函数2.1 优点2.2 缺点 3、Tanh 函数3.1 优点3.2 缺点 4、softmax 函数(多分类任务最后一层都会使用)5、Leaky ReLU 函数5.1 优点5.2 缺点 6、PR…

【JavaEE初阶】 JavaScript相应的WebAPI

文章目录 🌲WebAPI 背景知识🚩什么是 WebAPI🚩什么是 API 🎍DOM 基本概念🚩什么是 DOM🚩DOM 树 🍀获取元素🚩querySelector🚩querySelectorAll 🎄事件初识&am…

WordPress用sql命令批量删除所有文章

有时我们需要将一个网站搬迁到另一个服务器。我们只想保留网站的模板样式,而不需要文章内容。一般情况下我们可以在后台删除已发表的文章,但如果有很多文章,我们则需要一次删除所有文章。 WordPress如何批量删除所有文章 进入网站空间后台&a…

chrome F12 performance 性能分析

本文主要是介绍chrome F12 performance 性能分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧! 页面加载速度慢,到底是多少秒,瓶颈在哪里? 前端性能工具Chrome performance…

学生心目中的好老师

在教育的世界里,一个好老师可以改变一个学生的人生轨迹。他们不仅传授知识,更是引导学生发现自己的潜力,激发他们对未来的憧憬。那么,如何成为一名学生心目中的好老师呢? 拥有一颗热爱教育的心。深深的热爱着教育事业&…

TikTok美区本土店铺如何做好IP隔离?

为什么要进行IP隔离呢?因为我们无法在国内直接运营Shopee、TikTok、Lazada等平台的本土店,平台识别出店铺登录IP非本土IP,则容易导致店铺风控、被标记为伪本土店,影响店铺经营。 TikTok美区店铺的IP隔离方法和Shopee本土店一致&a…

数字人源码部署一定要找数字人源头工厂公司

今年入局数字人产业的公司都已经赚的盆满钵满,有很多播主还在叫嚣着数字人没用没用。可谓眼光短浅,典型的吃不到葡萄说葡萄说。没用的话,国内所有的互联网巨头为什么都在跑步进场呢。今天我们要讲的是数字人二级市场的产业,所谓二级市场就是中…

SWOT是什么意思?SWOT分析必备的10款软件,别说你还不知道!

在今天快速变化的商业环境中,保持竞争优势并做出明智的决策至关重要。无论你是经验丰富的高管、企业家还是专注的团队领导者,战略思维都是必不可少的。在这个过程中的一个重要工具是SWOT分析软件。 正确的SWOT分析工具可以决定商业战略是否能够创造有意…

Vue3-provide和inject

作用和场景:顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信 跨层传递普通数据: 1.顶层组件通过provide函数提供数据 2.底层组件通过inject函数获取数据 既可以传递普通数据,也可以使用ref传递响应式数据&#xff08…

Docker Swarm总结+service创建和部署、overlay网络以及Raft算法(2/3)

博主介绍:Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 🍅文末获取源码下载地址🍅 👇🏻 精彩专栏推荐订阅👇🏻…

Postman接口测试工具完整教程

前言 作为软件开发过程中一个非常重要的环节,软件测试越来越成为软件开发商和用户关注的焦点。完善的测试是软件质量的保证,因此软件测试就成了一项重要而艰巨的工作。要做好这项工作当然也绝非易事。 第一部分:基础篇 postman:4.5.1 1.安…

某基金公司赵哥“逆袭”了!!!

赵哥,在上海一家基金公司做运维主管。 平时工作的首要任务,就是保障公司各项信息系统的安全运行。 万一系统运行中出现了一些重要问题,他还要负责进行调查、记录与汇报... 总之,责任很重,该说不说,搞不好…

虚拟机系列:windows 虚拟机相关功能、组件梳理

一. 简介 英文名称中文名称说明Container容器Guarded Host受保护的主机利用远程证明创建并运行受防护的虚拟机Hyper-V├Hyper-V Management ToolsHyper-V 管理工具包含 GUI 管理工具和 Power Shell 的 Hyper-V 模块└Hyper-V PlatformHyper-V 平台├Hyper-V HypervisorHyper-V …

[C++ 从入门到精通] 13.派生类、调用顺序、继承方式、函数遮蔽

📢博客主页:https://loewen.blog.csdn.net📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉📢现…

程序员进阶高管指南,看懂工资最少加5k

从象牙塔毕业跨入社会大染缸,很多人都跟我谈过他们的职业困惑,其中有一些刚刚毕业,有些人已经工作超过10年。基本上是围绕着怎样持续提升,怎样晋升为高级管理者。那么这篇文章,我就来谈一谈程序员到高管的跃升之路。 …

XC3320 离线式、无电感交流输入线性稳压器 可替代KP3310 固定5V输出电压

XC3320 是一款紧凑型无电感设计的离线式线性稳压器。XC3320 可获得 5V输出电压。XC3320 是一种简单可靠的获得偏置供电的离线式电源解决方案。XC3320 集成了 650V 功率 MOSFET,启动控制电路,VDD 电压控制电路,AC 交流信号同步检测电路,低压差稳压器等。该…

vue3实现验证码校验的功能

📓最近想实现使用vue3实现一个简易的前端验证码校验的功能,就花了点时间实现了,这只是一个简易版的,但是用在项目中是没有啥问题的,废话不多说,先来看下最终实现的效果。 📓现在让我们来一步一步…