本文档主要介绍字段操作函数的语法规则,包括参数解释、函数示例等。

函数列表

函数 说明
v 获得事件特定字段的值,传入多个字段名时,返回事件中第一个存在的字段的值。
e_set 添加新字段或为现有字段设置新的字段值。
e_drop_fields 删除符合条件的日志字段。
e_keep_fields 保留符合条件的日志字段。
e_pack_fields 将日志字段进行打包,并输出到新的字段中。
e_rename 重命名符合条件的日志字段。

v

您可以使用v函数获得事件特定字段的值。

  • 函数格式
    v(字段名, ..., default=None)
  • 参数说明
    参数名称 参数类型 是否必填 说明
    字段名 String 传入要获取值的事件的字段名。
    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")
    注意
    • 函数中key1value1必须成对出现。
    • 通过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:多次设置字段值。
      1. 设置字段event_type的默认值。
        e_set("event_type", "login event", "event_info", "login host")
      2. 判断字段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(字段1, 字段2, ....,regex=False)
  • 参数说明
    参数 类型 是否必填 说明
    字段 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(字段1, 字段2, ....,regex=False)
  • 参数说明
    参数 参数类型 是否必填 说明
    字段 String 日志字段名,可以为正则表达式。当字段名完全满足条件时保留该字段,删除不满足条件的字段。

    至少需要配置一个字段。

    regex Boolean 如果设置为False,表示不使用正则表达式进行匹配。当不配置该参数时,系统默认取值为True。
  • 函数示例:如果content字段的值是123,则保留contentage字段。
    • 原始日志
      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(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:打包testabcd字段到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:不打包testabcd字段,其余字段打包到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("字段1", "新字段1", "字段2", "新字段2", ..., regex=False)
    说明 函数中字段新字段必须成对出现。
  • 参数说明
    参数 参数类型 是否必填 说明
    字段 String 日志字段名,可以为正则表达式。当字段名完全满足条件时,重命名该字段。关于正则表达式的更多信息,请参见正则表达式

    至少需要配置一个字段。

    新字段 String 重命名后的字段名。
    regex Boolean 如果设置为False,表示不使用正则表达式进行匹配。当不配置该参数时,系统默认取值为True。
  • 返回结果

    返回重命名后的字段。

  • 函数示例
    • 示例1
      • 原始日志
        host: 1006
      • 加工规则
        e_rename("host","client_host")
      • 加工结果
        client_host: 1006
    • 示例2
      • 原始日志
        host: 1006
      • 加工规则
        e_rename("url","rename_url")
      • 加工结果
        host: 1006