全部產品
Search
文件中心

Simple Log Service:流程式控制制函數

更新時間:Jul 19, 2024

本文主要介紹流程式控制制函數的文法規則,包括參數解釋、函數樣本等。

函數列表

函數

說明

e_compose

用於組合一系列操作。

  • 常用於e_if、e_switch、e_if_else中組合操作。

  • 依次叫用作業,將日誌傳遞轉換並返回最後的日誌。

  • 對於某一條日誌,如果其中某一操作刪除了日誌,則不會再執行後續操作。

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

e_if

條件與操作組合。

  • 滿足條件則進行對應操作,不滿足條件則不進行對應操作,直接進行下一個條件判斷。

  • 對於某一條日誌,如果其中某一操作刪除了日誌,則不會再執行後續操作。

e_if(
    e_has("a"), e_output("target-a"), 
    e_has("b"), e_output("target-b"),
)

例如,該加工規則相當於以下Python代碼結構:

if e_has("a"):
    e_output("target-a")
if e_has("b"):
    e_output("target-b")

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

e_if_else

根據條件判斷的結果進行對應操作。

e_if_else(e_has("a"), e_output("target-a"), e_output("target-b"))

例如,該加工規則相當於以下Python代碼結構:

if e_has("a"):
    e_output("target-a")
else:
    e_output("target-b")

e_switch

條件與操作的組合。

  • 滿足條件則進行對應操作並返回結果,不滿足條件則不進行對應操作,直接進行下一個條件判斷。

  • 如果沒有滿足任何條件,但配置了預設參數,則執行預設配置的操作並返回結果。

  • 對於某一條日誌,如果其中某一操作刪除了日誌,則不會再執行後續操作。

e_switch(
    e_has("a"), e_output("target-a"), 
    e_has("b"), e_output("target-b"),
    default=e_output("target-default"),
)

例如,該加工規則相當於以下Python代碼結構:

if e_has("a"):
    e_output("target-a")
elif e_has("b"):
    e_output("target-b")
else:
    e_output("target-default")

支援和其他函數組合使用。相關樣本,請參見多目標Logstore資料分發

e_compose

組合多個操作。

  • 函數格式

    e_compose(操作1, 操作2, ……)     
  • 參數說明

    參數名稱

    參數類型

    是否必填

    說明

    操作1

    全域操作函數

    全域操作函數或其組合。

    操作2

    全域操作函數

    全域操作函數或其組合。

  • 返回結果

    返回操作後日誌。

  • 函數樣本

    如果content欄位的值為123,則先刪除age欄位和name欄位,然後將content欄位的值設定為ctx

    • 原始日誌

      content: 123
      age: 23
      name: twiss
    • 加工規則

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

      ctx: 123
  • 更多參考

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

e_if

根據判斷條件執行操作。

  • 函數格式

    e_if(條件, 操作)
    e_if(條件1, 操作1, 條件2, 操作2, ……)
    說明

    函數中條件操作必須成對出現。

  • 參數說明

    參數名稱

    參數類型

    是否必填

    說明

    條件

    任意

    運算式或其組合。其結果不是布爾值時,會進行真假判斷。

    操作

    全域操作函數

    全域操作函數或其組合。

  • 返回結果

    返回加工處理後的日誌。

  • 函數樣本

    • 樣本1:欄位值匹配後再進行操作。

      result欄位值為failedfailure時,設定__topic__欄位的值為login_failed_event

      e_if(e_match("result", r"failed|failure"), e_set("__topic__", "login_failed_event"))
    • 樣本2:根據欄位值判斷後再提取資料。

      request_body欄位存在且值非空時,調用欄位類操作函數JSON將request_body欄位展開成多個值。

      e_if(v("request_body"), e_json("request_body"))
    • 樣本3:進階判斷後再進行操作。

      valid欄位的值為小寫failed時,丟棄日誌。

      e_if(op_eq(str_lower(v("valid")), "failed"), DROP)
    • 樣本4:多個條件按順序操作。

      e_if(True, e_set("__topic__", "default_login"), 
           e_match("valid", "failed"), e_set("__topic__", "login_failed_event")
        )
  • 更多參考

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

e_if_else

根據判斷條件的結果執行操作。

  • 函數格式

    e_if_else(條件, 真時操作, 假時操作)
  • 參數說明

    參數名稱

    參數類型

    是否必填

    說明

    條件

    任意

    運算式或其組合。其結果不是布爾值時,會進行真假判斷。

    真時操作

    全域操作函數

    全域操作函數或其組合。

    假時操作

    全域操作函數

    全域操作函數或其組合。

  • 返回結果

    返回不同條件對應的操作結果。

  • 函數樣本

    如果result欄位的值為okpass,或者status欄位的值為200,則保留日誌。

    • 原始日誌

      result: ok
      status: 400
      result: Pass
      status: 200
      result: failure
      status: 500
    • 加工規則

      e_if_else(
          op_or(e_match("result", r"(?i)ok|pass"), e_search("status== 200")), KEEP, DROP
      )
    • 加工結果:只保留第一條和第二條日誌,第三條日誌被刪除。

      result: ok
      status: 400
      result: Pass
      status: 200

e_switch

組合多個條件和操作。

  • 函數格式

    e_switch(條件1, 操作1, ……, default=None)
    說明

    函數中條件操作必須成對出現。

  • 參數說明

    參數名稱

    參數類型

    是否必填

    說明

    條件

    任意

    運算式或其組合。其結果不是布爾值時,會進行真假判斷。

    操作

    全域操作函數

    全域操作函數或其組合。

    default

    全域操作函數

    預設的全域操作函數或其組合。沒有條件滿足時執行該操作。

  • 返回結果

    返回加工處理後的日誌。

  • 函數樣本

    • 如果content欄位的值為123,則將__topic__欄位的值設定為Number。如果data欄位的值為123,則將__topic__欄位的值設定為PRO

      • 原始日誌

        __topic__:  
        age: 18
        content: 123
        name: maki
        data: 342
        __topic__:  
        age: 18
        content: 23
        name: maki
        data: 123
      • 加工規則

        e_switch(
            e_search("content==123"),
            e_set("__topic__", "Number", mode="overwrite"),
            e_search("data==123"),
            e_set("__topic__", "PRO", mode="overwrite"),
        )
      • 加工結果

        __topic__: Number
        age: 18
        content: 123
        name: maki
        data: 342
        __topic__: PRO
        age: 18
        content: 23
        name: maki
        data: 123
    • 通過e_switch文法和e_output文法結合,將符合規則的日誌投遞到不同的Logstore。其中default=e_drop(),表示將不滿足規則的日誌丟棄,不做投遞處理。若不設定default參數,則表示不滿足規則日誌都會被投遞到配置的第一個Logstore中。

      • 原始日誌

        __topic__: sas-log-dns
        test: aliyun
        
        __topic__: aegis-log-network
        test:ecs
        
        __topic__: local-dns
        test:sls
        
        __topic__: aegis-log-login
        test: sls
      • 加工規則

        e_switch(e_match("__topic__","sas-log-dns"),e_output(name="target1"),
        e_match("__topic__","sas-log-process"),e_output(name="target2"),
        e_match("__topic__","local-dns"),e_output(name="target3"),
        e_match("__topic__","aegis-log-network"),e_output(name="target4"),
        e_match("__topic__","aegis-log-login"),e_output(name="target5"),
        default=e_drop())
  • 更多參考

    支援和其他函數組合使用。相關樣本,請參見多目標Logstore資料分發