You need to enable JavaScript to run this app.
导航
事件处理函数
最近更新时间:2024.07.02 10:17:39首次发布时间:2023.02.16 18:06:17

本文档介绍事件处理函数的语法与格式、相关的场景示例等。

e_output 函数

输出到指定别名的目标主题中。其中,日志主题别名即创建加工任务时指定的目标名称

函数语法/格式

e_output(topic="日志主题别名")

参数说明如下:

参数

参数类型

是否必选

默认值

取值范围

说明

topic

String

/

/

日志主题别名。

函数示例

  • 场景:根据日志中字段 is_output 的值判断是否要输出该日志到别名为 target-1 的日志主题中。

  • 加工规则:

    c_if(v("is_output"), e_output("target-1"))
    
  • 日志样例:

    [
        {
            "is_output":1,
            "content":"hello world"
        },
        {
            "is_output":0,
            "content":"test content"
        }
    ]
    
  • 加工结果:

    [
        {
            "is_output":1,
            "content":"hello world"
        }
    ]
    

    说明

    第一条日志输出到别名为 target-1 的日志主题中,第二条日志不输出。

e_auto_output 函数

将日志动态分发到不同的日志主题中。例如日志字段 service 的值为 toskafka,您可以指定 e_auto_output 函数根据 service 的值将日志动态分发到名为 toskafka 的日志主题中。如果日志主题 toskafka 不存在,系统会先创建日志主题。

函数语法/格式

e_auto_output(project='日志项目名称',topic='日志主题名称',tags='日志主题标签',index='索引配置')

参数说明如下:

说明

  • 如果已存在相同名称的日志项目、日志主题,系统不会重复创建。
  • 通过字段值动态创建日志项目、日志主题时,字段值必须符合资源命名要求,否则使用 e_auto_output 函数时将报错。详细说明,请参考资源命名限制

参数

参数类型

是否必选

默认值

取值范围

说明

project

String

/

/

设置日志项目名称。

topic

String

/

/

设置日志主题名称。

tags

String

/

/

设置日志主题标签,格式为 key:value,多个标签之间使用半角逗号(,)分隔。例如 tags='a:b,c:d' 表示为该日志主题添加两组标签 a:bc:d

index

String

full_text

full_text

设置日志主题的索引。

  • full_text:开启全文索引。
  • 空字符串:关闭全文索引。

函数示例

函数示例 1:

  • 场景:从 service 字段中提取值,然后根据该值将日志动态分发到对应的日志主题中,并且为该日志主题开启全文索引。如果日志项目和日志主题不存在,系统会根据您在函数中指定的值进行创建。

  • 加工规则:

    e_auto_output(project='myproject',topic=v('service'))
    
  • 日志样例:

    // 日志 1
    {
      "service": "tos",
      "week": "Monday,Tuesday,Wednesday"
    }
    // 日志 2
    {
      "service": "kafka",
      "week": "Monday,Tuesday,Wednesday"
    }
    
  • 加工结果:

    • 将日志 1 分发到 myproject 日志项目下的 tos 日志主题中。

      {
        "service": "tos",
        "week": "Monday,Tuesday,Wednesday"
      }
      
    • 将日志 2 分发到 myproject 日志项目下的 kafka 日志主题中。

      {
        "service": "kafka",
        "week": "Monday,Tuesday,Wednesday"
      }
      

函数示例 2:

  • 场景:从 project-name 字段和 topic-name 字段中提取值,然后根据该值将日志分发到对应的日志主题中,并且为该日志主题添加标签 key1:value1key2:value2,以及开启全文索引。如果日志项目和日志主题不存在,系统会根据您在函数中指定的值进行创建。

  • 加工规则:

    e_auto_output(v('project-name'),v('topic-name'),tags='key1:value1,key2:value2')
    
  • 日志样例:

    // 日志 1
    {
      "project-name": "myproject01",
      "topic-name": "accesslog01",
      "week": "Monday,Tuesday,Wednesday"
    }
    // 日志 2
    {
      "project-name": "myproject02",
      "topic-name": "accesslog02",
      "week": "Monday,Tuesday,Wednesday"
    }
    
  • 加工结果:

    • 将日志 1 分发到 myproject01 日志项目下的 accesslog01 日志主题中,并且为该日志主题添加标签 key1:value1key2:value2,以及开启全文索引。

      {
        "project-name": "myproject01",
        "topic-name": "accesslog01",
        "week": "Monday,Tuesday,Wednesday"
      }
      
    • 将日志 2 分发到 myproject02 日志项目下的 accesslog02 日志主题中,并且为该日志主题添加标签 key1:value1key2:value2,以及开启全文索引。

      {
        "project-name": "myproject02",
        "topic-name": "accesslog02",
        "week": "Monday,Tuesday,Wednesday"
      }
      

函数示例 3:

  • 场景:从 project-name 字段和 topic-name 字段中提供日志项目名和日志主题名,然后根据该值将日志分发到对应的日志主题中,且关闭该日志主题的全文索引。如果日志项目和日志主题不存在,系统会根据您在函数中指定的值进行创建。

  • 加工规则:

    e_auto_output(v('project-name'),v('topic-name'),index='')
    
  • 日志样例:

    // 日志 1
    {
      "project-name": "myproject01",
      "topic-name": "accesslog01",
      "week": "Monday,Tuesday,Wednesday"
    }
    // 日志 2
    {
      "project-name": "myproject02",
      "topic-name": "accesslog02",
      "week": "Monday,Tuesday,Wednesday"
    }
    
  • 加工结果:

    • 将日志 1 分发到 myproject01 日志项目下的 accesslog01 日志主题中,并且关闭该日志主题的全文索引。

      {
        "project-name": "myproject01",
        "topic-name": "accesslog01",
        "week": "Monday,Tuesday,Wednesday"
      }
      
    • 将日志 2 分发到 myproject02 日志项目下的 accesslog02 日志主题中,并且关闭该日志主题的全文索引。

      {
        "project-name": "myproject02",
        "topic-name": "accesslog02",
        "week": "Monday,Tuesday,Wednesday"
      }
      

e_split 函数

使用分隔符对特定字段进行拆分,拆分结果分裂为多条日志。

函数语法/格式

e_split(field, sep=",", quote='"', lstrip=Ture, jmes=None, output=None)

分裂规则:

  • 规则 1:如果配置了 jmes 参数,则将日志字段的值转化为 JSON 列表,再使用 jmes 提取值作为下一步的值。此时 sep 和 quote 参数的指定无效。如果没有配置 jmes 参数,按规则 2 进行分裂。
  • 规则 2:如果上一步的值是一个列表或 JSON 列表格式的字符串,则按照此列表分裂并结束处理,此时 sep 和 quote 参数的指定无效。如果不是 JSON 列表或 JSON 列表字符串,按规则 3 进行分裂。
  • 规则 3:使用 sepquotelstrip 将上一步的值进行 CSV 解析,根据解析后的多个值进行分裂并结束处理。

参数说明如下:

参数

参数类型

是否必选

默认值

取值范围

说明

field

String

/

/

待分裂的字段名。

sep

String

任意单字符

分隔符。

quote

String

"

任意单字符

用于引用多个值的配对类字符的引用符。

lstrip

Boolean

True

/

是否将值左边的空格去掉,默认为 True,仅字符串分裂时生效。

jmes

String

None

/

将字段值转化为 JSON 对象,使用 JMES 提取特定值,再进行分裂操作。

output

String

None

/

设置一个新的字段名,默认覆盖旧的相同字段。

函数示例

  • 场景:根据字段 city 的值分裂为多条日志。

  • 加工规则:

    e_split("city")
    
  • 日志样例:

    {
        "content":"hello world",
        "city":"shanghai,hangzhou,chengdu"
    }
    
  • 加工结果:

    [
        {
            "content":"hello world",
            "city":"shanghai"
        },
        {
            "content":"hello world",
            "city":"hangzhou"
        },
        {
            "content":"hello world",
            "city":"chengdu"
        }
    ]
    

e_drop 函数

丢弃符合条件的日志。

函数语法/格式

e_drop(condition=条件)

参数说明如下:

参数

参数类型

是否必选

默认值

取值范围

说明

condition

Boolean

True

/

是否丢弃。

函数示例

  • 场景:根据日志字段 city 的值判断是否丢弃该日志。

  • 加工规则:

    c_if(op_eq(v("city"), "shanghai"), e_drop())
    
  • 日志样例:

    [
        {
            "content":"hello world",
            "city":"shanghai"
        },
        {
            "content":"hello world",
            "city":"hangzhou"
        }
    ]
    
  • 加工结果:

    {
        "content":"hello world",
        "city":"hangzhou"
    }
    

e_keep 函数

保留符合条件的日志,不符合条件则丢弃。

函数语法/格式

e_keep(condition=条件)

参数说明如下:

参数

参数类型

是否必选

默认值

取值范围

说明

condition

Boolean

True

/

是否保留。

函数示例

  • 场景:根据日志字段 city 的值判断是否保留该日志。

  • 加工规则:

    c_if(op_eq(v("city"), "shanghai"), e_keep())
    
  • 日志样例:

    [
        {
            "content":"hello world",
            "city":"shanghai"
        },
        {
            "content":"hello world",
            "city":"hangzhou"
        }
    ]
    
  • 加工结果:

    {
        "content":"hello world",
        "city":"shanghai"
    }