本文主要介紹流程式控制制函數的文法規則,包括參數解釋、函數樣本等。
函數列表
函數 | 說明 |
用於組合一系列操作。
支援和其他函數組合使用。相關樣本,請參見複雜JSON資料加工。 | |
條件與操作組合。
例如,該加工規則相當於以下Python代碼結構:
支援和其他函數組合使用。相關樣本,請參見複雜JSON資料加工。 | |
根據條件判斷的結果進行對應操作。
例如,該加工規則相當於以下Python代碼結構:
| |
條件與操作的組合。
例如,該加工規則相當於以下Python代碼結構:
支援和其他函數組合使用。相關樣本,請參見多目標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欄位值為failed或failure時,設定__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欄位的值為ok或pass,或者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資料分發。