一文教会你如何使用iLogtail SPL处理日志
随着流式处理的发展,出现了越来越多的工具和语言,使得数据处理变得更加高效、灵活和易用。在此背景下,SLS 推出了 SPL(SLS Processing Language) 语法,以此统一查询、端上处理、数据加工等的语法,保证了数据处理的灵活性。iLogtail 作为日志、时序数据采集器,在 2.0 版本中,全面支持了 SPL 。本文对处理插件进行了梳理,介绍了如何编写 SPL 语句,从插件处理模式迁移到 2.0 版本的 SPL 处理模式,帮助用户实现更加灵活的端上数据处理。
SPL
iLogtail 目前的处理模式一共支持 3 种处理模式。
- 原生插件模式:由 C++实现的原生插件,性能最强。
- 拓展插件模式:由 Go 实现的拓展插件,提供了丰富的生态,足够灵活。
- SPL 模式:随着 iLogtail 2.0 在 C++处理插件中支持了 SPL 的处理能力,对数据处理能力带来了很大的提升,兼顾性能与灵活性。用户只需要编写 SPL 语句,即可以利用 SPL 的计算能力,完成对数据的处理。SPL 语法可以参考https://help.aliyun.com/zh/sls/user-guide/spl-syntax/?spm=a2c4g.11186623.0.0.2bb67eeaChOwLy
特点 | 开发门槛 | |
---|---|---|
原生插件 | + C++实现 + 性能高,资源开销极低 + 较完善的算子能力 | + C++,开发门槛中等 + 可灵活定制 |
扩展插件 | + Golang实现 + 较高的性能,资源开销低 + 较完善的算子能力 | + Golang,开发门槛低 + 可灵活定制 |
SPL | + C++实现 + 性能高,资源开销低 + 全面的算子能力 + 灵活组合 | + 暂未开源,但是通过语法可解决大部分问题,免去编码。 |
总的来说,iLogtail 2.0 + SPL 主要有以下的优势:
- 统一数据处理语言:对于同样一种格式的数据,用户可以在不同场景中使用同一种语言进行处理,提高了数据处理的效率
- 查询处理更高效:SPL 对弱结构化数据友好,同时 SPL 主要算子由 C++实现,接近 iLogtail 1.X 版本的原生性能
- 丰富的工具和函数:SPL 提供了丰富的内置函数和算子,用户可以更加灵活地进行组合
- 简单易学:SPL 属于一种低代码语言,用户可以快速上手,日志搜索、处理一气呵成
接下来,本文将介绍如何用灵活的 SPL 语句,实现其他两种处理模式相同的处理能力。
原生插件对比
正则解析
根据正则提取提取字段。输入 Nginx 格式:
原有插件:
SPL:
输出:
分隔符解析
根据分隔符分隔提取字段,输入:
原有插件:
SPL:
输出:
Json 解析
解析 json 格式日志,输入:
原有插件:
SPL:
输出:
正则解析+时间解析
根据正则表达式解析字段,并将其中的一个字段解析成日志时间,输入:
原有插件:
SPL:
输出:
正则解析+过滤
根据正则表达式解析字段,并根据解析后的字段值过滤日志。输入:
原有插件:
SPL:
输出:
脱敏
将日志中的敏感信息脱敏。输入:
原有插件:
SPL:
输出:
拓展插件对比
添加字段
在输出结果中添加字段,输入:
原有插件:
SPL:
输出:
Json 解析+丢弃字段
解析 json 并删除解析后的指定字段。输入:
原有插件:
SPL:
输出:
Json 解析+重命名字段
解析 json 并重命名解析后的字段
原有插件:
SPL:
输出:
Json 解析+过滤日志
解析 json 并根据字段条件过滤日志。输入:
原有插件:
SPL:
输出:
Json 解析+字段值映射处理
解析 json 并根据字段值的不同,映射为不同的值。输入:
原有插件:
SPL:
输出:
字符串替换
替换日志中的指定字符串。输入:
原有插件:
SPL:
输出:
数据编码与解码
Base64
对日志进行 Base64 加密。输入:
原有插件:
SPL:
输出:
MD5
对日志进行 MD5 加密。输入:
原有插件:
SPL:
输出:
新增能力项
数学计算
输入:4。
SPL:
输出:
URL 计算
URL 编码解码
输入:
SPL:
输出:
URL 提取
输入:
SPL:
输出:
比较&逻辑运算符
输入:
SPL:
输出:
其他
更多能力请参考 https://help.aliyun.com/zh/sls/user-guide/function-overview
欢迎大家补充更多 iLogtail SPL 实践案例!