日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

調(diào)用函數(shù)清洗數(shù)據(jù)

您可以通過日志服務(wù)數(shù)據(jù)加工函數(shù)清洗您所采集的海量日志數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)格式標(biāo)準(zhǔn)化。本文介紹調(diào)用函數(shù)清洗數(shù)據(jù)的常見場(chǎng)景和相關(guān)操作。

場(chǎng)景1:過濾日志(e_keep函數(shù)和e_drop函數(shù))

您可以使用e_drop函數(shù)或e_keep函數(shù)過濾日志,也可以使用e_if函數(shù)與DROP參數(shù)、e_if_else函數(shù)與DROP參數(shù)過濾日志。

常用規(guī)則如下所示:

  • e_keep(e_search(...) ):滿足條件時(shí)保留,不滿足條件時(shí)丟棄。

  • e_drop(e_search(...) ):滿足條件時(shí)丟棄,不滿足條件時(shí)保留。

  • e_if_else(e_search("..."), KEEP, DROP):滿足條件時(shí)保留,不滿足條件時(shí)丟棄。

  • e_if(e_search("not ..."), DROP):滿足條件時(shí)丟棄,不滿足條件時(shí)保留。

  • e_if(e_search("..."), KEEP):無意義的加工規(guī)則。

示例如下所示:

  • 原始日志

    #日志1
    __source__:  192.168.0.1
    __tag__:__client_ip__:  192.168.0.2
    __tag__:__receive_time__:  1597214851
    __topic__: app 
    class:  test_case
    id:  7992
    test_string:  <function test1 at 0x1027401e0>
    
    #日志2
    __source__:  192.168.0.1
    class:  produce_case
    id:  7990
    test_string:  <function test1 at 0x1020401e0>
  • 加工規(guī)則

    丟棄沒有__topic__字段和__tag__:__receive_time__字段的日志。

    e_if(e_not_has("__topic__"),e_drop())
    e_if(e_not_has("__tag__:__receive_time__"),e_drop())
  • 加工結(jié)果

    __source__:  192.168.0.1
    __tag__:__client_ip__:  192.168.0.2
    __tag__:__receive_time__:  1597214851
    __topic__: app 
    class:  test_case
    id:  7992
    test_string:  <function test1 at 0x1027401e0>

場(chǎng)景2:為日志空缺字段賦值(e_set函數(shù))

您可以使用e_set函數(shù)為日志空缺字段賦值。

  • 子場(chǎng)景1:原字段不存在或者為空時(shí),為字段賦值。

    e_set("result", "......value......", mode="fill")

    mode參數(shù)取值請(qǐng)參見字段提取檢查與覆蓋模式

    示例如下所示:

    • 原始日志

      name:
    • 加工規(guī)則

      e_set("name", "aspara2.0", mode="fill")
    • 加工結(jié)果

      name:  aspara2.0
  • 子場(chǎng)景2:使用GROK函數(shù)簡(jiǎn)化正則表達(dá)式,提取字段內(nèi)容。

    示例如下所示:

    • 原始日志

      content:"ip address: 192.168.1.1"
    • 加工規(guī)則

      使用GROK函數(shù)捕獲提取content字段中的IP地址。

      e_regex("content", grok(r"(%{IP})"),"addr")
    • 加工結(jié)果

      addr:  192.168.1.1
      content:"ip address: 192.168.1.1"
  • 子場(chǎng)景3:為多個(gè)字段賦值。

    e_set("k1", "v1", "k2", "v2", "k3", "v3", ......)

    示例如下所示:

    • 原始日志

      __source__:  192.168.0.1
      __topic__:
      __tag__:
      __receive_time__:
      id:  7990
      test_string:  <function test1 at 0x1020401e0>
    • 加工規(guī)則

      __topic__字段、__tag__字段和__receive_time__字段賦值。

      e_set("__topic__","app", "__tag__","stu","__receive_time__","1597214851")
    • 加工結(jié)果

      __source__:  192.168.0.1
      __topic__:  app
      __tag__:  stu
      __receive_time__:  1597214851
      id:  7990
      test_string:  <function test1 at 0x1020401e0>

場(chǎng)景3:通過判斷,刪除和重命名字段(e_search函數(shù)、e_rename函數(shù)和e_compose函數(shù))

一般情況下,推薦您使用e_compose函數(shù)進(jìn)行重復(fù)判斷和操作。

示例如下所示:

  • 原始日志

    content:123
    age:23
    name:twiss
  • 加工規(guī)則

    首先判斷content字段值是否為123,如果是,則刪除agename字段,再將content字段重命名為ctx

    e_if(e_search("content==123"),e_compose(e_drop_fields("age|name"), e_rename("content", "ctx")))
  • 加工結(jié)果

    ctx: 123

場(chǎng)景4:轉(zhuǎn)換日志參數(shù)類型(v函數(shù)、cn_int函數(shù)和dt_totimestamp函數(shù))

日志的字段和字段值在加工過程中,始終都是字符串形式,非字符串類型的數(shù)據(jù)會(huì)被自動(dòng)轉(zhuǎn)化為字符串類型。因此在調(diào)用函數(shù)時(shí),要注意各個(gè)函數(shù)能接收的參數(shù)類型。更多信息,請(qǐng)參見語法簡(jiǎn)介

  • 子場(chǎng)景1:調(diào)用op_add函數(shù)進(jìn)行字符拼接和數(shù)據(jù)相加。

    op_add函數(shù)既可以接收字符串類型,也可以接受數(shù)值類型,因此不需要做參數(shù)類型轉(zhuǎn)換。

    示例如下所示:

    • 原始日志

      a : 1
      b : 2
    • 加工規(guī)則

      e_set("d",op_add(v("a"), v("b")))
      e_set("e",op_add(ct_int(v("a")), ct_int(v("b"))))
    • 加工結(jié)果

      a:1
      b:2
      d:12
      e:3
  • 子場(chǎng)景2:運(yùn)用字段操作函數(shù)ct_int函數(shù)進(jìn)行類型轉(zhuǎn)換并調(diào)用op_mul函數(shù)進(jìn)行數(shù)據(jù)相乘。

    示例如下所示:

    • 原始日志

      a:2
      b:5
    • 加工規(guī)則

      因?yàn)関("a")和v("b")都是字符串類型,而op_mul函數(shù)的第二個(gè)參數(shù)只能接收數(shù)值類型,所以您需要通過ct_int函數(shù)將字符串轉(zhuǎn)化為整型,再傳遞給op_mul函數(shù)。

      e_set("c",op_mul(ct_int(v("a")), ct_int(v("b"))))
      e_set("d",op_mul(v("a"), ct_int(v("b"))))
    • 加工結(jié)果

      a: 2
      b: 5
      c: 10
      d: 22222
  • 子場(chǎng)景3:調(diào)用dt_parse函數(shù)和dt_parsetimestamp函數(shù)將字符串或日期時(shí)間轉(zhuǎn)換為標(biāo)準(zhǔn)時(shí)間。

    dt_totimestamp函數(shù)接收的參數(shù)類型為日期時(shí)間對(duì)象,不是字符串。因此需要調(diào)用dt_parse函數(shù)將time1的字符串值類型轉(zhuǎn)化為日期時(shí)間對(duì)象類型。您也可以直接使用dt_parsetimestamp函數(shù),它既能接收日期時(shí)間對(duì)象,也能接收字符串。更多信息,請(qǐng)參見日期時(shí)間函數(shù)

    示例如下所示:

    • 原始日志

      time1: 2020-09-17 9:00:00
    • 加工規(guī)則

      time1表示的日期時(shí)間轉(zhuǎn)化為Unix時(shí)間戳。

      e_set("time1", "2019-06-03 2:41:26")
      e_set("time2", dt_totimestamp(dt_parse(v("time1")))) 或 e_set("time2", dt_parsetimestamp(v("time1"))) 
    • 加工結(jié)果

      time1:  2019-06-03 2:41:26 
      time2:  1559529686 

場(chǎng)景5:為日志不存在的字段填充默認(rèn)值(default傳參)

部分SLS DSL表達(dá)式函數(shù)對(duì)輸入的參數(shù)有一定要求,如果不滿足,數(shù)據(jù)加工窗口會(huì)報(bào)錯(cuò)或返回默認(rèn)值。當(dāng)日志中存在必要而殘缺字段時(shí),您可以在op_len函數(shù)中填充默認(rèn)值。

重要

傳遞默認(rèn)值給后續(xù)的函數(shù)時(shí)可能會(huì)進(jìn)一步報(bào)錯(cuò),因而需要及時(shí)處理函數(shù)返回的異常。

  • 原始日志

    data_len: 1024
  • 加工規(guī)則

    e_set("data_len", op_len(v("data", default="")))
  • 加工結(jié)果

    data: 0
    data_len: 0

場(chǎng)景6:判斷日志并增加字段(e_if函數(shù)與e_switch函數(shù))

推薦使用e_if函數(shù)或e_switch函數(shù)進(jìn)行日志判斷。更多信息,請(qǐng)參見流程控制函數(shù)

  • e_if函數(shù)

    e_if(條件1, 操作1, 條件2, 操作2, 條件3, 操作3, ....)
  • e_switch函數(shù)

    e_switch函數(shù)是條件與操作的配對(duì)組合。依次根據(jù)條件進(jìn)行判斷,滿足條件的進(jìn)行對(duì)應(yīng)操作,然后直接返回操作結(jié)果。不滿足條件的不進(jìn)行對(duì)應(yīng)操作,直接進(jìn)行下一個(gè)條件判斷。如果沒有滿足任一條件并且配置了default參數(shù),則執(zhí)行default配置的操作并返回。

    e_switch(條件1, 操作1, 條件2, 操作2, 條件3, 操作3, ...., default=None)

示例如下所示:

  • 原始日志

    status1: 200
    status2: 404
  • e_if函數(shù)

    • 加工規(guī)則

      e_if(e_match("status1", "200"), e_set("status1_info", "normal"),
           e_match("status2", "404"), e_set("status2_info", "error"))
    • 加工結(jié)果

      status1: 200
      status2: 404
      status1_info: normal
      status2_info: error
  • e_switch函數(shù)

    • 加工規(guī)則

      e_switch(e_match("status1", "200"), e_set("status1_info", "normal"), 
               e_match("status2", "404"), e_set("status2_info", "error"))
    • 加工結(jié)果

      只要有一個(gè)條件滿足,就返回結(jié)果,不再進(jìn)行后續(xù)條件判斷。

      status1: 200
      status2: 404
      status1_info: normal

場(chǎng)景7:數(shù)據(jù)轉(zhuǎn)化納秒級(jí)的Unix時(shí)間戳

部分場(chǎng)景需要日志服務(wù)的數(shù)據(jù)加工能夠滿足納秒級(jí)精度時(shí)間戳的需求,當(dāng)原始日志中存在Unix時(shí)間格式字段,您可以使用字段操作函數(shù),將其解析成納秒精度的日志時(shí)間。

  • 原始日志

    {
      "__source__": "1.2.3.4",
      "__time__": 1704983810,
      "__topic__": "test",
      "log_time_nano":"1705043680630940602"
    }
  • 加工規(guī)則

    e_set(
        "__time__", op_div_floor(ct_int(v("log_time_nano")), 1000000000),
    )
    e_set(
        "__time_ns_part__", op_mod(ct_int(v("log_time_nano")), 1000000000),
    )
  • 加工結(jié)果

    {
      "__source__": "1.2.3.4",
      "__time__": 1705043680,
      "__time_ns_part__": 630940602,
      "__topic__": "test",
      "log_time_nano":"1705043680630940602"
    }

場(chǎng)景8:數(shù)據(jù)轉(zhuǎn)化微秒級(jí)標(biāo)準(zhǔn) ISO8601 時(shí)間戳

部分場(chǎng)景需要日志服務(wù)的數(shù)據(jù)加工滿足高精度時(shí)間戳的需求,當(dāng)原始日志中存在標(biāo)準(zhǔn) ISO8601時(shí)間格式的字段,您可以使用字段操作函數(shù),將其解析成微秒精度的日志時(shí)間。

  • 原始日志

    {
      "__source__": "1.2.3.4",
      "__time__": 1704983810,
      "__topic__": "test",
      "log_time":"2024-01-11 23:10:43.992847200"
    }
  • 加工規(guī)則

    e_set(
        "__time__", dt_parsetimestamp(v("log_time"), tz="Asia/Shanghai"), mode="overwrite",
    )
    e_set("tmp_ms", dt_prop(v("log_time"), "microsecond"))
    e_set(
        "__time_ns_part__", op_mul(ct_int(v("tmp_ms")), 1000),
    )
  • 加工結(jié)果

    {
      "__source__": "1.2.3.4",
      "__time__": 1704985843,
      "__time_ns_part__": 992847000,
      "__topic__": "test",
      "log_time": "2024-01-11 23:10:43.992847200",
      "tmp_ms": "992847"
    }