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

作者:劳贵泓(泓逸)

1. 背景

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

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

image

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

2. 新算子功能详解

image

2.1 pack-fields 算子

2.1.1 场景与问题

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

2.1.2 技术突破与范式升级

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

  • 智能字段修剪:-ltrim='xxx'参数可动态过滤字段前缀,如将 mdc_key1=...修剪为 key1=...。
  • 兼容性进化:与 parse-kv 等算子无缝衔接,形成完整的数据规整流水线。
# 场景示例:日志字段聚合
* | parse-kv -prefix="mdc_" -regexp content, '(\w+)=(\w+)' | pack-fields -include='mdc_.*' -ltrim='mdc_' as mdc
2.1.3 示例
# 输入数据
__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 均衡,提高查询性能。

image

2.2.2 核心改进

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

  • 智能类型推断:自动识别数值型字段,确保 __value__ 字段的精度完整性。
  • 一键格式化:采用 key#$#value 格式构建结构化标签,标准化键值对与标签编码。
  • 通配符匹配:-wildcard 参数实现模式化字段捕获(如 request* 匹配所有以 request 开头的字段)。
2.2.3 示例
# 输入数据
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 功能创新图谱

image

2.3.3 示例
# 输入数据
__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
# 输入数据
__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 关键性能指标对比

image

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 产品详情

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

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

相关文章

Web 应用防火墙:守护应用安全的核心屏障

当你在调试 Web 应用时,是否遇到过这样的情况:刚修复的 XSS 漏洞又被绕过,数据库日志里突然出现诡异的 SQL 语句,或者用户反馈登录后信息被篡改?这些问题的背后,往往是 Web 应用面临的持续安全威胁。据 OWA…

Python 网络爬虫的基本流程及 robots 协议详解

数据驱动的时代,网络爬虫作为高效获取互联网信息的工具,其规范化开发离不开对基本流程的掌握和对 robots 协议的遵守。本文将系统梳理 Python 网络爬虫的核心流程,并深入解读 robots 协议的重要性及实践规范。 一、Python 网络爬虫的基本流程 Python 网络爬虫的工作过程可…

字节二面(狠狠拷打系列):什么是http1.1,2.0,3.0,分别在什么场景里面用的多

文章目录从单行到新纪元:HTTP/0.9、1.0、1.1、2.0与3.0的核心区别HTTP/0.9:协议的黎明 (1991)HTTP/1.0:功能扩展与标准化 (1996)HTTP/1.1:持久连接与性能优化 (1997)HTTP/2.0:二进制与多路复用 (2015)HTTP/3.0&#xf…

Java教程:JavaWeb ---MySQL高级

✨博客主页: https://blog.csdn.net/m0_63815035?typeblog 💗《博客内容》:大数据开发、.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 📢博客专栏: https://blog.csdn.net/m0_…

Audio笔试和面试题型解析

本专栏预计更新90期左右。当前第27期-音频部分. 音频硬件在消费电子(手机、电脑、耳机、智能音箱)、汽车、专业音响等领域是用户体验的关键组成部分。大厂(如苹果、三星、Google、华为、小米、各种汽车Tier 1供应商等)的硬件工程师在设计和优化音频系统时,需要对喇叭(扬…

DeepSeek俄罗斯方块网页版HTML5(附源码)

用DeepSeek生成一个俄罗斯方块游戏网页版的,基于HTML5,效果很棒。 提示词prompt 帮我做一个俄罗斯方块 网页版的 基于HTML5游戏功能说明 基本功能: 完整的俄罗斯方块游戏逻辑 7种不同形状的方块 分数计算系统 等级提升系统(速度会随等级提高)…

企业电商平台搭建:ZKmall开源商城服务器部署与容灾方案

企业级电商平台最核心的诉求,就是得让 “业务一直在线”—— 不管是平时运营要稳如磐石,还是突然出故障了能火速恢复,都离不开靠谱的服务器部署架构和周全的容灾方案。ZKmall 开源商城攒了 6000 多家企业客户的实战经验,琢磨出一套…

【软件运维】前后端部署启动的几种方式

.sh启动 #!/bin/bash# 解析软链接,获取真实脚本目录 SOURCE"${BASH_SOURCE[0]}" while [ -L "$SOURCE" ]; doDIR"$( cd -P "$( dirname "$SOURCE" )" && pwd )"SOURCE"$(readlink "$SOURCE&q…

[爬虫知识] DrissionPage:强大的自动化工具

相关爬虫实战案例:[爬虫实战] 使用 DrissionPage 自动化采集小红书笔记 相关爬虫专栏:JS逆向爬虫实战 爬虫知识点合集 爬虫实战案例 逆向知识点合集 前言: 在当今数据驱动的世界里,网络爬虫和自动化测试扮演着越来越重要的角…

数据分析师如何构建自己的底层逻辑?

目录 一、什么是“底层逻辑”? 二、底层逻辑的核心是什么?三句话讲清楚 1. 你到底在解决什么问题? 2. 你有没有一套“框架”来组织你的分析思路? 3. 你能不能用数据说出“结论 因果 建议”? 三、从 BI 视角出发…

残差连接+层归一化:Transformer训练稳定秘诀

什么是:残差连接+层归一化 残差连接 (Residual Connection):防止梯度消失 核心原理 简单理解:走楼梯时,既可以走楼梯,也可以坐电梯,最后在同一层汇合。 # 残差连接的数学表示 输出 = F(输入) + 输入 # ↑处理后 ↑原始输入具体数值例子 处理句子"我爱学习…

公网 IP 不稳定监控实战:用多点 Ping 策略实现高可达率保障

更多云服务器知识,尽在hostol.com 你有没有遇到过这种情况:明明服务器的监控系统说一切正常,服务状态绿油油一片,但用户那边却反馈“时好时坏”、“丢包严重”甚至“根本连不上”。你掏出手机连上公网去试试,诶&#…

uniapp类似抖音视频滑动

最近需求说要做个类似抖音那种视频的&#xff0c;我二话不说就用了swiper-view组件&#xff0c;但是效果不太理想&#xff0c;后面改用css属性先放效果图&#xff1a;<template><view class"video-scroll-container" touchstart"handleTouchStart"…

Umi-OCR 的 Docker(win制作镜像,Linux(Ubuntu Server 22.04)离线部署)

前置博客&#xff1a;Ubuntu-Server 22.04.4 详细安装图文教程 wget命令在windows终端下不能使用的原因及解决办法 在 Ubuntu 22.04 LTS 上离线安装 Docker 手把手教你在Win11下安装docker Umi-OCR 完整部署流程 第一步&#xff1a;在 Windows 上构建/获取 Umi-OCR Docker…

AI Agent革命:当大模型学会使用工具、记忆与规划

以下是针对Lilian Weng的AI Agent综述文章&#xff08;原文链接&#xff09;的深度解析与整理&#xff1a; AI Agent革命&#xff1a;当大模型学会使用工具、记忆与规划 ——解析LLM驱动的下一代智能体技术架构 一、核心范式转变 传统AI模型&#xff08;如ChatGPT&#xff09…

Claude Code:完爆 Cursor 的编程体验

前言 最近&#xff0c;听说Claude Code这款代码辅助编写产品很强&#xff0c;有人把Cursor比作实习生水平&#xff0c;Claude Code比作高级工程师水平。 起初不以为意&#xff0c;因为特殊原因&#xff0c;Claude 无法直接访问。然而&#xff0c;有人做了镜像站&#xff0c;可以…

ModbusTCP通讯

supply服务-ModbusTCP通讯&#xff1a; winForm-HZHControls-Sqllite本地小项目架构补充&#xff1a;

前端面试专栏-算法篇:23. 图结构与遍历算法

&#x1f525; 欢迎来到前端面试通关指南专栏&#xff01;从js精讲到框架到实战&#xff0c;渐进系统化学习&#xff0c;坚持解锁新技能&#xff0c;祝你轻松拿下心仪offer。 前端面试通关指南专栏主页 前端面试专栏规划详情 图结构与遍历算法 在计算机科学中&#xff0c;图&a…

渗透测试之木马后门实验

一、实验背景 根据CNCERT的监测数据显示&#xff0c;2018年位于美国的1.4万余台木马或僵尸网络控制服务器&#xff0c;控制了中国境内334万余台主机&#xff1b;2018年位于美国的3325个IP地址向中国境内3607个网站植入木马&#xff0c;根据对控制中国境内主机数量及控制中国境内…

【LeetCode 热题 100】24. 两两交换链表中的节点——(解法一)迭代+哨兵

Problem: 24. 两两交换链表中的节点 题目&#xff1a;给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 文章目录整体思路完整代码…