作者:勞貴泓(泓逸)
1. 背景
日志服務的 SPL(Search Processing Language)自推出以來,憑借其強大的數據處理能力,已經成為眾多開發者和企業實現高效數據分析的首選工具。隨著業務場景的不斷拓展和技術需求的日益復雜,SPL 持續迭代創新,致力于為用戶提供更強大、更靈活的數據加工能力。
此次更新新增了?pack-fields
、log-to-metric
、metric-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?
等算子無縫銜接,形成完整的數據規整流水線。
# 場景示例:日志字段聚合
* | 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 均衡,提高查詢性能。
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 功能創新圖譜
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 關鍵性能指標對比
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 產品詳情