加工進化論: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
英文地址,請注明出處:http://en.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;。 文章目錄整體思路完整代碼…