全部產品
Search
文件中心

Simple Log Service:資料加工(新版)指令

更新時間:Oct 11, 2025

本文主要介紹資料加工(新版)指令的用法和樣本。

pack-fields

將多個欄位打包,以JSON序列化輸出到新欄位,適用於需要結構化傳輸的情境(如API請求體構建)。

重要
  • 預設不處理非Varchar類型的欄位(包括__time____time_ns_part__)。

  • 預設不保留來源資料。

文法

| pack-fields -keep -ltrim -include=<include> -exclude=<exclude> as <output>

參數說明

參數

類型

必填

說明

output

String

指定打包後輸出的欄位名稱。欄位值格式為JSON格式。

include

RegExp

白名單配置,符合Regex的欄位會被打包。預設為".*" ,表示全部匹配。更多資訊,請參見Regex

exclude

RegExp

黑名單配置(優先於白名單),符合Regex的欄位不會被打包。預設為空白,表示不進行匹配判斷。更多資訊,請參見Regex

ltrim

String

在輸出欄位名稱中,去掉首碼。

keep

Bool

打包資料後是否保留被打包的來源資料。

True:輸出結果中保留被打包的原資料。

False(預設值):輸出結果中不保留被打包的來源資料。

樣本

  • 樣本1:將日誌所有欄位打包到test欄位,預設刪除被打包的原始欄位。

    • SPL語句

      * | pack-fields -include='\w+' as test
    • 輸入資料

      test1:123
      test2:456
      test3:789
    • 輸出結果

      test:{"test1": "123", "test2": "456", "test3": "789"}
  • 樣本2:將日誌所有欄位打包到test欄位,不刪除被打包的原始欄位。

    • SPL語句

      * | pack-fields -keep -include='\w+' as test
    • 輸入資料

      test1:123
      test2:456
      test3:789
    • 輸出結果

      test:{"test1": "123", "test2": "456", "test3": "789"}
      test1:123
      test2:456
      test3:789
  • 樣本3:打包test和abcd欄位到content欄位,不刪除被打包的原始欄位。

    • SPL語句

      * | pack-fields -keep -include='\w+' as content
    • 輸入結果

      abcd@#%:123
      test:456
      abcd:789
    • 輸出結果

      abcd:789
      abcd@#%:123
      content:{"test": "456", "abcd": "789"}
      test:456
  • 樣本4:不打包test和abcd欄位,其餘欄位打包到content欄位,刪除被打包的原始欄位。

    • SPL語句

      * | pack-fields -exclude='\w+' as content
    • 輸入資料

      abcd@#%:123
      test:456
      abcd:789
    • 輸出結果

      abcd:789
      content:{"abcd@#%": "123"}
      test:456
  • 樣本5:提取出欄位值中滿足Regex的所有KV結果,並打包賦值給name欄位。

    • SPL語句

      * | parse-kv -prefix='k_' -regexp dict, '(\w+):(\w+)' | pack-fields -include='k_.*' -ltrim = 'k_' as name
    • 輸入資料

      dict: x:123, y:456, z:789
    • 輸出結果

      dict:x:123, y:456, z:789
      name:{"x": "123", "y": "456", "z": "789"}

log-to-metric

將日誌格式轉化為時序儲存的格式。

重要
  • 預設忽略不符合時序資料(Metric)要求的日誌資料。

  • 自動識別原始日誌資料時間欄位的時間單位,支援秒、毫秒、微秒、納秒。

  • 預設Hash寫。

文法

| log-to-metric -wildcard -format -names=<names> -labels=<labels> -time_field=<time_field> -buckets=<buckets>

參數說明

參數

類型

必填

說明

wildcard

Bool

nameslabels指定的欄位名是否開啟通配模式。

預設為欄位精確匹配。您需要開啟通配模式時,需添加該參數。

format

Bool

​否

是否開啟自動format。

預設不開啟,加工過程中跳過非法的label資料。

開啟後對label的非法資料做 format 操作,label值不能含有 "|""#" "$" 等符號,如有的話使用 "_" 代替。

names

FieldList

日誌欄位列表,用於產生對應的Metric時序點。

如果輸入資料中的欄位,與至少一個指定的欄位名、欄位名通配模式比對,則產生該欄位對應的Metric時序點,指標名稱即為欄位名,指標值為欄位值。

比如,[mem, "mem:pct"]表示產生兩個時序點,名稱分別為memmem:pct

重要
  • 輸入欄位名需遵循Regex[a-zA-Z_:][a-zA-Z0-9_:]*,否則,將不產生該欄位對應的時序點。

  • 輸入欄位值滿足如下任一要求,否則,將不產生該欄位對應的時序點:

    • 欄位為數實值型別TINYINT、SMALLINT、INTEGER、BIGINT、HUGEINT、REAL、或者DOUBLE。

    • 欄位為文本類型VARCHAR,且其值可轉換為合法的DOUBLE類型。

時序資料格式請參考時序資料(Metric)

labels

FieldList

​否

日誌欄位列表,用於構造對應的時序Label資訊。

如果輸入資料中的欄位,與至少一個指定的欄位名、欄位名通配模式比對,則將該欄位添加至時序點的label中,label名稱即為欄位名,label值為欄位值。

比如,[host, ip]表示添加兩個時序Label,分別為hostip及其原始欄位值。

重要
  • 輸入欄位名需遵循Regex[a-zA-Z_][a-zA-Z0-9_]*,否則,產生的時序點label將不包含該欄位。

  • 輸入欄位值需不包含豎線|,否則,產生的時序點Label不覆蓋該欄位。

  • 輸入欄位類型為文本類型VARCHAR,否則,不產生對應label。

時序資料格式請參考時序資料(Metric)

time_field

String

時序資料的時間欄位。預設使用日誌中__time__欄位作為時序資料的時間欄位。

重要

輸入欄位格式為時間戳記,對應的數實值型別需為BIGINT、VARCHAR,若欄位為文本類型VARCHAR,其值可轉化為合法的BIGINT類型。

buckets

Integer

預設值32,建議設定為目標的shard數量。調節hash的範圍,用於最佳化log-to-metric運算元的寫入效能。該參數控制hash bucket的數量,影響資料在MetricStore中的分布和查詢效能。

樣本

  • 樣本1:將rt欄位所在的日誌轉換為時序資料格式。

    • SPL語句

      * | log-to-metric -names='["rt"]'
    • 輸入資料

      __time__: 1614739608
      rt: 123
    • 輸出結果

      __labels__:
      __name__:rt
      __time_nano__:1614739608
      __value__:123
  • 樣本2:將rt欄位所在的日誌轉換為時序資料格式,並將host欄位作為新增labels資訊欄位。

    • SPL語句

      * | log-to-metric -names='["rt"]' -labels='["host"]'
    • 輸入資料

      __time__: 1614739608
      rt: 123
      host: myhost
    • 輸出結果

      __labels__:host#$#myhost
      __name__:rt
      __time_nano__:1614739608
      __value__:123
  • 樣本3:將rtqps欄位所在的日誌轉換為時序資料格式,並將host欄位作為新增labels資訊欄位。

    • SPL語句

      * | log-to-metric -names='["rt", "qps"]' -labels='["host"]'
    • 輸入資料

      __time__: 1614739608
      rt: 123
      qps: 10
      host: myhost
    • 輸出結果

      __labels__:host#$#myhost
      __name__:rt
      __time_nano__:1614739608
      __value__:123
      
      __labels__:host#$#myhost
      __name__:qps
      __time_nano__:1614739608
      __value__:10

  • 樣本4:模糊比對將rt1和rt2欄位所在的日誌轉換為時序資料格式,並將host欄位作為新增labels資訊欄位。

    • SPL語句

      * | log-to-metric -wildcard -names='["rt*"]' -labels='["host"]'
    • 輸入資料

      __time__: 1614739608
      rt1: 123
      rt2: 10
      host: myhost
    • 輸出結果

      __labels__:host#$#myhost
      __name__:rt1
      __time_nano__:1614739608
      __value__:123
      
      __labels__:host#$#myhost
      __name__:rt2
      __time_nano__:1614739608
      __value__:10
  • 樣本5:將rtqps欄位所在的日誌轉換為時序資料格式,並將host欄位作為新增labels資訊欄位,同時自動格式化新增label值。

    • SPL語句

      * | log-to-metric -format -names='["rt", "qps"]' -labels='["host"]'
    • 輸入資料

      __time__: 1614739608
      rt: 123
      qps: 10
      host: myhost1|myhost2
    • 輸出結果

      __labels__:host#$#myhost1_myhost2
      __name__:rt
      __time_nano__:1614739608
      __value__:123
      
      __labels__:host#$#myhost1_myhost2
      __name__:qps
      __time_nano__:1614739608
      __value__:10
  • 樣本6:將rtqps欄位所在的日誌轉換為時序資料格式,替換欄位名稱為max_rttotal_qps,並將host欄位作為新增labels資訊欄位。

    • SPL語句

      * | project-rename max_rt = rt, total_qps = qps| log-to-metric -names='["max_rt", "total_qps"]' -labels='["host"]'
    • 輸入資料

      __time__: 1614739608
      rt: 123
      qps: 10
      host: myhost
    • 輸出結果

      __labels__:host#$#myhost
      __name__:max_rt
      __time_nano__:1614739608
      __value__:123
      
      __labels__:host#$#myhost
      __name__:total_qps
      __time_nano__:1614739608
      __value__:10
  • 樣本7:將rtqps欄位所在的日誌轉換為時序資料格式,替換欄位名稱為max_rt和total_qps,並將host欄位重新命名為hostname後作為新增labels資訊欄位。

    • SPL語句

      * | project-rename max_rt = rt, total_qps = qps, hostname=host| log-to-metric -names='["max_rt", "total_qps"]' -labels='["hostname"]'
    • 輸入資料

      __time__: 1614739608
      rt: 123
      qps: 10
      host: myhost
    • 輸出結果

      __labels__:hostname#$#myhost
      __name__:max_rt
      __time_nano__:1614739608
      __value__:123
      
      __labels__:hostname#$#myhost
      __name__:total_qps
      __time_nano__:1614739608
      __value__:10
  • 樣本8:將remote_user欄位所在的日誌轉換為時序資料格式,將status欄位作為新增labels資訊欄位,將time欄位作為時序資料的時間欄位,並指定原始日誌資料時間單位為納秒。

    • SPL語句

      * | log-to-metric -names='["remote_user"]' -labels='["status"]' -time_field='time'
    • 輸入資料

      time:1652943594
      remote_user:89
      request_length:4264
      request_method:GET
      status:200
    • 輸出結果

      __labels__:status#$#200
      __name__:remote_user
      __time_nano__:1652943594
      __value__:89

metric-to-metric

對已有時序資料進一步加工(如添加/修改/刪除標籤)。

重要
  • 輸入欄位名需遵循Regex[a-zA-Z_][a-zA-Z0-9_]*,否則,產生的時序點Label將不包含該欄位。

  • 如果三個option參數包含同一個欄位,優先順序為:add_labels > del_labels > rename_labels 。

輸出時序資料格式請參考時序資料(Metric)

文法

| metric-to-metric -format -add_labels=<add_labels> -del_labels=<del_labels> -rename_labels=<rename_labels> -buckets=<buckets>

參數說明

參數

類型

必填

說明

add_labels

Array

需要增加的Label欄位列表,用於構造新的時序Label資訊。

將未經處理資料添加至時序點的Label中,僅支援VARCHAR類型。

比如,{"host":"http://www.xxx.com", "ip":"127.0.0.1"}是未經處理資料,輸入["host", "ip"],原始的label中增加|host#$#http://www.xxx.com|ip#$#127.0.0.1 ,如果原始的label中存在host欄位,會覆蓋原欄位的值。

del_labels

Array

需要減少的Label欄位列表,用於構造新的時序Label資訊。

如果輸入資料中的欄位,原始Label中的欄位名匹配,則將原始Label中的對應欄位刪除。

比如,原始的Label值為 host#$#http://www.xxx.com|ip#$#127.0.0.1,輸入["ip"]表示刪除一個時序Label,原始的label中更新為host#$#http://www.xxx.com ,如果原始的label中存在ip欄位,不做處理。

rename_labels

Map

需要重新命名的Label欄位列表,用於構造新的時序Label資訊。

將原始時序點的Label根據Map資訊進行更新,key名稱即為欄位名,value值為新欄位名。

比如,{"host":"host_new", "ip":"ip_new"}"host"重新命名為"host_new""ip"重新命名為"ip_new"。如果原始的label中不存在對應欄位,不做處理。

format

Bool

是否開啟自動format。預設不開啟,加工過程中跳過非法資料。

開啟後:

  • 對__labels__做排序。

  • 對LabelKey 和 LabelValue 做 format 操作。

    • LabelKey:需滿足正則 “[a-zA-Z_][a-zA-Z0-9_]”,非法字元使用" "代替。

    • LabelValue:不能含有 "|", "#","$" 等符號,如有的話使用 "_" 代替。

  • 將__labels__中 LabelValue 為空白字串的Label給 drop 掉,但該條資料仍保留。

  • 去除__labels__欄位中的重複 Label,保留邏輯按LabelValue的字母序。

buckets

Integer

預設值32,建議設定為目標的shard數量。調節hash的範圍,用於最佳化metric-to-metric運算元的寫入效能。該參數控制hash bucket的數量,影響資料在MetricStore中的分布和查詢效能。

樣本

  • 樣本1:增加label。

    • SPL語句

      * | extend qps = '10'|metric-to-metric -add_labels='["qps"]'
    • 輸入資料

      __labels__:host#$#myhost
      __name__:rt
      __time_nano__:1614739608
      __value__:123
    • 輸出結果

      __labels__:host#$#myhost|qps#$#10
      __name__:rt
      __time_nano__:1614739608
      __value__:123
  • 樣本2:刪除label。

    • SPL語句

      * | metric-to-metric -del_labels='["qps"]'
    • 輸入資料

      __labels__:host#$#myhost|qps#$#10
      __name__:rt
      __time_nano__:1614739608
      __value__:123
    • 輸出結果

      __labels__:host#$#myhost
      __name__:rt
      __time_nano__:1614739608
      __value__:123
  • 樣本3:重新命名label。

    • SPL語句

      * | metric-to-metric -rename_labels='{"host":"etl_host"}'
    • 輸入資料

      __labels__:host#$#myhost|qps#$#10
      __name__:rt
      __time_nano__:1614739608
      __value__:123
    • 輸出結果

      __labels__:etl_host#$#myhost|qps#$#10
      __name__:rt
      __time_nano__:1614739608
      __value__:123
  • 樣本4:一鍵format非法資料。

    • SPL語句

      * | metric-to-metric -format
    • 輸入資料

      __labels__:host#$#myhost|qps#$#10|asda$cc#$#j|ob|schema#$#|#$#|#$#xxxx
      __name__:rt
      __time_nano__:1614739608
      __value__:123
    • 輸出結果

      __labels__:asda_cc#$#j|host#$#myhost|qps#$#10
      __name__:rt
      __time_nano__:1614739608
      __value__:123