字段操作函数
本文介绍字段操作函数的语法规则,包括参数解释、函数示例等。
函数列表
函数 |
说明 |
获得日志特定字段的值。当同时传入多个字段名时,返回日志中第一个存在的字段的值。支持和其他函数组合使用。 |
|
添加新字段或为现有字段设置新的字段值。支持和其他函数组合使用。 |
|
删除符合条件的日志字段。支持和其他函数组合使用。 |
|
保留符合条件的日志字段。 |
|
打包日志字段,并输出到新的字段中。 |
|
重命名符合条件的日志字段名称。支持和其他函数组合使用。 |
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:为字段设置固定值。
e_set("city", "上海")
- 示例2:复制字段值。
调用单个表达式函数,将现有字段ret的值,赋给新字段result。
- 原始数据
{"ret": "value"}
- 加工规则
e_set("result", v("ret"))
- 加工结果
ret:value result:value
- 原始数据
- 示例3:动态设置值。
调用组合表达式函数,获取第一个存在的字段值,返回其小写格式并赋值给字段result。
e_set("result", str_lower(v("ret", "return")))
- 示例4:多次设置字段值。
- 原始数据
{ "ret" : "fail" }
- 加工规则
e_set("event_type", "login event", "event_info", "login host")
- 加工结果
ret: fail event_type: login event event_info: login host
- 原始数据
- 示例1:为字段设置固定值。
- 更多参考
支持和其他函数组合使用。
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
- 测试数据
- 更多参考
支持其他它函数组合使用。
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
- 测试数据
- 示例1:将日志所有字段打包到test字段,默认删除被打包的原始字段。
e_rename
调用e_rename函数重命名符合条件的日志字段名称。
- 函数格式
e_rename("key1", "new key1", "key2", "new key2", ..., regex=false)
函数中key和new key必须成对出现。
- 参数说明
参数
参数类型
是否必填
说明
key
String
是
日志字段名,可以为正则表达式。当字段名完全满足条件时,重命名该字段。至少需要配置一个字段。
new key
String
是
重命名后的字段名。
regex
Boolean
否
如果设置为false,表示不使用正则表达式进行匹配。当不配置该参数时,系统默认取值为true。
- 返回结果
返回重命名后的字段。
- 函数示例
- 示例1:将字段host重命名为client_hos。
- 测试数据
{ "host": 1006 }
- 加工规则
e_rename("host","client_host")
- 加工结果
client_host: 1006
- 测试数据
- 示例2:不存在字段时,不进行重命名。
- 测试数据
{ "host": 1006 }
- 加工规则
e_rename("url","rename_url")
- 加工结果
host: 1006
- 测试数据
- 示例1:将字段host重命名为client_hos。
- 更多参考
支持和其他函数组合使用。