加工进化论:SPL 一键加速日志转指标

作者:劳贵泓(泓逸)

1. 背景

日志服务的 SPL(Search Processing Language)自推出以来,凭借其强大的数据处理能力,已经成为众多开发者和企业实现高效数据分析的首选工具。随着业务场景的不断拓展和技术需求的日益复杂,SPL 持续迭代创新,致力于为用户提供更强大、更灵活的数据加工能力。

此次更新新增了 pack-fieldslog-to-metricmetric-to-metric 算子,大幅优化了从原始日志到结构化数据再到时序指标的转化链路。这些改进不仅显著提升了数据处理效率,还为可观测性分析、时序预测等领域提供了更广泛的应用空间。

  • pack-fields:作为 e_pack_fields 的进化形态,通过智能字段聚合构建 JSON 对象,实现数据密度的极致压缩;
  • log-to-metric:继承 e_to_metric 的核心功能,以更优雅的方式将非结构化日志转化为时序数据库的黄金标准格式;
  • metric-to-metric:为时序数据提供二次加工能力,支持标签的增删改及数据规范化,填补了链路治理的空白。

2. 新算子功能详解

2.1 pack-fields 算子

2.1.1 场景与问题

在实际业务中,多字段分散存储常导致处理效率低下。新版 pack-fields 算子通过字段打包功能极大降低了数据传输成本,同时新增了字段修剪功能,能够高效提取符合正则表达式的 KV 结构,进一步增强数据规整的灵活性。

2.1.2 技术突破与范式升级

相较于旧版 e_pack_fields,本次迭代实现了:

  • 智能字段修剪:-ltrim='xxx'参数可动态过滤字段前缀,如将 mdc_key1=...修剪为 key1=...。
  • 兼容性进化:与 parse-kv 等算子无缝衔接,形成完整的数据规整流水线。
ini 复制代码
# 场景示例:日志字段聚合
* | parse-kv -prefix="mdc_" -regexp content, '(\w+)=(\w+)' 
  | pack-fields -include='mdc_.*' -ltrim='mdc_' as mdc

2.1.3 示例

makefile 复制代码
# 输入数据
__time__: 1614739608
rt: 123
qps: 10
host: myhost
# SPL语句
* | log-to-metric -names='["rt", "qps"]' -labels='["host"]'
# 输出两条Metric日志
__labels__:host#$#myhost
__name__:rt
__time_nano__:1614739608
__value__:123
__labels__:host#$#myhost
__name__:qps
__time_nano__:1614739608
__value__:10

2.2 log-to-metric

2.2.1 场景与问题

解决非结构化日志转时序数据的链路场景,并提高转化性能。相较于旧版算子,默认使用 Hash 写入,保证了写入端的 shard 均衡,提高查询性能。

2.2.2 核心改进

在日志到时序的转换过程中,传统方案常面临数据类型歧义、标签管理混乱等问题。log-to-metric 通过以下革新实现质的飞跃:

  • 智能类型推断:自动识别数值型字段,确保 __value__ 字段的精度完整性。
  • 一键格式化:采用 key#$#value 格式构建结构化标签,标准化键值对与标签编码。
  • 通配符匹配:-wildcard 参数实现模式化字段捕获(如 request* 匹配所有以 request 开头的字段)。

2.2.3 示例

makefile 复制代码
# 输入数据
request_time: 1614739608
upstream_response_time: 123456789
slbid: 123
scheme: worker
# 正常转化
log-to-metric -names=["request_time", "upstream_response_time"] -labels=["slbid","scheme"]
# 规范数据
log-to-metric -names=["request_time", "upstream_response_time"] -labels=["slbid","scheme"] -format
# 模糊匹配
log-to-metric -wildcard -names=["request*", "upstream*"] -labels=["slbid","scheme"]
# 输出数据
__labels__:slbid#$#123|schema#$#worker
__name__:max_rt
__time_nano__:1614739608
__value__:123
__labels__:slbid#$#123|schema#$#worker
__name__:total_qps
__time_nano__:1614739608
__value__:10

2.3 metric-to-metric

2.3.1 技术痛点和解决方案

时序数据在多源采集过程中常出现:

  • 标签污染:非法字符或脏数据破坏数据一致性。
  • 命名冲突:相似指标因命名差异导致聚合错误。
  • 维度膨胀:非必要标签增加存储与查询开销。

metric-to-metric 通过以下能力实现数据治理:

  • 标签手术刀:精确控制标签的增删改(-add_labels, -del_labels, -rename_label)。
  • 格式净化器:自动清理非法字符,规范化键值对格式。
  • 维度蒸馏器:通过条件过滤保留核心指标。

2.3.2 功能创新图谱

2.3.3 示例

makefile 复制代码
# 输入数据
__labels__:host#$#myhost|qps#$#10|asda$cc#$#j|ob|schema#$#|#$#|#$#xxxx
__name__:rt
__time_nano__:1614739608
__value__:123
# SPL语句
*|metric-to-metric -format
# 输出数据
__labels__:asda_cc#$#j|host#$#myhost|qps#$#10
__name__:rt
__time_nano__:1614739608
__value__:123
makefile 复制代码
# 输入数据
__labels__:host#$#myhost|qps#$#10
__name__:rt
__time_nano__:1614739608
__value__:123
# SPL语句
* | metric-to-metric -del_labels='["qps"]'
# 输出数据
__labels__:host#$#myhost
__name__:rt
__time_nano__:1614739608
__value__:123

3. 极致性能

在 SPL 新算子的开发过程中,性能优化是核心主题之一。与旧版 DSL 不同,新版 SPL 算子的设计更加注重极致性能,结合底层算法调优和高效 C++ 实现,全面提升了数据处理能力和吞吐量。

3.1 性能对比实验说明

由于旧版加工与新版 SPL 加工在工程实现上存在较大差异(如内存中的数据格式不一致),直接对比两者的性能存在一定挑战。为确保测试结果的公平性,我们采取了以下措施:

  • 数据模拟:通过 mock 生成一批内存大小相近的数据集,尽量保证输入数据的一致性。
  • 端到端测试:针对关键模块(如 log-to-metric pack-fields)进行端到端性能测试,覆盖从输入到输出的全流程。

3.2 关键性能指标对比

3.3 结论

新版的加工能力针对 log-to-metric pack-fields 两种模块进行了全面的性能优化。从测试结果可以得出以下结论:

  • 端到端性能显著提升:新版框架优化了输入、处理和输出的全流程,尤其是数据处理阶段的性能优化显著。log-to-metric 模块性能整体提升 7.17 倍,而 pack-fields 模块提升更为显著,达到 37.23 倍。
  • 处理速度的突破:两种模块的处理速度分别提升了 27.8 倍和 51.52 倍,解决了旧版中处理阶段效率不足的问题。

新版在工程实现上的优化方向非常明确且效果显著,通过性能改进全面解决了旧版的瓶颈问题,为数据加工任务提供了更强的处理能力和更高的吞吐量。

4. 结语

此次 SPL 加工能力的迭代更新,以"性能提升"、"场景支持多样化"和"易用性优化"为核心目标,在以下几个方面取得了显著突破:

  • 极致性能与稳定性:基于灵活的加工框架、先进的编码模式及 C++ 实现的存储与计算引擎,新算子在资源复用与性能优化方面全面领先,尤其在高负载或复杂数据场景下,仍能保持稳定的写入与读取性能。新版加工算子性能较旧版普遍提升 10 倍以上,为处理海量数据和加速分析效率提供了坚实保障。
  • 使用体验升级:SPL 采用类 SQL 的语法设计,支持多级管道化操作的灵活组合,显著降低用户的使用门槛。新增的一键格式化、字段通配符匹配等功能,大幅简化了复杂加工任务的操作步骤,为用户带来更加便捷高效的开发体验。
  • 业务可观测性与扩展能力:完美支持从日志到指标的链路打通,帮助用户构建端到端的可观测体系。满足日志聚合、时序预测及异常检测等多种场景需求,为业务的日志分析、可观测性打造了一体化解决方案。

SPL 算子不仅完成了旧版 DSL 加工向更强大语法和算子形式的过渡,更将性能调优和场景适配做到了极致,解锁了时序预测和日志分析的更多可能性。作为重要的基础设施模块,SPL 加工能力将持续优化演进。未来的规划将继续聚焦通用性、性能与产品能力,为用户提供更加强大、灵活的技术支持。

点击此处,了解阿里云日志服务 SLS 产品详情

相关推荐
洁辉7 小时前
Spring Cloud 全栈指南:构建云原生微服务的终极武器
spring cloud·微服务·云原生
阿里云云原生10 小时前
破解异构日志清洗五大难题,全面提升运维数据可观测性
云原生
阿里云云原生16 小时前
从 Python 演进探寻 AI 与云对编程语言的推动
云原生
亲爱的非洲野猪17 小时前
关于k8s Kubernetes的10个面试题
云原生·容器·kubernetes
西京刀客17 小时前
k8s之configmap
云原生·容器·kubernetes
阿里云云原生1 天前
Higress MCP 服务管理,助力构建私有 MCP 市场
云原生
zzywxc7872 天前
云原生 Serverless 架构下的智能弹性伸缩与成本优化实践
云原生·架构·serverless