本文介紹字段操作函數的語法規則,包括參數解釋、函數示例等。
函數列表
函數 | 說明 |
獲得日志特定字段的值。當同時傳入多個字段名時,返回日志中第一個存在的字段的值。 支持和其他函數組合使用。相關示例,請參見調用函數清洗數據。 | |
添加新字段或為現有字段設置新的字段值。 支持和其他函數組合使用。相關示例,請參見調用函數清洗數據。 | |
刪除符合條件的日志字段。 支持和其他函數組合使用。相關示例,請參見復雜JSON數據加工。 | |
保留符合條件的日志字段。 | |
打包日志字段,并輸出到新的字段中。 | |
重命名符合條件的日志字段名稱。 支持和其他函數組合使用。相關示例,請參見調用函數清洗數據。 |
v
調用v函數獲得日志特定字段的值。當同時傳入多個字段名時,返回日志中第一個存在的字段的值。
函數格式
v(key, ..., default=None)
參數說明
參數
參數類型
是否必填
說明
key
String
是
指定字段名。
default
任意
否
指定的字段名不存在時,返回default的值。默認值為None。
返回結果
返回日志中第一個存在的字段值。不存在時返回default參數的值。
函數示例
將content字段的值賦給test_content字段。
原始日志
content: hello
加工規則
e_set("test_content", v("content"))
加工結果
content: hello test_content: hello
更多參考
支持和其他函數組合使用。相關示例,請參見調用函數清洗數據。
e_set
調用e_set函數添加新字段或為現有字段設置新的字段值。
函數格式
e_set(key1, value1, key2, value2, mode="overwrite")
重要函數中key1和value1必須成對出現。
通過e_set函數設置時間字段F_TIME或__time__時,必須設置為數字類型的字符串。
e_set(F_TIME, "abc") # 錯誤 e_set(F_TIME, "12345678") # 正確
參數說明
參數
參數類型
是否必填
說明
key
String
是
目標字段名,也可以通過字符串表達式獲得該字段名。特殊字段名的設置請參見事件類型。
value
任意
是
新的字段值。非字符串都轉化成字符串放入日志中,其中元組、列表、字典會轉換成JSON對象的字符串。關于字符串轉換請參見賦值自動轉換。
說明如果傳遞的值是None,則不會進行更新操作。
mode
String
否
字段的覆蓋模式。默認為overwrite。更多信息,請參見字段提取檢查與覆蓋模式。
返回結果
返回更新后的日志。
函數示例
示例1:為字段設置固定值。
添加一個新字段city,字段值為上海。
e_set("city", "上海")
示例2:復制字段值。
調用單個表達式函數,將現有字段ret的值,賦給新字段result。
e_set("result", v("ret"))
示例3:動態設置值。
調用組合表達式函數,獲取第一個存在的字段值,返回其小寫格式并賦值給字段result。
e_set("result", str_lower(v("ret", "return")))
示例4:多次設置字段值。
設置字段event_type的值。
e_set("event_type", "login event", "event_info", "login host")
如果字段ret的值為fail,然后將字段event_type的值設置為login failed event。
e_if(e_search('ret==fail'), e_set("event_type", "login failed event" ))
更多參考
支持和其他函數組合使用。相關示例,請參見調用函數清洗數據。
e_drop_fields
調用e_drop_fields函數刪除符合條件的日志字段。
函數格式
e_drop_fields(key1, key2, ....,regex=False)
參數說明
參數
參數類型
是否必填
說明
key
String
是
日志字段名,可以為正則表達式。當字段名完全滿足條件時刪除該字段,保留不滿足條件的字段。關于正則表達式的更多信息,請參見正則表達式。
至少需要配置一個日志字段。
regex
Boolean
否
如果設置為False,表示不使用正則表達式進行匹配。當不配置該參數時,系統默認取值為True。
返回結果
返回刪除后的日志。
函數示例
如果content字段的值為123,則刪除content字段和age字段。
原始日志
age: 18 content: 123 name: twiss
加工規則
e_if(e_search("content==123"), e_drop_fields("content", "age",regex=True))
加工結果
name: twiss
更多參考
支持其他它函數組合使用。相關示例,請參見復雜JSON數據加工。
e_keep_fields
調用e_keep_fields函數保留符合條件的日志字段。
日志服務中包含內置的元字段,例如__time__、__topic__等。如果在調用e_keep_fields函數時沒有保留__time__字段,則日志時間將被重置為系統當前時間。如果您不希望重置元字段的值,需要將元字段放入列表中,常見格式為F_TIME, F_META, F_TAGS, "f1", "f2"。更多信息,請參見固定標識。
函數格式
e_keep_fields(key1, key2, ....,regex=False)
參數說明
參數
參數類型
是否必填
說明
key
String
是
日志字段名,可以為正則表達式。當字段名完全滿足條件時保留該字段,刪除不滿足條件的字段。
至少需要配置一個字段。
regex
Boolean
否
如果設置為False,表示不使用正則表達式進行匹配。當不配置該參數時,系統默認取值為True。
返回結果
返回保留的日志。
函數示例
如果content字段的值是123,則保留content和age字段。
原始日志
age: 18 content: 123 name: twiss
加工規則
e_if(e_search("content==123"), e_keep_fields("content", "age"))
加工結果
age: 18 content: 123
e_pack_fields
調用e_pack_fields函數將日志字段進行打包,并輸出到新的字段中。
函數格式
e_pack_fields(output_fields,include=".*",exclude=None,drop_packed=True)
參數說明
參數
類型
是否必填
說明
output_field
String
是
指定打包后輸出的字段名稱。其值為JSON格式。
include
String
否
白名單配置,符合正則表達式的字段會被打包。默認為".*" ,表示全部匹配。更多信息,請參見正則表達式。
exclude
String
否
黑名單配置,符合正則表達式的字段不會被打包。默認為None,表示不進行匹配判斷。更多信息,請參見正則表達式。
drop_packed
Boolean
否
打包數據后是否刪除被打包的原數據,默認為True。
True(默認值):輸出結果中刪除被打包的原數據。
False:輸出結果中不刪除被打包的原數據。
返回結果
返回被打包后的日志數據。
函數示例
示例1:將日志所有字段打包到test字段,默認刪除被打包的原始字段。
原始日志
test1:123 test2:456 test3:789
加工規則
e_pack_fields("test")
加工結果
test:{"test1": "123", "test2": "456", "test3": "789"}
示例2:將日志所有字段打包到test字段,不刪除被打包的原始字段。
原始日志
test1:123 test2:456 test3:789
加工規則
e_pack_fields("test",drop_packed=False)
加工結果
test:{"test1": "123", "test2": "456", "test3": "789"} test1:123 test2:456 test3:789
示例3:打包test和abcd字段到content字段,不刪除被打包的原始字段。
原始日志
abcd@#%:123 test:456 abcd:789
加工規則
e_pack_fields("content", include="\w+", drop_packed=False)
加工結果
abcd:789 abcd@#%:123 content:{"test": "456", "abcd": "789"} test:456
示例4:不打包test和abcd字段,其余字段打包到content字段,刪除被打包的原始字段。
原始日志
abcd@#%:123 test:456 abcd:789
加工規則
e_pack_fields("content", exclude="\w+", drop_packed=True)
加工結果
abcd:789 content:{"abcd@#%": "123"} test:456
e_rename
調用e_rename函數重命名符合條件的日志字段名稱。
函數格式
e_rename("key1", "new key1", "key2", "new key2", ..., regex=False)
說明函數中key和new key必須成對出現。
new key
已存在于源日志時,不進行任何操作。參數說明
參數
參數類型
是否必填
說明
key
String
是
日志字段名,可以為正則表達式。當字段名完全滿足條件時,重命名該字段。關于正則表達式的更多信息,請參見正則表達式。
至少需要配置一個字段。
new key
String
是
重命名后的字段名。
regex
Boolean
否
如果設置為False,表示不使用正則表達式進行匹配。當不配置該參數時,系統默認取值為True。
返回結果
返回重命名后的字段。
函數示例
示例1:將字段host重命名為client_host。
原始日志
host: 1006
加工規則
e_rename("host","client_host")
加工結果
client_host: 1006
示例2:不存在字段時,不進行重命名。
原始日志
host: 1006
加工規則
e_rename("url","rename_url")
加工結果
host: 1006
更多參考
支持和其他函數組合使用。相關示例,請參見調用函數清洗數據。