首页 > 其他分享 >SLS 数据加工全面升级,集成 SPL 语法

SLS 数据加工全面升级,集成 SPL 语法

时间:2024-07-26 18:40:45浏览次数:17  
标签:加工 SLS 语法 SPL 日志 数据 调试

作者:灵圣

数据加工概述

在系统开发、运维过程中,日志是最重要的信息之一,其最大的优点是简单直接。不过在整个日志的生命周期里有一对很难调和的矛盾:输出和采集日志要求尽可能的简单便捷 vs 日志分析时需要数据格式化并能够按需存储。

  • 为了解决前者,保证服务的稳定和效率,提出了不同的高性能数据管道解决方案,比如阿里云 SLS 这样的云服务、还有 Kafka 这样的开源中间件。
  • 而对于后者,需要提供给下游规范化的、完整的数据,用于比如业务分析等场景,SLS 数据加工即是达成这一需求的功能。

图片

如上图所示,SLS 数据加工的常见场景:

  • 规整: 这是使用频率最高的场景,比如从文本日志数据中提取出关键信息,将其转为规范化的数据。
  • 富化: 比如用户的点击数据中只包含商品 ID,在分析时需要从数据库关联起详细信息。
  • 脱敏: 随着我国信息安全相关法律的完善,对于敏感数据(比如个人信息)的处理要求越来越高。
  • 分裂: 在数据写出时,处于性能、便捷性考虑会将多条数据合并输出,在分析前则需要拆分出独立数据条目。
  • 分发: 将不同类型的数据分别写到不同的特定目标中,以供下游定制化使用。

新版数据加工提升

图片

  • 集成 SPL,统一语法

    SPL 是 SLS 为日志采集、交互式查询、流式消费、数据加工等数据处理的场景,提供的统一的数据处理语法,语法细节可参考 SPL 语法 [ 1] 。新版数据加工 SPL 编写过程支持按行调试和代码提示,更接近 IDE 编码体验。

  • 性能提升 10+ 倍,大数据量、数据洪峰处理更平滑

    在处理无规则日志数据场景中,相同的处理复杂度,新版数据加工相对于旧版有 10+ 倍的性能提升,能够支撑更高的数据吞吐量。另外,通过调度系统的升级,面对平常流量上千倍的数据洪峰时,新版数据加工能够更加敏捷的实现计算并发扩展,尽可能减少洪峰带来的积压。

  • 成本更优,降至旧版 1/3

    通过数据加工服务的技术迭代升级,新版数据加工提供了更具优势的使用成本,仅为旧版数据加工的 1/3。所以,在需求场景已经支持时,推荐使用数据加工(新版)。

集成 SPL、统一语法

新版数据加工原理

新版数据加工通过托管实时数据消费的任务,结合日志服务 SPL 规则消费功能,实现对日志数据的实时加工处理,原理如下图。

图片

  • 调度机制

    对每一个加工任务,加工服务的调度器会启动一个或多个运行实例,并发执行数据处理,每个运行实例扮演一个消费者角色消费 1 个或者多个源 Logstore 的 Shard。调度器根据运行实例资源消耗、以及处理进度决定运行实例数目,实现弹性并发。单个任务的并发上限为源 Logstore 的 Shard 数量。

  • 运行实例

    根据任务的 SPL 规则和目标 Logstore 等配置信息,从数据加工服务分配的 Shard 中,使用 SPL 规则消费源日志数据,将基于 SPL 规则处理后的结果分发写入对应的目标 Logstore。运行实例运行过程中,自动保存 Shard 的消费点位,确保任务停止重启时,从断点处继续消费。

SPL 语法对比旧版 DSL

相对于数据加工(旧版)DSL 语言,日志服务 SPL 语法提升了易用性,具体如下:

  1. 数据加工(旧版)DSL 语法作为 Python 语法子集,需要函数式编程,使用过程中存在较多语法符号冗余。相较而言,日志服务 SPL 语言是类 Shell 指令式语法,在最大程度减少语法符号的冗余。如下案例:

    • 旧版本使用函数 v 引用字段值 v("field"),SPL 则直接引用字段,比如 | where field='ERROR'。
    • 旧版本函数调用 func(arg1, arg2),转为 SPL 指令 | cmd arg1, arg2,编写更简洁。
  2. SPL 语言支持处理过程中临时字段类型保持,数据类型转换 [ 2] ;与之相反,数据加工(旧版)DSL 的定义中,字段值固定为字符串类型,类型转换的中间结果不支持保留。比如,如下 DSL 脚本,需两次调用 ct_int 函数:

e_set("ms", ct_float(v("sec"))*1000)
e_keep(ct_float(v("ms")) > 500)

对应的 SPL 逻辑则更为简洁,无需两次转换类型,参考如下:

| extend ms=cast(sec as double)*1000
| where ms>1024
  1. 另外,SPL 语言可以无缝使用日志服务 SQL 函数,无需额外的理解和学习成本,SPL 所支持的 SQL 函数参考 SQL 函数概览 [ 3]

数据加工 SPL 代码调试

调试菜单

数据加工(新版)SPL 调试菜单参考图片,菜单按钮定义如下:

  • 运行按钮: 完整运行编辑框中的 SPL 规则。
  • 调试按钮: 开启调试模式,并执行运行至第一个断点,开启后可以执行按行、或者断点调试。
  • 下个断点按钮: 调试运行至下一个断点。
  • 下一行按钮: 调试运行至下一行。
  • 停止调试按钮: 停止当前调试过程。

代码编辑框的行号前的空白区域为断点区域,在断点区域单击鼠标,即可在单击点对应的行添加调试断点,效果如下图。单击已添加的调试断点,即可将其移除。

图片

调试过程

  1. 准备测试数据和编写 SPL 规则。

  2. 在需要调试的行添加断点。

  3. 单击调试按钮,开启调试模式,如下图。黄色背景行表示当前暂停的位置(语句未执行),蓝色背景行表示已经执行的 SPL 语句。

图片

  1. 在加工结果标签页中查看运行结果是否满足需求。

    • 如果符合需求:进入第 5 步,继续调试运行。
    • 否则,单击停止调试按钮,回到第 1 步,修改 SPL 规则,重新开始调试过程。

图片

持续迭代升级

接下来,新版数据加工将持续进行迭代升级,这里我们仅聊一下近期即将推出的两个升级。

1. 支撑完备的数据处理场景

目前新版数据加工专注于无规则数据处理场景,即偏计算型,对于数据流转场景暂未覆盖,比如数据分发至多目标或动态目标、维表富化、IP 解析、跨地域同步数据。

接下来,新版数据加工将着重支持这些场景,并通过架构升级,提供更稳定、更易用的服务,比如跨区域同步的加速能力、基于数据集的分发等。

2. 旧版数据加工任务无缝升级

对于线上在运行的旧版数据加工任务,需要应用如上所述的新版本提升,数据加工服务将从两个技术角度支撑已有任务的原地升级:

第一,数据加工服务保证数据的完整性,自动将当前的数据消费点位迁移至新版数据加工,升级后将从该点位继续消费数据。第二,基于 AST 语法树解析,自动翻译旧版数据加工任务的 DSL 脚本,至同等数据处理逻辑的 SPL。

相关链接:

[1] SPL 语法

https://help.aliyun.com/zh/sls/user-guide/spl-syntax/

[2] 数据类型转换

https://help.aliyun.com/zh/sls/user-guide/spl-general-reference?#9f3d943aa1ceb

[3] SQL 函数概览

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

标签:加工,SLS,语法,SPL,日志,数据,调试
From: https://www.cnblogs.com/alisystemsoftware/p/18326022

相关文章

  • es6-splice方法例子
    constarr=['a','b','c','d'];////1.1、删除指定位置的一个元素//arr.splice(1,1);//console.log('arr',arr);//["a","c","d"]////1.2、删除指定位置的两个元素/......
  • [二、状态管理]4其他状态管理(3)$$语法:内置组件双向同步
    $$运算符为系统内置组件提供TS变量的引用,使得TS变量和系统内置组件的内部状态保持同步。内部状态具体指什么取决于组件。例如,Refresh组件的refreshing参数。使用规则当前$$支持基础类型变量,以及@State、@Link和@Prop装饰的变量。当前$$仅支持Refresh组件的refreshing参数。......
  • DataFrame RHS语法查询语句
    RHS:https://github.com/acoboh/query-filter-jpa/blob/main/README.md规则:查询字段名:查询条件(条件值)关系符查询字段名:查询条件(条件值)...查询条件有:‒eq:等于‒gt:大于‒gte:大于等于‒lt:小于‒lte:小于等于‒ne:不等于‒cn:包含‒ncn:不包......
  • crontab在java-spring中的语法规则
      秒分钟小时日月周年每******** 每秒每分每时每天每月每周每年区间;从a-b-a-ba-ba-ba-ba-ba-ba-b 从a秒到b秒从a分到b分从a点到b点从a号到......
  • 实现一个类似c#LINQ链式语法的观察者模式
    文章目录前言一、UniRx与LINQ的关系二、实现原理三、核心代码实现1.接口部分2.Disposable3.主题(事件源)4.操作符5.观察者6.操作符扩展使用示例1.带参数主题2.不带参数主题总结前言最近在学习UniRx的源码,其中链式语法的实现引起了我的兴趣,结合LINQ的实现原理,想要......
  • 谷歌语法
    1、基本搜索逻辑与:and逻辑或:or逻辑非:-完整匹配:"关键词"通配符:*?通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符。......
  • 【java SE语法篇】1. 运算符
    目录1.运算符和表达式2.算数运算符3.隐式转换4.强制转换5.自增自减运算符6.赋值运算符7.扩展运算符8.关系运算符9.逻辑运算符9.1&和|的使用:9.2^(异或)的使用:9.3!(取反)的使用:10.短路逻辑运算符11.三元运算符1.运算符和表达式运算符:就是对常量或者......
  • Python语法基础
    基本语句输入input() eg:输出print(内容)注释单行注释:#注释内容多行注释:"""注释内容"""数据类型: 字面量:整型、浮点数、字符串......intfloatstring查看数据类型:type(数据)查看数据类型 转换函数int(x):将x转换成整数类型float(x):将x转......
  • Lua 语法之函数
    函数的定义--函数的定义function函数名()enda=function()end无参数无返回值函数functionF1() print("F1函数")end--Lua执行是自上往下执行函数不同于变量,--执行函数时必须先定义且在执行函数上面有定义F1()--有点类似C#中的委托和事件写法F2=fun......
  • 01、基础语法
    基础语法01、Python基础信息  02、Python保留字符保留字符的查看(共36个)importkeyword#获取所有的Python保留字reserved_words=keyword.kwlistprint(reserved_words)FalseNoneTrue__peg_parser__andasassertasyncawaitbreakclasscontinuedef......