iLogtail 2.0 重大升级,端上支持 SPL

作者:太业

流式处理语言发展

  1. 早期流式处理概念:

    • 20 世纪 70 年代,编程语言如 APL 提供了对数组的流式操作,这可以看作是流式处理语法的早期形式。
    • 管道(Pipes)概念在 UNIX 系统中的引进使得可以通过命令行将一个命令的输出串联到另一个命令的输入。
  2. Java 的流(Stream)API:

    • Java 8 在 2014 年引入了 Stream API,为集合框架提供了一套流式处理语法。
    • Stream API 支持链式调用、延迟计算和内部迭代,使得流式处理与 Java 语言天然融合。
  3. 分布式流处理框架:

    • Apache Storm 和 Apache Samza 等框架提供了面向分布式流处理的语言和 API。
    • Apache Flink 和 Apache Beam 等更现代化的框架引入了支持事件时间(event time)概念和窗口化计算的复杂流式处理语法。
  4. 流批一体(Stream-Batch Unification):

    • Apache Beam 推广了一种新的模型,它允许开发者以相同的方式处理批处理和流处理。
    • 这一模型通过提供一套统一的流式处理语法和抽象,简化了在不同运行时(如Flink、Google Cloud Dataflow)上编写数据处理管道的过程。
  5. SQL 流式查询语言:

    • 流式 SQL 查询语言的发展,如 Apache Flink 的SQL API 和 KSQL(Kafka Streams 的 SQL 接口),使得用户可以通过类 SQL 语法编写复杂的流式处理逻辑。

日志与时序数据属于典型的半结构化或者弱结构化数据,在此基础上微软推出了 KQL(Kusto Query Language)、 Splunk 推出了 Splunk Processing Language,他们都有如下特点:

  1. 直观的数据搜索和探索:

    • 使用户能够通过简单的搜索语法直接查询数据,类似于如何在搜索引擎中查询信息。
  2. 强大的数据处理能力:

    • 考虑到了需要在大数据集上执行复杂的数据处理和转换操作,例如统计计算、数据分组和排序。
  3. 灵活的数据分析:

    • 提供了多种命令和函数,使用户可以灵活地分析数据,包括对时间序列数据进行可视化、识别模式和异常以及创建复杂的数据关联。
  4. 实时和历史数据处理:

    • 能够处理实时数据流和历史数据存储,使得用户能够进行即时监控以及过去事件的分析。
  5. 可扩展性:

    • 允许用户创建自定义搜索命令和脚本,从而扩展语法的功能,使其能够满足特定的业务需求。
  6. 易于学习和使用:

    • 设计注重于易用性,意味着即使是非技术用户也能够通过简单的查询和命令来分析数据。

在此背景下,SLS 推出了 SPL(SLS Processing Language)语法,以此统一查询、端上处理、数据加工等的语法,保证了数据处理的灵活性。iLogtail 作为日志、时序数据采集器,在 2.0 版本中,全面支持了 SPL 。

图片

SPL 和 iLogtail Pipeline 模式的对比

在支持 SPL 之前,iLogtail 在做数据解析的时候,使用的是 Pipeline 模式。

iLogtail 1.X Pipeline 模式

从整体来看,iLogtail 的文件采集模式可以划分为以下两种:

原生插件解析模式

图片

如上图中间部分所示,纯 iLogtail 的核心处理部分由日志切分(Splitter)和日志解析(Parser)组成,均由 C++ 实现,根据选择的日志采集模式,日志切分把读取的文件内容切割成为一条条日志(比如单行基于换行符、多行基于行首正则),然后交由日志解析从单条日志中提取字段。仅能支持正则、Json 和分隔符模式等固定模式 [ 1] ,且无法自由组合。这种基于采集模式的解析,拥有更好的性能,但牺牲了灵活性。

拓展插件 Pipeline 模式

图片

在拓展插件模式下,iLogtail 会将日志切分的结果直接提交给 Golang 插件模块进行处理,在后者中,我们可以组合多种处理插件 [ 2] ,来满足我们的需求。拓展插件模式则是牺牲一定的性能和计算资源来换取灵活性,以应对更为复杂的场景。

iLogtail 1.X Pipeline 模式的局限

灵活性和性能只能二选一

  • 原生插件模式性能最强,但是支持的格式有限。
  • 拓展插件模式灵活性足够,但是资源消耗变大、性能有损耗。
    • 引入 Golang 插件之后,C++ 到 Golang 插件跨语言传递数据,会引入额外的序列化与反序列化的步骤,带来一定的性能下降。
    • Golang 相关解析函数的性能,还是要比 C++ 的低。

条件判断

iLogtail 插件的配置,还是更加适合格式比较固定格式日志的处理与解析。如果日志格式比较多样,单一的 Pipeline 是很难处理的,则需要配置多个 Pipeline。

配置简便性

iLogtail 控制台采集配置页面对每个插件都有对应的配置模块,想要做复杂的配置,页面上的交互还是会比较繁琐。

iLogtail2.0 + SPL

那么有没有一种方案,可以实现既要性能,又要灵活性呢?ilLogtail2.0 带着 SPL 一起来了。

iLogtail 2.0 中,SPL 是跟 Pipeline 并列的一个实现,底层调用了 SLS 统一的 SPL Lib,由此可以使用 SPL 完整的处理能力。

图片

从 SLS 控制台可以看到 SPL 模式和 Pipeline 模式属于同级配置,两种模式可以选一种进行使用。

图片

SPL 语法简介

语法结构

  • 指令式语句,支持结构化数据和非结构化数据统一处理
  • 管道符(|)引导的探索式语法,复杂逻辑编排简便
<data-source> 
| <spl-cmd> -option=<option> -option ... <expression>, ... as <output>, ...
| <spl-cmd> ...
| <spl-cmd> ...

结构化数据 SQL 计算指令

  • extend 通过 SQL 表达式计算结果产生新字段
  • where 根据 SQL 表达式计算结果过滤数据条目
*
| extend latency=cast(latency as BIGINT)
| where status='200' AND latency>100

字段操作指令

  • project 保留与给定模式相匹配的字段、重命名指定字段
  • project-away 移除与给定模式相匹配的字段,原样保留其他所有字段
  • project-rename 重命名指定字段,并原样保留其他所有字段
*
| project-away -wildcard "__tag__:*"
| project-rename __source__=remote_addr

非结构化数据提取指令

  • parse-regexp 提取指定字段中的正则表达式分组匹配信息
  • parse-json 提取指定字段中的第一层 JSON 信息
  • parse-csv 提取指定字段中的 CSV 格式信息
*
| project-csv -delim='^_^' content as time, body
| project-regexp body, '(\S+)\s+(\w+)' as msg, user
iLogtail2.0 + SPL 的优势

图片

SPL 语法全局统一

图片

比如原来同样一个格式的数据,数据加工和 iLogtail 采集的配置是完全不同的,可能会导致客户需要有两个配置。现在 SPL 语法统一之后,同样的配置基本可以无缝在 iLogtail 和实时消费中转换。

C++ 原生高性能处理能力

SPL 的核心算子,都是 C++ 实现的,性能能够接近 iLogtail 原生 C++ 插件的性能,远高于 Logtail 拓展插件的性能。

图片

丰富的函数支持

SPL 目前支持的函数已经全面对齐 SLS SQL 语法的函数。(SPL 支持的函数列表 [ 3]

上手简单,调试方便

自动识别当前所处的语法模式,并对 SPL 相关指令和函数进行智能提示:

图片

图片

iLogtail 采集配置页面支持 SPL 预览,方便上手调试,可以实时看到配置效果:

图片

iLogtail2.0+SPL 实战

下面我们通过一个实际的例子来体验一下。

SPL 配置入门

如下是一条混合了 json 和 java 堆栈信息的样例日志:

[2024-01-05T12:07:00.123456] {"message": "this is a msg", "level": "INFO", "garbage": "xxx"} java.lang.Exception: exception发生at com.aliyun.sls.devops.logGenerator.type.RegexMultiLog.f3(RegexMultiLog.java:130)at com.aliyun.sls.devops.logGenerator.type.RegexMultiLog.f2(RegexMultiLog.java:125)at com.aliyun.sls.devops.logGenerator.type.RegexMultiLog.f1(RegexMultiLog.java:118)at com.aliyun.sls.devops.logGenerator.type.RegexMultiLog.run(RegexMultiLog.java:70)at java.base/java.lang.Thread.run(Thread.java:833)

我们先来看下 iLogtail 插件模式是如何配置的:

  1. 开启多行模式,配置行首正则表达式

图片

  1. 依次配置 Processor 插件

我们先用正则解析插件将原始日志分割成三个字段:time,json 和 stack:

图片

然后配置 Json 解析插件,将 json 字段解析开:

图片

最后配置丢弃字段插件,将不需要的字段丢弃:

图片

然后我们再来看下 SPL 是如何配置的。

通过上面的步骤分析,我们发现这个解析过程拆解到 SPL 中可以使用如下配置。

第一步是正则解析,从原始字段中通过正则表达式,解析出 time, json 和 stack 三个字段:

parse-regexp content, '[([^]]+)]\s+([^}]+})\s+(.*)' as time,json,stack

第二步是 json 解析,从 json 字段中解析出 level,message 和 garbage 字段:

parse-json json

第三步是丢弃字段:

project-away garbage,json

这里需要注意的是,parse-json,parse-regexp 解析成功之后,是不丢弃原始的字段的,因此如果最后的数据中不需要原始字段,那么需要主动删除一下原始字段。

将上面的语句用管道符号连接起来,就得到了完整的 SPL 语句:

* | parse-regexp content, '[([^]]+)]\s+([^}]+})\s+(.*)' as time,json,stack | parse-json json | project-away garbage,json,content

最终配置如下图所示:

  1. 开启多行模式,配置行首正则表达式

  2. 处理模式选择 SPL,填入 SPL 语句

图片

从控制台交互上看,SPL 配置的交互更加简便,不需要一个插件一个插件配置。

SPL 调试利器- SPL 配置效果预览

针对 SPL 的配置,控制台还提供了样例日志实时预览 SPL 处理结果的功能,添加日志样例之后,点击预览按钮,就是可以看到当前 SPL 语句的处理结果,可以非常方便的进行调试和优化。

继续用上面的例子,我们可以一步一步看到 SPL 配置的效果:

第一步是正则解析:

parse-regexp content, '[([^]]+)]\s+([^}]+})\s+(.*)' as time,json,stack

图片

可以看到数据被分割成了 time、json 和 stack 三个字段,原始字段 content 仍然保留着。

然后我们把 json 解析也加上,继续看下效果:

parse-regexp content, '[([^]]+)]\s+([^}]+})\s+(.*)' as time,json,stack | parse-json json

图片

可以看到 json 字段也被解析出来了,得到了 message,level 和 garbage 字段,同时 json 字段也被保留下来。到这里,所有字段解析都完成了,最后,我们就删除掉一些我们不需要的字段就好了。

* | parse-regexp content, '[([^]]+)]\s+([^}]+})\s+(.*)' as time,json,stack | parse-json json | project-away garbage,json,content

图片

可以看到,garbage,json 和 content 字段都被删除了,整个过程非常轻松和高效。

开源 iLogtail 配置实践

开源的 iLogtail 配置 SPL 也是非常简单的,如下就是一个 SPL 配置的实例:

enable: true
inputs:- Type: input_fileFilePaths:- /home/test-log/test.logMultiline:StartPattern: \[\d+.*
processors:- Type: processor_splScript: '* | parse-regexp content, ''\[([^]]+)]\s+([^}]+})\s+(.*)'' as time,json,stack | parse-json json | project-away garbage,json,content'
flushers:- Type: flusher_stdoutOnlyStdout: true

模拟数据写入:

图片

可以看到数据已经被正确的解析出来了:

图片

总结

日志数据格式可能是多样且复杂的,iLogtail 插件配置模式已经可以很好的支持复杂数据的处理。iLogtail2.0 又带来了 SPL 语法的重大支持,在日志处理场景下,可以通过多级管道对数据进行交互式、递进式的探索和处理,从配置交互和性能上,都有比较大的提升和优化。

iLogtail2.0 已经在逐步灰度中,欢迎大家体验和使用。

相关链接:

[1] 原生插件

https://help.aliyun.com/zh/sls/user-guide/native-plug-ins/?spm=a2c4g.11174283.0.0.65e95c0dTnOzh8

[2] 扩展插件

https://help.aliyun.com/zh/sls/user-guide/extension-plug-in/?spm=a2c4g.11186623.0.0.4bed5c0dYhtlZp

[3] SPL 支持的函数列表

https://help.aliyun.com/zh/sls/user-guide/function-overview

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

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

相关文章

课时152:项目发布_手工发布_方案解读

1.2.1 方案解读 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习 基础知识 案例需求 实现一套业务环境的项目发布流程&#xff0c;基本的网站架构效果如下&#xff1a;架构解读&#xff1a;负载均衡采用Nginx服务&#xff0c;基于请求内容进行…

孩子用的灯什么样的好?劣质LED台灯所带来的三大危害

随着科技设备不断的进步&#xff0c;护眼台灯已经逐渐成为了书房中不可或缺的一员。它以多功能的特性赢得了广大消费者的青睐。然而&#xff0c;市面上的护眼台灯质量良莠不齐&#xff0c;这使得消费者的选择变得更加困难。不良产品不仅可能带来安全隐患&#xff0c;甚至有潜在…

AI 大模型训练中,通常会采用哪些方法?(输入篇)

大家好 某种程度来说大模型训练的核心算法就是300到400行代码&#xff0c;如果真正理解了并不难。下面我将带大家分析常规大模型训练有几个阶段以及在训练中一般会用到哪些方法。 由上图可以看出&#xff0c;大模型训练主要有四个阶段&#xff1a;预训练、有监督微调、奖励建模…

大模型的高考数学成绩单:及格已经非常好了

让考生头皮发麻的高考数学&#xff0c;可难倒了顶尖 AI 大模型。 一年一度的高考即将落幕&#xff0c;衷心希望各位考生都超常发挥&#xff0c;考出满意的好成绩&#xff01;&#xff01; 和往年一样&#xff0c;除了让 AI 大模型写写高考作文&#xff0c;我们也选取了六家国…

打工人和学生党的福利,NewspaceGpt使用新体验

使用地址&#xff1a;https://newspace.ai0.cn/ 个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮…

小型气象站:现代气象监测的便携化解决方案

TH-QC12在气象监测领域&#xff0c;技术的不断创新和进步推动了监测设备的多样化和便携化。小型气象站作为这一趋势下的产物&#xff0c;以其体积小、功能全、操作简便等特点&#xff0c;受到了广泛的关注和应用。 小型气象站的技术特点 小型气象站集成了多种气象传感器&…

提升易用性,OceanBase生态管控产品的“从小到大”

2022年&#xff0c;OceanBase发布4.0版本“小鱼”&#xff0c;并首次公开提出了单机分布式一体化这一理念&#xff0c;旨在适应大小不同规模的工作负载&#xff0c;全面满足用户数据库“从小到大”全生命周期的需求。当时&#xff0c;我们所说的“从小到大”主要聚焦于数据库的…

【Qt 学习笔记】Qt窗口 | 对话框 | 模态与非模态对话框的创建

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt窗口 | 对话框 | 创建模态及非模态对话框 文章编号&#xff1a;Qt 学…

准橙人工翻译微信小程序,100+专业领域的译者在线帮你翻译!藏语、维吾尔语、哈萨克语、壮语、彝文、蒙古语统统支持人工翻译!

亲爱的朋友们&#xff0c;我们深知每一种语言都承载着独特的文化和历史&#xff0c;为了传承和弘扬这些宝贵的文化遗产&#xff0c;我们诚挚地邀请具备翻译经验并熟练掌握以下任意一门语言的您加入我们的团队&#xff01; 中国少数民族语言&#xff1a;藏语、维吾尔语、哈萨克…

懵了!伦敦银是现货白银吗?

近期&#xff0c;伦敦银价格出现了比较强势的上涨&#xff0c;很多朋友想入场炒银。不过当他们接触伦敦银交易市场的时候就懵了&#xff0c;这个交易品种好像有很多名称&#xff0c;一会儿说伦敦银&#xff0c;一会儿说现货白银&#xff0c;搞得自己都混乱了。到底伦敦银是现货…

CVE-2023-37569(未授权任意文件上传+弱口令爆破)

靶场简介 Online Piggery Management System v1.0 - 存在未授权的文件上传漏洞&#xff0c;登陆界面弱口令爆破 进入靶场 猜测弱口令admin/admin&#xff0c;错误&#xff0c;进行账号密码爆破 得到账号密码 admin/password 登陆进入&#xff0c;找到一处文件上传位置 上传…

千问Qwen7B chat:本地部署及网页端使用

基于前面的安装经验&#xff0c;千问大模型的本地部署并不算难&#xff0c;主要时间用在大模型文件的下载上。同时系统运行对硬件也有较高的要求&#xff0c;本机的硬件配置为N卡3060&#xff0c;显存12G。 使用conda创建虚拟环境&#xff0c;主要版本如下&#xff1a; Pyth…

生成式人工智能 - stable diffusion web-ui安装教程

一、Stable Diffusion WEB UI 屌丝劲发作了,所以本地调试了Stable Diffusion之后,就去看了一下Stable Diffusion WEB UI,网络上各种打包套件什么的好像很火。国内的也就这个层次了,老外搞创新,国内跟着屁股后面搞搞应用层,就叫大神了。 不扯闲篇了,我们这里从git源码直接…

Vue18-列表渲染

一、v-for渲染列表 1-1、遍历数组&#xff08;用的多&#xff09; 1-2、key属性 让每一个<li>都有一个唯一的标识&#xff01; 1、写法一 只有用了遍历的方式(v-for)来生成多个同样结构的数据&#xff0c;必须给每个结构取一个唯一的标识。 2、写法二 或者&#xff1a;…

【全开源】生产管理系统源码(FastAdmin+ThinkPHP+Layui+uniapp)

&#x1f525;揭秘高效生产管理系统&#xff0c;让你的企业腾飞&#xff01;&#x1f680; 一款基于FastAdminThinkPHPLayuiuniapp开发的生产管理系统&#xff0c;帮助企业数字化转型&#xff0c;打造智能工厂&#xff0c;专业为生产企业量身开发的一套完整的生产管理系统。主…

【乐吾乐2D可视化组态编辑器】管道绘制,水流动画

用乐吾乐2D可视化连线丰富的外观和动画效果&#xff0c;快速绘制各种风格的管道和水流动画。 乐吾乐2D可视化组态编辑器地址&#xff1a;https://2d.le5le.com/ 方式一&#xff1a;线条渐变 特点&#xff1a;呈现管道的金属光泽和管道剖面 外观&#xff1a;线条渐变--线性渐…

Jenkins 和 GitLab CI/CD比较

近十年来&#xff0c;持续集成&#xff08;Continuous Integration&#xff0c;CI&#xff09;和持续交付&#xff08;Continuous Delivery&#xff0c;CD&#xff09;领域都取得了很大的进步。DevOps 测试的兴起导致了对 CI/CD 工具的快速需求。现有的解决方案总是随着时间的推…

LlamaIndex 四 数据连接器

前言 我们通过各项配置&#xff0c;理解了LlamaIndex在构建知识库和基于知识库的推荐两个阶段&#xff0c;怎么和业务相结合。本文&#xff0c;我们将开始深入理解LlamaIndex的各个模块。首先&#xff0c;LlamaIndex强大的Data Connector 数据连接器上场。 LlamaIndex擅长和各…

聆思CSK6大模型开发板英语评测类开源SDK详解

离线英文评测算法SDK 能力简介 CSK6 大模型开发套件可以对用户通过语音输入的英文单词进行精准识别&#xff0c;并对单词的发音、错读、漏读、多读等方面进行评估&#xff0c;进行音素级的识别&#xff0c;根据用户的发音给出相应的建议和纠正&#xff0c;帮助用户更好地掌握单…

正大国际期货:如何做恒指期货

要想获得较好的收益&#xff0c;就必须要知道恒指做单的技巧&#xff0c;毕竟掌握了技巧才是最重要的。 第一、下单之前一定看准行情并且顺势操作。何为顺势&#xff1f;就是我们平时说的趋势&#xff0c;只要趋势做对了&#xff0c;在中途可能会有一些起伏&#xff0c;但是最后…