本文主要介紹流程控制函數的語法規則,包括參數解釋、函數示例等。
函數列表
函數 | 說明 |
用于組合一系列操作。
支持和其他函數組合使用。相關示例,請參見復雜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數據分發。