日志服务数据加工采用ETL语言,支持全局操作事件包括字段赋值、字段提取、通用操作、带条件通用操作及条件分派等语法。提供表达式函数(100余种)、字段类操作函数和事件类操作函数,实现字段赋值、提取、映射、JSON展开、正则提取、条件判断与事件输出等数据处理功能。
当前的数据加工流程全面采用ETL语言,操作更简洁,灵活性更高。如需了解具体使用方法,可先查阅ETL语言的基础介绍,本文不再展开说明。
语法格式如下:
长期稳定更新的攒劲资源: >>>点此立即查看<<<
SET_EVENT_新字段 = 固定值SET_EVENT_新字段 = 表达式函数
说明:
新字段。若该字段已存在,新值将直接覆盖旧值。新字段的命名规则:支持中英文、数字、下划线组合,但不能以数字开头。支持中文,但不支持:,因此无法用于设置日志中的tag等内容。如需处理此类需求,请参考通用操作部分。None,则该操作将被跳过。例子1:设置固定值
添加一个新字段city,值为上海。
SET_EVENT_city = "上海"
例子2:复制字段值
调用单个表达式函数v,将现有字段ret的值赋给新字段result。
SET_EVENT_result = v("ret")
例子3:动态设置值
组合调用表达式函数,从字段ret和return中取第一个存在的值,转为小写后赋值给result。
SET_EVENT_result = str_lower(v("ret", "return"))
语法格式:
EXTRACT_EVENT_字段 = 字符串EXTRACT_EVENT_字段 = 字段操作类函数
说明:
REGEX的一种简写形式。字段的命名规则同前:中英文数字下划线,不以数字开头。不支持:,不能用于操作日志的tag,如有需要请参考通用操作。None,操作将被忽略。例子1:正则表达式提取值
从字段email中提取用户名user和邮箱域名company:
EXTRACT_EVENT_email = r"(P
注意,字符串是正则表达式REGEX的简写方式,更多用法请参考手册。
例子2:根据字段值映射新字段
根据字段level的值,通过LOOKUP映射出新字段level_info:
EXTRACT_EVENT_level = LOOKUP({"1": "info","2": "warning","3": "error", "*": "other"},"level_info")
例子3:展开JSON
根据字段request_body和response_body的值,调用JSON自动展开(默认深度10)成多个值:
EXTRACT_EVENT_request_body = JSONEXTRACT_EVENT_response_body = JSON(depth=1)
不带参数的JSON是简化写法,更多参数请参考手册。
语法格式:
TRANSFORM_ANY = 操作TRANSFORM_ANY = 操作列表
操作有三种形式,包括前两种操作的扩展版,以及第三种“事件操作类函数”:
{"新字段名": 固定值或表达式函数, "另一个字段名": ...}字段输入, 字符串或字段操作类函数操作列表:多个操作可组成列表,例如[操作1, 操作2, 操作3, ...],依次执行,除非某个操作将事件丢弃。注意,多个操作必须用[]括起来。
说明:
{key1: value1, key2: value2}的键值对形式,支持同时赋多个值。输入, 操作的配对,输入不限于单字段,例如OSSLOOKUP支持多个输入做映射。占位符区分,通常使用数字累加即可。例子1:多个字段赋值操作
同时对多个字段赋值,也支持表达式函数:
TRANSFORM_ANY = {"__topic__": "default topic", "tag:__type__": v("event_type"), "level": "1"}
例子2:根据字段值提取
根据字段request_body的值,调用JSON展开:
TRANSFORM_ANY = "request_body", JSON(depth=1)
例子3:一般操作
丢弃事件中的字段field1和field2:
TRANSFORM_ANY = DROP_F(["field1", "field2"])
例子4:多个操作
多个操作按顺序执行:
TRANSFORM_ANY = [ {"email": "abc@default.com"}, ("request_body", JSON) ]
例子5:表达式函数与操作类函数互操作
根据字段valid的值是否为true来保留或丢弃事件:
TRANSFORM_ANY = op_if(op_eq(v("valid"), "true"), KEEP, DROP)
此处KEEP和DROP分别表示保留和丢弃事件的标识。
语法格式:
TRANSFORM_EVENT = 条件操作TRANSFORM_EVENT = 条件操作列表
条件操作:带条件的通用操作——条件满足则执行操作,否则不执行。
条件操作 = 条件, 操作
注意,这里的操作也可以是操作列表,详情请参考前面“操作”部分。
条件:用于判断当前事件是否满足特定条件,有三种形式:
ANY、ALL){"字段名1", "正则表达式1"},支持NOT、多字段AND等OR关系)条件操作的列表:多个条件操作组成的列表,每次检查每个条件,满足则执行对应操作,然后继续检查下一个,除非某一步丢弃了事件。整个列表必须用[]括起来,每个条件操作需用()括起来。
条件语法说明
ANY、ALL均表示所有事件都会匹配。{key: value}是对字段值用正则进行完全匹配(从头到尾完全匹配才算满足)。例如字段user的值为"i love python",则正则"i love"或"python"均无法匹配。多个键值对之间是AND关系,必须全部满足。NOT修饰后,逻辑变为not。OR关系,只要有一个满足即执行操作。例子1:值匹配后操作
字段result为failed或failure时,设置事件主题为login_failed_event:
TRANSFORM_EVENT = {"result": r"failed|failure"}, {"__topic__": "login_failed_event"}
例子2:根据字段值判断再提取
当字段request_body存在且非空时,调用JSON展开:
TRANSFORM_EVENT = NO_EMPTY("request_body"), ("request_body", JSON)
此处NO_EMPTY是特定表达式函数,表示字段存在且非空。
例子3:高级判断再操作
当字段valid的值为failed时,丢弃事件:
TRANSFORM_EVENT = op_if(v("valid"), "failed"), DROP
例子4:多个条件操作
多个操作按顺序执行:
TRANSFORM_EVENT = [ (ANY, {"__topic__": "default_login"}), ( {"valid": "failed"}, {"__topic__": "login_failed_event"} ) ]
注意,多个条件操作需用[]括起来,每个条件操作都用()括起来。
语法格式:
DISPATCH_EVENT_占位符 = 条件操作列表
说明:形式与带条件的通用操作基本一致,区别在于——这里的多个条件操作列表,每次检查每个条件,一旦满足则执行对应的操作(或操作列表),然后跳过后面的条件操作,不再继续检查。
例子:条件分派
按字段http_status设置不同的事件主题:
DISPATCH_EVENT = [ ({"http_status": r"2\d+"} , {"__topic__": "success_event"}), ({"http_status": r"3\d+"} , {"__topic__": "redirection_event"}), ({"http_status": r"4\d+"} , {"__topic__": "unauthorized_event"}), ({"http_status": r"5\d+"} , {"__topic__": "internal_server_error_event"}), ]
同样,多个条件操作需用[]括起来,每个条件操作需用()括起来。
语法
对满足条件的事件保留或丢弃。
KEEP_EVENT = 条件DROP_EVENT = 条件
说明
条件与带条件的通用操作中的条件一致,可以是列表,请参考条件部分。
语法
对满足条件的字段名保留或丢弃。
KEEP_FIELDS = 字符串或字符串列表DROP_FIELDS = 字符串或字符串列表
字符串这里指的是正则表达式,当字段名匹配时保留或丢弃。列表则是用[]括起来的正则表达式列表,例如["abc", "xyz"]。系统还提供了一些预定义的元字段标识,如F_TIME表示时间字段,F_META表示时间、主题等字段。
说明
__time__、__topic__等。若删除了__time__,事件时间会被重置为当前时间。使用KEEP_FIELDS时需特别小心,避免误删关键字段。KEEP_FIELDS格式为:[F_TIME, F_META, F_TAGS, "f1", "f2" ]语法
RENAME_FIELDS = {"现有字段名正则1": "新字段名1", "现有字段正则2": "新字段名2", ...}
说明
这里的“现有字段名”实际是正则表达式,若有多个字段匹配,所有匹配的字段都会改为新字段名,但新字段名的值只会是其中一个(具体哪个不确定)。主要用于多种数据源的日志混合时,统一简化字段名。
将满足条件的事件输出。
语法
OUTPUT = 条件COUTPUT = 条件
说明
OUTPUT:满足条件的事件输出后,不再进行后续处理(相当于被丢弃)。COUTPUT:满足条件的事件输出后,还会继续后续处理(相当于复制了一份输出)。OUTPUT和COUTPUT支持更多行为定制,请参考事件类操作函数。表达式函数是返回特定值的表达式,通常是单个函数或其调用组合。覆盖以下几大类,目前有100多个,还在持续增加:
详细用法请参考用户手册。
基于输入字段的值进行操作。注意:当前不支持字段类操作函数与表达式函数互操作。
覆盖以下几大类,持续增加中:
详细内容请参考用户手册。
关键字字符集:
执行此策略的方法有:REGEX(动态Key名)、JSON、KV。默认字符集:[一-龥-一a-zA-Z][\w\-.]*。不符合规范的例子:123=abc、1k=200、{"123": "456"}等。
设置覆盖模式:通过参数mode
支持的提取方式:REGEX、KV、CSV、Lookup、JSON
("msg",REGEX(r"(\w+):(\d+)",{r"k_1": r"v_2"}, mode="fill-auto")
对事件进行直接操作的函数。
覆盖以下几类:
注意:事件类操作也支持与特定表达式函数互操作,例如被表达式函数返回。
更多详情请参考用户手册。
数据加工指南
介绍:
功能概述 · 概念原理
快速开始:
快速开始(SLB日志加工实战)· 控制台操作 · 源与目标 · 访问秘钥配置 · 作业诊断指南 · 性能指南 · 成本优化指南
语法:
DSL语法介绍 · 查询字符串语法 · JMES语法介绍
管理配置:
子账号授权配置
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述