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

函数列表

类型 函数 说明
事件操作 e_drop 根据条件,丢弃事件。
e_keep 根据条件,保留事件。
事件分裂 e_split 基于字段的值分裂出多个事件。 也支持通过JMES提取字段后再进行分裂。
输出事件 e_output/e_coutput 输出事件到配置的特定目标,并配置输出时的topic、source、tag等信息。
  • e_output:输出事件后会删除事件。
  • e_coutput:输出事件后会保留原事件,原事件会继续进行后续操作。

e_drop

  • 函数格式
    e_drop(condition=True)
    支持固定标示DROP,等价e_drop()
  • 参数说明
    参数 参数类型 是否必填 说明
    condition Bool 默认为True,一般传递一个条件判断函数的结果。
  • 返回结果

    根据条件,满足条件则会删除事件并返回None。否则不删除并返回原事件。

  • 函数示例
    • 示例1:当__programe__字段的值是access1的时候保留日志,否则删除该日志。
      原始日志(两条):
      __programe__: access
      age:  18
      content:  123
      name:  maki
      __programe__: error
      age:  18
      content:  123
      name:  maki
      加工规则:
      e_if(e_search("__programe__==access"), DROP)
      加工结果:
      __programe__: error
      age:  18
      content:  123
      name:  maki
    • 示例2:使用e_drop()删除日志,条件为True。
      原始日志:
      k1: v1
      k2: v2
      k3: k1
      加工规则:
      e_drop(e_search("k1==v1"))
      加工结果:
      #因为k1==v1条件为True,因此该条日志被删除。
    • 示例3:使用e_drop(),条件为False,则保留日志。
      原始日志:
      k1: v1
      k2: v2
      k3: k1
      加工规则:
      e_drop(e_search("not k1==v1"))
      加工结果:
      k1: v1
      k2: v2
      k3: k1
    • 示例4:使用e_drop(),如果不设置条件,则使用默认条件True。
      原始日志:
      k1: v1
      k2: v2
      k3: k1
      加工规则:
      e_drop()    # 删除所有日志
      加工结果:
      #该条日志删除。

e_keep

e_keepe_drop都会丢弃事件。只是e_keep不满足时丢弃,而e_drop则是满足时丢弃。
# 以下4个等价
e_if_else(e_search("f1==v1"), KEEP, DROP)
e_if_else(e_search("not f1==v1"), DROP) 
e_keep(e_search("f1==v1"))
e_drop(e_search("not f1==v1"))

# 以下代码无意义
e_if(e_search("..."), KEEP)    # 搜索后KEEP, 没有意义的代码
e_keep()
  • 函数格式
    e_keep(condition=True)
    支持固定标示KEEP,等价于e_keep()
  • 参数说明
    参数 参数类型 是否必填 说明
    condition Bool 默认为True,一般传递一个条件判断函数的结果。
  • 返回结果

    满足条件则返回原事件,不满足条件则返回None表示删除。

  • 函数示例
    • 示例1:当__programe__字段的值是access1的时候保留日志,否则删除日志。
      原始日志(两条):
      __programe__: access
      age:  18
      content:  123
      name:  maki
      __programe__: error
      age:  18
      content:  123
      name:  maki
      加工规则:
      e_keep(e_search("__programe__==access"))
      #等价于
      e_if(e_search("not __programe__==access"), DROP) 
      #等价于
      e_if_else(e_search("__programe__==access"), KEEP, DROP)  
      加工结果:将__programe__字段的值是access的日志保留。
      __programe__: access
      age:  18
      content:  123
      name:  maki
    • 示例2:使用e_keep(),条件为True,保留日志。
      原始日志:
      k1: v1
      k2: v2
      k3: k1
      加工规则:
      e_keep(e_search("k1==v1"))
      加工结果:
      k1: v1
      k2: v2
      k3: k1
    • 示例3:使用e_keep(),条件判断结果为False,删除日志。
      原始日志:
      k1: v1
      k2: v2
      k3: k1
      加工规则:
      e_keep(e_search("not k1==v1"))
      加工结果:
      #因为条件是False,所以删除该日志。
    • 示例4:使用e_keep(),条件为False。
      原始日志:
      k1: v1
      k2: v2
      k3: k1
      加工规则:
      e_keep(False)
      加工结果:
      #日志被删除。

e_split

  • 函数格式
    e_split(字段名, sep=',', quote='"', lstrip=True, jmes=None, output=None)
  • 分裂规则
    1. 如果配置了参数jmes,则将事件字段的值转化为JSON列表,并且用JMES提取值将其作为下一步的值。如果没有配置参数jmes,则将字段的值直接作为下一步值。
    2. 如果上一步的值是一个列表,或JSON列表格式的字符串,则按照此列表分裂并结束处理。否则使用sepquotelstrip将上一步的值进行CSV解析,根据解析后的多个值进行分裂并结束处理。
  • 参数说明
    参数名称 参数类型 是否必填 说明
    字段名 String 需要分裂的字段名。特殊字段名的设置请参见事件类型
    sep String 用于分隔多个值的分隔符。
    quote String 用于分隔多个值的配对类字符的分隔符。
    lstrip String 是否将值左边的空格去掉。默认为True。
    jmes String 将字段值转化为JSON对象,并使用JMES提取特定值,然后再进行分裂操作。
    output String 设置一个新的字段名,默认覆盖旧字段名。
  • 返回结果

    返回日志列表,列表中字段的值都是源列表中的值。

  • 函数示例
    原始日志:
    __topic__:   
    age:  18
    content:  123
    name:  maki
    
    __topic__:   
    age:  18
    content:  123
    name:  maki
    加工规则:
    e_set("__topic__", "V_SENT,V_RECV,A_SENT,A_RECV")
    e_split("__topic__")
    加工结果:
    __topic__:  A_SENT
    age:  18
    content:  123
    name:  maki
    
    __topic__:  V_RECV
    age:  18
    content:  123
    name:  maki
    
    ...

e_output/e_coutput

  • 函数格式
    e_output(name=None, project=None, logstore=None, topic=None, source=None, tags=None)
    e_coutput(name=None, project=None, logstore=None, topic=None, source=None, tags=None)
  • 参数说明
    参数名称 参数类型 是否必填 说明
    name String 在控制台上保存加工任务时设置的存储目标的目标名称,默认为None,表示用户配置的第一个目标名称。
    project String 输出日志到已存在的Project。如果不设置,则默认输出到加工任务配置的Project。
    logstore String 输出日志到已存在的Logstore。如果不设置,则默认输出到加工任务配置的Logstore。
    topic String 为日志设置新的Topic。
    source String 为日志设置新的Source。
    tags Dict 设置日志新的标签,以字典格式传入。
    说明 关键字不需要加__tag__:前缀。
  • 返回结果
    • e_output输出日志后会删除日志。
    • e_coutput输出日志后会保留日志,继续进行后续操作。
    说明
    • DSL最后所有未删除的事件都会默认输出到加工任务配置的第一个目标,因此只配置了一个输出目标时,最后并不一定要调用e_output
    • 由于默认会使用加工任务配置的第一个目标,因此只有一个目标并调用e_output时推荐不传入参数name
  • 函数示例
    原始日志:
    __topic__:  
    k1: v1
    k2: v2
    x1: v3
    x5: v4
    加工规则:
    e_if(e_match("k2", r"\w+"), e_output(name="target2", source="source1", topic="topic1"))
    加工结果:
    __topic__:  topic1
    k1: v1
    k2: v2
    x1: v3
    x5: v4
    预览时不会输出到目标Logstore,而是输出到指定的Logstoreinternal-etl-log中。
    说明 internal-etl-log是用户首次执行数据加工预览时系统在加工任务当前Project下自动创建的专属Logstore,不支持修改配置,不能写入其他数据,也不会收取任何费用。