全部產品
Search
文件中心

Simple Log Service:欄位值提取函數

更新時間:Jul 18, 2024

本文介紹欄位值提取函數的文法規則,包括參數解釋、函數樣本等。

函數列表

類型

函數

說明

正則提取

e_regex

根據Regex提取欄位的值並賦值給其他欄位。

支援和其他函數組合使用。相關樣本,請參見解析Java報錯日誌

JSON提取

e_json

對特定欄位中的JSON對象進行JSON操作,包括JSON展開、JMES提取或者JMES提取後再展開。

支援和其他函數組合使用。相關樣本,請參見複雜JSON資料加工

分隔字元提取

e_csv、e_psv、e_tsv

使用自訂的分隔字元與預定義的欄位名,從特定欄位中提取多個欄位。

  • e_csv:預設分隔符號為半形逗號(,)。

  • e_psv:預設分隔符號為豎線(|)。

  • e_tsv:預設分隔符號為\t。

支援和其他函數組合使用。相關樣本,請參見解析CSV格式日誌

KV模式提取

e_kv

通過quote提取多個源欄位中的索引值對資訊。

支援和其他函數組合使用。相關樣本,請參見提取字串動態索引值對

e_kv_delimit

通過分隔字元提取源欄位中的索引值對資訊。

Syslog標準提取

e_syslogrfc

根據Syslog協議由已知priority值計算出facility和severity,並且匹配相應的level資訊。

支援和其他函數組合使用。相關樣本,請參見解析Syslog標準格式資料

使用定義規則提取

e_anchor

使用定義的anchor_rules規則提取字串。

e_regex

根據Regex提取欄位的值並賦值給其他欄位。

  • 函數格式

    e_regex(key,Regex,fields_info,mode="fill-auto",pack_json=None)
  • 參數說明

    參數名稱

    參數類型

    是否必填

    說明

    key

    任意

    源欄位名。如果欄位不存在,則不進行任何操作。特殊欄位名的設定請參見事件類型

    Regex

    String

    提取欄位的Regex。 支援擷取的群組和非擷取的群組Regex。

    說明

    非捕獲有時需要使用分組,且使用首碼?:。例如\w+@\w+\.\w(?:\.\cn)?。關於分組不捕獲請參見非擷取的群組

    fields_info

    String/ List/ Dict

    匹配後目標欄位名。當Regex參數沒有配置命名捕獲的名稱時,必須配置該參數。

    mode

    String

    欄位的覆蓋模式。預設為fill-auto。關於更多欄位值及含義請參見欄位提取檢查與覆蓋模式

    pack_json

    String

    將Regex的所有匹配結果打包放入pack_json指定的欄位中。預設值是None,表示不打包。

  • 返回結果

    返回附帶新欄位值的日誌。

  • 函數樣本

    • 樣本1:提取欄位中符合運算式的值。

      • 原始日誌

        msg: 192.168.0.1 http://... 127.0.0.0
      • 加工規則

        # 提取欄位msg中出現的第一個IP地址。 
        e_regex("msg",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}","ip")
      • 加工結果

        msg: 192.168.0.1 http://... 127.0.0.0
        ip: 192.168.0.1
    • 樣本2:提取欄位中符合運算式的多個值。

      • 原始日誌

        msg: 192.168.0.1 http://... 127.0.0.0
      • 加工規則

        # 提取欄位msg中出現的兩個IP地址,分別賦值給server_ip和client_ip。
        e_regex("msg",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",["server_ip","client_ip"])
      • 加工結果

        msg: 192.168.0.1 http://... 127.0.0.0
        server_ip: 192.168.0.1
        client_ip: 127.0.0.0
    • 樣本3:通過擷取的群組提取符合運算式的值。

      • 原始日誌

        content: start sys version: deficience, err: 2
      • 加工規則

        # 使用Regex捕獲content中的version和error值。
        e_regex("content",r"start sys version: (\w+),\s*err: (\d+)",["version","error"])
      • 加工結果

        content: start sys version: deficience, err: 2
        error: 2
        version: deficience
    • 樣本4:通過命名擷取的群組提取欄位值。

      • 原始日誌

        content:  start sys version: deficience, err: 2
      • 加工規則

        e_regex("content",r"start sys version: (?P<version>\w+),\s*err: (?P<error>\d+)")
      • 加工結果

        content:  start sys version: deficience, err: 2
        error:  2
        version:  deficience
    • 樣本5:使用Regex捕獲欄位dict中的值,並動態命名欄位名和其值。

      • 原始日誌

        dict: verify:123
      • 加工規則

        e_regex("dict",r"(\w+):(\d+)",{r"k_\1": r"v_\2"})
      • 加工結果

        dict: verify:123
        k_verify: v_123
    • 樣本6:提取欄位中符合運算式的值,並打包賦值給name欄位。

      • 原始日誌

        msg: 192.168.0.1 http://... 127.0.0.0
      • 加工規則

        e_regex("msg", r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", "ip", pack_json="name")
      • 加工結果

        msg:192.168.0.1 http://... 127.0.0.0
        name:{"ip": "192.168.0.1"}
    • 樣本7:使用Regex提取欄位dict中的值,動態命名欄位名和其值,並打包賦值給name欄位。

      • 原始日誌

        dict: x:123, y:456, z:789
      • 加工規則

        e_regex("dict", r"(\w+):(\d+)", {r"k_\1": r"v_\2"}, pack_json="name")
      • 加工結果

        dict:x:123, y:456, z:789
        name:{"k_x": "v_123", "k_y": "v_456", "k_z": "v_789"}
    • 樣本8:通過擷取的群組提取符合運算式的值,並打包賦值給name欄位。

      • 原始日誌

        content: start sys version: deficience, err: 2
      • 加工規則

        e_regex( "content", r"start sys version: (\w+),\s*err: (\d+)", ["version", "error"],pack_json="name")
      • 加工結果

        content:start sys version: deficience, err: 2
        name:{"version": "deficience", "error": "2"}
  • 更多參考

    支援和其他函數組合使用。相關樣本,請參見解析Java報錯日誌

e_json

對特定欄位中的JSON對象進行JSON操作,包括JSON展開、JMES提取或者JMES提取後再展開。

  • 函數格式

    e_json(key, expand=None, depth=100, prefix="__", suffix="__", fmt="simple", sep=".", 
         expand_array=True, fmt_array="{parent}_{index}", 
         include_node=r"[\u4e00-\u9fa5\u0800-\u4e00a-zA-Z][\w\-\.]*",  
         exclude_node="", include_path="", exclude_path="",
         jmes="", output="", jmes_ignore_none=False, mode='fill-auto'
    )
    說明

    使用e_json解析目標資料,如果需要解析的字串不符合JSON資料結構,則不會進行字串解析,而返回原字串。

  • 參數說明

    參數名稱

    參數類型

    是否必填

    說明

    key

    String

    源欄位名。如果欄位不存在,則不進行任何操作。特殊欄位名的設定請參見事件類型

    expand

    Boolean

    是否將欄位展開。

    • 沒有配置jmes參數時,則預設為True,表示展開。

    • 配置jmes參數時,則預設為False,表示不展開。

    depth

    Number

    欄位展開的深度。取值範圍為1~2000,1表示只展開第一層,預設為100層。

    prefix

    String

    展開時添加為欄位名的首碼。

    suffix

    String

    展開時添加為欄位名的尾碼。

    fmt

    String

    格式化方式。取值:

    • simple(預設值):表示將節點名作為欄位名。展示形式為{prefix}{current}{suffix}

    • full:表示將父節點與當前節點合并作為欄位名。展示形式為{parent_list_str}{sep}{prefix}{current}{suffix}。分隔字元是由sep參數指定,預設為.

    • parent:表示用完整的路徑作為欄位名。展示形式為{parent}{sep}{prefix}{current}{suffix}。分隔字元是由sep參數指定,預設為.

    • root:表示將根節點與當前節點合并作為欄位名。展示形式為{parent_list[0]}{sep}{prefix}{current}{suffix}。分隔字元由sep參數指定,預設為.

    sep

    String

    父子節點格式化的分隔字元。當fmt取值為fullparentroot時需要設定。預設為.

    expand_array

    Boolean

    是否將數組展開。預設為True表示展開數組。

    fmt_array

    String

    數組展開的格式化方式,格式為{parent_rlist[0]}_{index}。也可以使用最多五個預留位置自訂格式化字串:parent_listcurrentsepprefixsuffix

    include_node

    String/ Number

    節點允許清單,表示過濾時包含的節點名稱。預設只有中文、數字、字母和_.-的節點才會被自動延伸。

    exclude_node

    String

    節點限制名單,表示過濾時排除的節點名稱。

    include_path

    String

    節點允許清單,表示過濾時包含的節點路徑。

    exclude_path

    String

    節點限制名單,表示過濾時排除的節點路徑。

    jmes

    String

    將欄位值轉化為JSON對象並通過JMES提取特定值。

    output

    String

    通過JMES提取特定值時輸出的欄位名。

    jmes_ignore_none

    Boolean

    當JMES提取不到值時是否忽略。預設為True表示忽略,否則輸出一個Null 字元串。

    mode

    String

    欄位的覆蓋模式。預設為fill-auto。關於更多欄位值及含義請參見欄位提取檢查與覆蓋模式

    • JSON展開過濾

      • 如果設定了節點允許清單,則內容必須包含在節點允許清單中然後才會在結果中出現。節點允許清單正則樣本:e_json("json_data_filed", ...., include_node=r'key\d+')

      • 如果設定了節點限制名單,則內容必須包含在節點限制名單中然後才不會在結果中出現。節點限制名單正則樣本:e_json("json_data_filed", ...., exclude_node=r'key\d+')

      • 展開節點路徑:正則include_path exclude_path從路徑開頭匹配,匹配路徑是以.分隔。

    • JMES過濾

      使用JMES選擇、計算。

      • 選擇特定JSON路徑下的元素屬性列表:e_json(..., jmes="cve.vendors[*].product",output="product")

      • 用逗號拼接特定JSON路徑下的元素屬性:e_json(..., jmes="join(',', cve.vendors[*].name)",output="vendors")

      • 計算特定JSON路徑下元素的最大屬性值:e_json(..., jmes="max(words[*].score)",output="hot_word")

      • 當特定路徑不存在或為空白時,返回一個Null 字元串:e_json(..., jmes="max(words[*].score)",output="hot_word", jmes_ignore_none=False)

    • parent_list和parent_rlist

      以如下樣本說明。

      原始日誌:

      data: { "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}}
      • parent_list是將父節點從左至右排列。

        e_json("data", fmt='{parent_list[0]}-{parent_list[1]}#{current}')

        得到的日誌:

        data:{ "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}}
        data-k2#k3:200
        data-k2#k5:300
      • parent_rlist是將父節點從右至左排列。

        e_json("data", fmt='{parent_rlist[0]}-{parent_rlist[1]}#{current}')

        得到的日誌:

        data:{ "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}}
        k2-data#k3:200
        k4-k2#k5:300
  • 返回結果

    返回附帶新欄位值的日誌。

  • 函數樣本

    • 樣本1:欄位展開操作。

      • 原始日誌

        data: {"k1": 100, "k2": 200}
      • 加工規則

        e_json("data",depth=1)
      • 加工結果

        data: {"k1": 100, "k2": 200}
        k1: 100
        k2: 200
    • 樣本2:給欄位名添加首碼和尾碼。

      • 原始日誌

        data: {"k1": 100, "k2": 200}
      • 加工規則

        e_json("data", prefix="data_", suffix="_end")
      • 加工結果

        data: {"k1": 100, "k2": 200}
        data_k1_end: 100
        data_k2_end: 200
    • 樣本3:將欄位按照不同格式展開。

      • 原始日誌

        data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
      • fmt=full格式

        e_json("data", fmt='full')
         data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
         data.k1: 100
         data.k2.k3: 200
         data.k2.k4.k5: 300
      • fmt=parent格式

        e_json("data", fmt='parent')
         data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
         data.k1: 100
         k2.k3: 200
         k4.k5: 3000
      • fmt=root格式

        e_json("data", fmt='root')
         data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
         data.k1: 100
         data.k3: 200
         data.k5: 300
    • 樣本4:使用指定分隔字元、欄位名首碼和欄位名尾碼提取JSON。

      • 原始日誌

        data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
      • 加工規則

        e_json("data", fmt='parent', sep="@", prefix="__", suffix="__")
      • 加工結果

        data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
        data@__k1__:100
        k2@__k3__:200
        k4@__k5__:300
    • 樣本5:指定fmt_array參數,按照數組方式提取JSON。

      • 原始日誌

        people: [{"name": "xm", "sex": "boy"}, {"name": "xz", "sex": "boy"}, {"name": "xt", "sex": "girl"}]
      • 加工規則

        e_json("people", fmt='parent', fmt_array="{parent_rlist[0]}-{index}")
      • 加工結果

        people: [{"name": "xm", "sex": "boy"}, {"name": "xz", "sex": "boy"}, {"name": "xt", "sex": "girl"}]
        people-0.name: xm
        people-0.sex: boy
        people-1.name: xz
        people-1.sex: boy
        people-2.name: xt
        people-2.sex: girl
    • 樣本6:使用JMES提取JSON對象。

      • 原始日誌

        data: { "people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"}],"foo": {"bar": "baz"}}
      • 加工規則

        e_json("data", jmes='foo', output='jmes_output0')
        e_json("data", jmes='foo.bar', output='jmes_output1')
        e_json("data", jmes='people[0].last', output='jmes_output2')
        e_json("data", jmes='people[*].first', output='jmes_output3')
      • 加工結果

        data: { "people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"}],"foo": {"bar": "baz"}}
        jmes_output0: {"bar": "baz"}
        jmes_output1: baz
        jmes_output2: d
        jmes_output3: ["james", "jacob"]
  • 更多參考

    支援和其他函數組合使用。相關樣本,請參見複雜JSON資料加工

e_csv、e_psv、e_tsv

使用自訂的分隔字元與預定義的欄位名,從特定欄位中提取多個欄位。

  • e_csv:預設分隔符號為半形逗號(,)。

  • e_psv:預設分隔符號為豎線(|)。

  • e_tsv:預設分隔符號為\t

  • 函數格式

    e_csv(源欄位名, 目標欄位列表, sep=",", quote='"', restrict=True, mode="fill-auto")
    e_psv(源欄位名, 目標欄位列表, sep="|", quote='"', restrict=True, mode="fill-auto")
    e_tsv(源欄位名, 目標欄位列表, sep="\t", quote='"', restrict=True, mode="fill-auto")
  • 參數說明

    參數名稱

    參數類型

    是否必填

    說明

    源欄位名

    任意

    源欄位名。如果欄位不存在,則不進行任何操作。特殊欄位名的設定請參見事件類型

    目標欄位列表

    任意

    欄位值經過分隔字元分隔後的每個值對應的欄位名。

    可以是字串的列表,例如:["error", "message", "result"]

    當欄位名中不包含逗號時,也可以直接用逗號作為分隔字元,例如:"error, message, result"

    特殊欄位名的設定請參見事件類型

    sep

    String

    分隔字元,只能是單個字元。

    quote

    String

    引用符,用於包裹值的字元。當值包含分隔字元時需要使用。

    restrict

    Boolean

    是否採用strict 模式,預設為False表示非strict 模式。當分隔值的個數與目標欄位列表數不一致時:

    • strict 模式下不進行任何操作。

    • 非strict 模式下對前幾個可以配對的欄位進行賦值。

    mode

    String

    欄位的覆蓋模式。預設為fill-auto。關於更多欄位值及含義請參見欄位提取檢查與覆蓋模式

  • 返回結果

    返回附帶新欄位值的日誌。

  • 函數樣本

    e_csv為例,e_psve_tsv功能類似。

    • 原始日誌

      content: 192.168.0.100,10/Jun/2019:11:32:16 +0800,example.aliyundoc.com,GET /zf/11874.html HTTP/1.1,200,0.077,6404,192.168.0.100:8001,200,0.060,https://image.developer.aliyundoc.com/s?q=%E8%9B%8B%E8%8A%B1%E9%BE%99%E9%A1%BB%E9%9D%A2%E7%9A%84%E5%81%9A%E6%B3%95&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei,-,Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36,-,-
    • 加工規則

      e_csv("content", "remote_addr, time_local,host,request,status,request_time,body_bytes_sent,upstream_addr,upstream_status, upstream_response_time,http_referer,http_x_forwarded_for,http_user_agent,session_id,guid")
    • 加工結果

      content:  192.168.0.100,10/Jun/2019:11:32:16 +0800,example.aliyundoc.com,GET /zf/11874.html HTTP/1.1,200,0.077,6404,192.168.0.100:8001,200,0.060,https://image.developer.aliyundoc.com/s?q=%E8%9B%8B%E8%8A%B1%E9%BE%99%E9%A1%BB%E9%9D%A2%E7%9A%84%E5%81%9A%E6%B3%95&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei,-,Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36,-,-
        body_bytes_sent:  6404
      guid:  -
      host:  example.aliyundoc.com
      http_referer:  https://image.developer.aliyundoc.com/s?q=%E8%9B%8B%E8%8A%B1%E9%BE%99%E9%A1%BB%E9%9D%A2%E7%9A%84%E5%81%9A%E6%B3%95&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei
      http_user_agent:  Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36
      http_x_forwarded_for:  -
      remote_addr:  192.168.0.100
      request:  GET /zf/11874.html HTTP/1.1
      request_time:  0.077
      session_id:  -
      status:  200
      time_local:  10/Jun/2019:11:32:16 +0800
      topic:  syslog-forwarder
      upstream_addr:  192.168.0.100:8001
      upstream_response_time:  0.060
      upstream_status:  200
  • 更多參考

    支援和其他函數組合使用。相關樣本,請參見解析CSV格式日誌

e_kv

通過quote提取多個源欄位中的索引值對資訊。

  • 函數格式

    e_kv(源欄位或源欄位列表, sep="=", quote='"', escape=False, prefix="", suffix="", mode="fill-auto")
  • 參數說明

    參數名稱

    參數類型

    是否必填

    說明

    源欄位或源欄位列表

    字串或字串列表

    欄位名或多個欄位名的列表。特殊欄位名的設定請參見事件類型

    sep

    String

    關鍵字與值的Regex的分隔字元串,預設為=,不限於單個字元。

    說明

    可以使用非捕獲分組,但不能使用捕獲分組。關於分組請參見分組

    quote

    String

    引用符,用於包裹值的字元。預設為"

    說明

    提取的動態索引值對的值一般需要quote來包括,例如:a="abc"b="xyz"如果提取對象中不包含,則只提取如下字元集的值:中文字母數字_-.%~。例如a=中文ab12_-.%~|abc b=123可以提取a: 中文ab12_-.%~b: 123

    escape

    Boolean

    是否自動提取反轉字元的值。預設為False表示否。例如key="abc\"xyz"預設提取欄位key的值為abc\,設定escape=True時,提取的值為abc"xyz

    prefix

    String

    給提取的欄位名添加首碼。

    suffix

    String

    給提取的欄位名添加尾碼。

    mode

    String

    欄位的覆蓋模式。預設為fill-auto。關於更多欄位值及含義請參見欄位提取檢查與覆蓋模式

  • 返回結果

    返回附帶新欄位值的日誌。

  • 函數樣本

    • 樣本1:使用預設分隔符號=提取索引值對資訊。

      • 原始日誌

        http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2
        說明

        如果原始日誌為request_uri: a1=1&a2=&a3=3,a2值為空白,則使用e_kv()函數無法提取出a2。您可以使用e_regex()函數進行提取,例如e_regex("request_uri",r'(\w+)=([^=&]*)',{r"\1":r"\2"},mode="overwrite")

      • 加工規則

        e_kv("http_refer")
      • 加工結果

        http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2
        q: asd
        a: 1
        b: 2
    • 樣本2:給欄位名增加首碼和尾碼。

      • 原始日誌

        http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2
      • 加工規則

        e_kv(
            "http_refer",
            sep="=",
            quote='"',
            escape=False,
            prefix="data_",
            suffix="_end",
            mode="fill-auto",
        )
      • 加工結果

        http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2
        data_q_end: asd
        data_a_end: 1
        data_b_end: 2
    • 樣本3:提取欄位content2中的索引值對資訊,使用escape參數提取反轉字元的值。

      • 原始日誌

        content2: k1:"v1\"abc", k2:"v2", k3: "v3"
      • 加工規則

        e_kv("content2", sep=":", escape=True)
      • 加工結果

        content2:  k1:"v1\"abc", k2:"v2", k3: "v3"
        k1: v1"abc
        k2: v2
        k3: v3
  • 更多參考

    支援和其他函數組合使用。相關樣本,請參見提取字串動態索引值對

e_kv_delimit

通過分隔字元提取源欄位中的索引值對資訊。

  • 函數格式

    e_kv_delimit(源欄位或源欄位列表, pair_sep=r"\s", kv_sep="=", prefix="", suffix="", mode="fill-auto")
  • 參數說明

    參數名稱

    參數類型

    是否必填

    說明

    源欄位或源欄位列表

    字串或字串列表

    欄位名或多個欄位名的列表。特殊欄位名的設定請參見事件類型

    pair_sep

    String

    用於分隔索引值對的正則字元集,預設為\s。例如\s\wabc\s等。

    說明

    如果您需要使用字串對欄位進行分隔,推薦您使用str_replaceregex_replace將字串轉換成字元作為分隔字元,然後再使用e_kv_delimit函數對欄位進行分隔。

    kv_sep

    String

    用於分隔索引值對的正則字串,預設為=,不限於單個字元。

    說明

    可以使用非捕獲分組,但不能使用捕獲分組。關於分組請參見分組

    prefix

    String

    給提取的欄位名添加首碼。

    suffix

    String

    給提取的欄位名添加尾碼。

    mode

    String

    欄位的覆蓋模式。預設為fill-auto。關於更多欄位值及含義請參見欄位提取檢查與覆蓋模式

  • 返回結果

    返回附帶新欄位值的日誌。

  • 函數樣本

    • 樣本1:使用預設分隔符號=提取索引值對資訊。

      • 原始日誌

        data: i=c1 k1=v1 k2=v2 k3=v3
        說明

        如果原始日誌為request_uri: a1=1&a2=&a3=3,a2值為空白,則使用e_kv_delimit()函數無法提取出a2。您可以使用e_regex()函數進行提取,例如e_regex("request_uri",r'(\w+)=([^=&]*)',{r"\1":r"\2"}, mode="overwrite")

      • 加工規則

        e_kv_delimit("data")
      • 加工結果

        data: i=c1 k1=v1 k2=v2 k3=v3
        i: c1
        k2: v2
        k1: v1
        k3: v3
    • 樣本2:使用分隔字元&?提取索引值對資訊。

      • 原始日誌

        data: k1=v1&k2=v2?k3=v3
      • 加工規則

        e_kv_delimit("data",pair_sep=r"&?")
      • 加工結果

        data: k1=v1&k2=v2?k3=v3
        k2: v2
        k1: v1
        k3: v3
    • 樣本3:使用Regex提取索引值對資訊。

      • 原始日誌

        data: k1=v1 k2:v2 k3=v3
      • 加工規則

        e_kv_delimit("data", kv_sep=r"(?:=|:)")
      • 加工結果

        data: k1=v1 k2:v2 k3=v3
        k2: v2
        k1: v1
        k3: v3

e_syslogrfc

根據Syslog協議由已知priority值計算出facility和severity,並且匹配相應的level資訊。

  • 函數格式

    e_syslogrfc(key, rfc, fields_info=None, mode='overwrite')
  • 參數說明

    參數名稱

    參數類型

    是否必填

    說明

    key

    任意

    欄位名,需要填入代表priority值的欄位。

    rfc

    String

    Syslog使用的RFC協議。可選值為SYSLOGRFC3164或者SYSLOGRFC5424

    fields_info

    Dict

    key表示源欄位名,value表示新欄位名。以下是預設支援重新命名的需要進行重新命名的欄位名及新名稱,支援對新名稱修改。{"_severity_":"sev","_facility_":"fac","_severitylabel_":"sevlabel","_facilitylabel_":"faclabel"}

    mode

    String

    欄位的覆蓋模式。預設為overwrite。關於更多欄位值及含義請參見欄位提取檢查與覆蓋模式

  • 返回結果

    返回添加欄位資訊的日誌。

  • 函數樣本

    • 樣本1:使用預設Syslog RFC5424協議提取facility、severity和level資訊。

      • 原始日誌

        receive_time: 1558663265
        _priority_: 13
        _version_: 1
        _log_time_: 2019-05-06 11:50:16.015554+08:00
        _hostname_: iZbp1a65********i2qZ
        _program_: root
        _procid_: -
        _msgid_: -
        _extradata_: -
        _content_: twish
      • 加工規則

        e_syslogrfc("_priority_","SYSLOGRFC5424")
      • 加工結果

        receive_time: 1558663265
        _priority_: 13
        _version_: 1
        _log_time_: 2019-05-06 11:50:16.015554+08:00
        _hostname_: iZbp1a65********i2qZ
        _program_: root
        _procid_: -
        _msgid_: -
        _extradata_: -
        _content_: twish
        _facility_: 1
        _severity_: 5
        _severitylabel_: Notice: normal but significant condition
        _facilitylabel_: user-level messages
    • 樣本2:使用Syslog RFC5424協議提取facility、severity和level資訊,並使用fields_info重新命名欄位名。

      • 原始日誌

        receive_time: 1558663265
        _priority_: 13
        _version_: 1
        _log_time_: 2019-05-06 11:50:16.015554+08:00
        _hostname_: iZbp1a65********i2qZ
        _program_: root
        _procid_: -
        _msgid_: -
        _extradata_: -
        _content_: twish
      • 加工規則

        e_syslogrfc(
            "_priority_",
            "SYSLOGRFC5424",
            {
                "_facility_": "fac",
                "_severity_": "sev",
                "_facilitylabel_": "_facility_label_",
                "_severitylabel_": "_severity_label_",
            },
        )
      • 加工結果

        receive_time: 1558663265
        _priority_: 13
        _version_: 1
        _log_time_: 2019-05-06 11:50:16.015554+08:00
        _hostname_: iZbp1a65********i2qZ
        _program_: root
        _procid_: -
        _msgid_: -
        _extradata_: -
        _content_: twish
        _facility_: 1
        _severity_: 5
        _severity_label_: Notice: normal but significant condition
        _facility_label_: user-level messages
  • 更多參考

    支援和其他函數組合使用。相關樣本,請參見解析Syslog標準格式資料

e_anchor

使用定義的anchor_rules規則提取字串。

  • 函數格式

    e_anchor(key,anchor_rules,fields,restrict=False,mode="overwrite")
  • 參數說明

    參數名稱

    參數類型

    是否必填

    說明

    key

    任意

    欄位名。

    anchor_rules

    String

    提取字串的規則,例如:User = *; Severity = *;,待提取的內容用*表示。

    控制台上展示的日誌(Key : Value形式)中,Value與冒號之間有預設的空格,填寫anchor_rules時,請勿帶上預設的空格。e_anchor

    說明

    在源欄位的值中,不能使用*作為前尾碼標識。

    fields

    任意

    源欄位值經過提取後,每個值對應的欄位名。可以為字串的列表,例如: ["user", "job", "result"]。當欄位名中不包含半形逗號(,)時,也可以直接用半形逗號(,)分隔的字串,例如:"user, job, result"。特殊欄位名(包含特殊符號,但不能包含*號)的設定請參見事件類型

    支援跳過某個欄位名,使用*代替。例如:"user,*,result",在提取的結果中會只有user和result。更多資訊,請參見樣本10。

    restrict

    Boolean

    是否採用strict 模式,預設為False表示非strict 模式。當提取的值的個數與目標欄位列表數不一致時:

    • strict 模式下不進行任何操作。

    • 非strict 模式下對前幾個可以配對的欄位進行賦值。

    mode

    String

    預設為overwrite。更多資訊,請參見欄位提取檢查與覆蓋模式

  • 返回結果

    返回提取成功後的內容。

  • 函數樣本

    • 樣本1:提取多組值。

      • 原始日誌

        content : "Aug 2 04:06:08: host=192.168.0.10: local/ssl2 notice mcpd[3772]: User=jsmith@example.com: severity=warning: 01070638:5: Pool member 172.31.51.22:0 monitor status down."
      • 加工規則

        e_anchor("content","User=*: severity=*:",["user_field","severity_field"])
      • 加工結果

        content : "Aug 2 04:06:08: host=192.168.0.10: local/ssl2 notice mcpd[3772]: User=jsmith@example.com: severity=warning: 01070638:5: Pool member 172.31.51.22:0 monitor status down."
        user_field : jsmith@example.com
        severity_field : warning
    • 樣本2:提取多jsonArray值。

      • 原始日誌

        content : '"information":{"name_list":["Twiss","Evan","Wind","like"],"university":["UCL","Stanford University","CMU"]},"other":"graduate"'
      • 加工規則

        e_anchor("content",'name_list":*,"university":*},', ["name_list","universities"])
      • 加工結果

        content : '"information":{"name_list":["Twiss","Evan","Wind","like"],"university":["UCL","Stanford University","CMU"]},"other":"graduate"'
        name_list : ["Twiss","Evan","Wind","like"]
        universities : ["UCL","Stanford University","CMU"]
    • 樣本3:提取包含特殊字元值的日誌。

      • 原始日誌

        content : (+2019) June 24 "I am iron man"
      • 加工規則

        e_anchor("content", "(+*) * \"*\"",["Year","Date","Msg"])
      • 加工結果

        content : (+2019) June 24 "I am iron man"
        Year : 2019
        Date : June 24
        Msg : I am iron man
    • 樣本4:提取包含特殊字元(不可見字元\x09)值的日誌。

      • 原始日誌

        content : \x09\x09\x09Chrome/55.0 Safari/537.36
      • 加工規則

        e_anchor("content", "\x09\x09\x09*/55.0 */537.36",["Google", "Apple"])
      • 加工結果

        content : \x09\x09\x09Chrome/55.0 Safari/537.36
        Google : Chrome
        Apple : Safari
    • 樣本5:提取包含特殊字元值的欄位content,其中MESSAGE:後的To...Subject都是content內容。

      • 原始日誌

        content : 12:08:10,651 INFO sample_server ReportEmailer:178 - DEBUG SENDING MESSAGE: 
        To: example@aliyun.com
        Subject: New line Breaks in Message
      • 加工規則

        e_anchor("content","* INFO *: \n    To: *\n    Subject: *",["time","message","email","subject"])
      • 加工結果

        content : 12:08:10,651 INFO sample_server ReportEmailer:178 - DEBUG SENDING MESSAGE: 
        To: example@aliyun.com
        Subject: New line Breaks in Message
        
        time : 12:08:10,651
        message : sample_server ReportEmailer:178 - DEBUG SENDING MESSAGE
        email : example@aliyun.com
        subject : New line Breaks in Message
    • 樣本6:提取包含特殊字元值的欄位content,不可見的\t形式。

      • 原始日誌

        content :   I'm tabbed in
      • 加工規則

        e_anchor("content","\tI'm * in","word")
        # 或者使用以下規則,複製content的value(請勿複製預設的空格)
        e_anchor("content","    I'm * in","word")
      • 加工結果

        content :   I'm tabbed in
        word : tabbed
    • 樣本7:提取包含特殊字元值的欄位content,可見的\t形式。

      • 原始日誌

        content : \tI'm tabbed in
      • 加工規則

        e_anchor("content","\tI'm * in","word")
        # 或者使用以下規則
        e_anchor("content","    I'm * in","word")
      • 加工結果

        content : \tI'm tabbed in
        word : tabbed
    • 樣本8:使用strict 模式提取日誌。

      • 原始日誌

        content :  I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood
      • 加工規則

        e_anchor("content","I * to * having",["v_word", "n_word","asd"],restrict=True)
      • 加工結果

        content : I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood
    • 樣本9:使用非strict 模式提取日誌。

      • 原始日誌

        content :  I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood
      • 加工規則

        e_anchor("content","love * fight with my * and",["test1","test2","test13"],restrict=False)
      • 加工結果

        content : I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood
        test1 : having snowball
        test2 : friends
    • 樣本10:提取某個欄位的值,並給另一個欄位賦值。

      • 原始日誌

        content: Could you compare the severity of natural disasters to man-made disasters
      • 加工規則

        e_anchor('content', 'compare the * of natural disasters to man-made *', 'n-word,*')
      • 加工結果

        content : Could you compare the severity of natural disasters to man-made disasters
        n-word : severity