解析函数说明

威胁分析与响应CTDR(Cloud Threat Detection and Response)支持在云安全中心控制台接入安全厂商日志并进行统一的风险管理。解析函数是指对采集到的安全厂商日志字段(存储在CTDR专属Logstore)进行标准化处理的具体规则。本文介绍CTDR支持的解析函数及其说明,以帮助您完成日志解析规则设置。

解析函数类型说明

解析函数类型

说明

直接映射

是指对原始字段的值不作任何处理直接映射到目标字段。

例如把A字段的值直接映射到B字段。

常量映射

是指没有原始字段,把常量直接赋值给目标字段。

例如将“abc”赋值给B字段。

字典映射

是指对于一些安全厂商日志的固定字段,按照字典规则把对应字段的值映射到CTDR标准字段对应的值。

例如CTDR的标准字段alert_level取值有1(信息)、2(低)、3(中)、4(高)、5(严重),您需要在字典里,把安全厂商日志对应字段的值映射到CTDR的告警等级alert_level里,可构建如下映射表:

  • othernoneunknown--> 1(信息);

  • low--> 2(低);

  • medium--> 3(中);

  • high--> 4(高)。

配置好字典映射规则后,就可以完成安全厂商日志告警等级的标准化。

函数映射

是指将一个原始字段经过函数处理,把处理后的值映射到目标字段上。

函数映射支持的函数

函数名

语法

函数用途

入参说明

样例

JSON_VALUE

JSON_VALUE(content, path)

从JSON对象中获取数据,支持多层获取。

  • content:VARCHAR类型,指定需要解析的JSON对象,使用字符串表示。字符串不包含"$"、"[]"、"*"、"."。

  • path:VARCHAR类型,解析JSON的路径表达式。

JSON_VALUE(json, '$.passenger_name')

LOWER

LOWER(A)

返回转换为小写字符的字符串。

A:VARCHAR类型。

LOWER(var1)

UPPER

UPPER(A)

返回转换为大写字符的字符串。

A:VARCHAR类型。

UPPER(var1)

SUBSTRING

  • SUBSTRING(a, start)

  • SUBSTRING(a, start, len)

获取字符串的子串,从指定位置start开始截取。如果提供了长度len,则截取该长度的子串;若未指定len,则截取至字符串末尾。参数start从1开始计数,当start为0时视为1;若start为负数,则表示从字符串末尾向前计算的位置。

  • a:VARCHAR类型,指定的字符串。

  • len:INT类型,截取的长度。

  • start:INT类型,截取从字符串a开始的位置。

  • SUBSTRING(str, 2)

  • SUBSTRING(str, -2, 1)

KEYVALUE

KEYVALUE( str, split1, split2, key_name)

该函数用于解析字符串str中的键值对。解析过程基于两个分隔符:

  • split1用于分隔不同的键值对。

  • split2用于分隔每个键值对中的键(key)和值(value)。

通过指定key_name可以获取对应的值。如果key_name在字符串中不存在或出现异常情况,则返回NULL

  • str:VARCHAR类型,待解析的字符串。

  • split1:VARCHAR类型,键值对的分隔符。当split1为null时,表示按照whitespace作为kv对的分割符;当split1的长度>1,split1仅表示分隔符的集合,每个字符都表示一个有效的分隔符。

  • split2:VARCHAR类型,键和值的分隔符。

    • 当split2为null,表示按照whitespace(空白字符)作为键和值的分隔符;

    • 当split2的长度大于1,split2仅表示分隔符的集合,每个字符都表示一个有效的分隔符。

  • key_name:VARCHAR类型,键的名称。

KEYVALUE(str, split1, split2, key1)

REGEXP_EXTRACT

REGEXP_EXTRACT( str, pattern, index)

根据给定的正则表达式模式pattern从字符串str中抽取第index个(从1开始计数)匹配的子字符串。如果输入参数为空或提供的正则表达式无效,则返回null

  • str:VARCHAR类型,待解析的字符串。

  • pattern:VARCHAR类型,正则表达式。

  • index:INT类型,指定返回第几个被匹配的字符串。

说明

在编写正则表达式时,请遵循Java的语法规范。因为这些正则表达式将直接被转换为Java代码中的字符串常量。

例如,如果你想匹配一个数字,在SQL中应该写作'\d'而不是\d

这种写法确保了当表达式被编译成Java代码时,能够正确地识别并处理该正则表达式。简而言之,您需要以Java编程语言中定义正则的方式来进行书写,即使是在SQL环境中。更多信息,请参见Java Pattern

REGEXP_EXTRACT(str1, 'foo(.*?)(bar)', 1)

DATE_FORMAT

DATE_FORMAT(TIMESTAMP time, VARCHAR to_format)

将字符串类型的日期从原格式转换至目标格式。

  • 第一个参数为源字符串;

  • 第二个参数from_format可选,为原字符串的格式,默认为yyyy-MM-dd HH:mm:ss;

  • 第三个参数为返回日期的格式,返回值为转换格式后的字符串类型日期,若有参数为null或解析错误,返回null

  • date:VARCHAR类型日期,默认日期格式:yyyy-MM-dd HH:mm:ss。

  • time:TIMESTAMP类型的日期。

  • from_format:指定输入日期格式。

  • to_format:指定输出日期格式。

DATE_FORMAT(datetime1, 'yyMMdd')

FROM_UNIXTIME

FROM_UNIXTIME(BIGINT unixtime, VARCHAR format)

将给定的Unix时间戳(以秒或毫秒为单位)转换成可读性更强的日期时间格式。该函数接收两个参数:

  • unixtime:长整型时间戳,单位为秒;

  • format:可选参数,指定日期格式的字符串,默认为yyyy-MM-dd HH:mm: ss

该函数返回一个VARCHAR类型的字符串,表示按照给定格式或默认格式转换后的日期时间。如果unixtimeformat任一为null,或者在格式化过程中发生错误,则返回null

  • unixtime:BIGINT类型,表示以秒为单位的Unix时间戳。仅接受标准Unix时间格式的数值输入;对于非整数或不符合格式的数据,系统将抛出异常。

  • format:VARCHAR类型,指定输出日期格式。

FROM_UNIXTIME(unixtime1, 'MMdd-yyyy')

UNIX_TIMESTAMP

UNIX_TIMESTAMP(VARCHAR date, VARCHAR format)

该函数用于将给定的日期时间字符串转换为Unix时间戳(单位:秒)。支持两个可选参数:

  • 第一个参数是待转换的日期时间字符串。

  • 第二个参数是指定的日期时间格式,默认为yyyy-MM-dd HH:mm:ss。

返回值是第一个参数转换成的长整型的时间戳,单位为秒。如果不提供任何参数,则默认返回当前时间的时间戳(与NOW()函数功能相同)。如果有参数为null或解析错误,返回null

  • timestamp:TIMESTAMP类型。

  • date:VARCHAR类型日期,表示日期或时间的字符串。默认日期格式:yyyy-MM-dd HH:mm:ss。

  • format:VARCHAR类型,定义了date参数中日期时间字符串的具体格式。

UNIX_TIMESTAMP('2024-11-19', 'yyyy-MM-dd')

SPLIT_INDEX

SPLIT_INDEX(str, sep, index)

以sep作为分隔符,将字符串str分隔成若干段,取其中的第index段,取不到返回null,index从0开始计数。任一参数为null,返回null

  • str:VARCHAR类型,被分隔的字符串。

  • sep:VARCHAR类型,表示用于分隔字符串的字符或符号。

  • index:INT类型,用于指定从一系列参数或数据段中选取的具体位置编号,其中0代表第一个元素或段落。

SPLIT_INDEX(VARCHAR str, VARCHAR sep, INT index)

CONCAT

concat([var], split)

将两个或多个VARCHAR类型的字符串值连接成一个新的字符串。如果任一参数为null,则在连接过程中忽略该参数。请注意,所有参与连接的参数必须是VARCHAR类型,不接受INTBIGINT等其他数据类型的输入。

  • var1:VARCHAR类型,字符串值。

  • var2:VARCHAR类型,字符串值。

CONCAT(var1, var2, var3)

REGEXP_REPLACE

REGEXP_REPLACE( str, pattern, replacement)

该函数通过使用replacement字符串来替换str中所有符合pattern正则表达式的子串,并返回处理后的字符串。如果输入参数为空或提供的正则表达式无效,则函数返回null

  • str:VARCHAR类型,要被搜索和可能被修改的字符串。

  • pattern:VARCHAR类型,正则表达式,用于定义被替换的目标子串。

  • replacement:VARCHAR类型,用于替换的字符串。当找到与pattern相匹配的内容时,这部分内容会被replacement所指定的新文本所替换。如果replacement为空,则匹配到的部分会被删除。

说明

在编写正则表达式时,请遵循Java的语法规范。因为这些正则表达式将直接被转换为Java代码中的字符串常量。

例如,如果你想匹配一个数字,在SQL中应该写作'\d'而不是\d

这种写法确保了当表达式被编译成Java代码时,能够正确地识别并处理该正则表达式。简而言之,您需要以Java编程语言中定义正则的方式来进行书写,即使是在SQL环境中。更多信息,请参见Java Pattern

REGEXP_REPLACE(str1, '(\d+)', '')

管理映射字典

新增映射字典

  1. 登录云安全中心控制台。在控制台左上角,选择需防护资产所在的区域:中国全球(不含中国)

  2. 在左侧导航栏,选择威胁分析与响应 > 产品接入

  3. 产品接入页面,单击页面右上角的日志解析规则

  4. 日志解析规则页面,单击页面右上角的管理映射字典

  5. 映射字典管理面板,单击新增字典

  6. 新建映射字典面板,配置对应参数并单击确定

    配置项

    说明

    字典名称

    输入字典的名称。

    目标标准字段

    在下拉列表中选择字典生效的目标标准字段。

    备注

    输入字典的备注信息。

    设置映射关系

    设置原始字段值和目标标准字段值的映射关系。您可以单击添加映射关系,添加多条映射关系。

编辑映射字典

编辑映射字典后,对已使用该字典的规则无影响。如果您修改了规则,规则会自动拉取最新的字典信息,所以只有修改规则后该规则中引用的字典内容才会发生变化。

  1. 登录云安全中心控制台。在控制台左上角,选择需防护资产所在的区域:中国全球(不含中国)

  2. 在左侧导航栏,选择威胁分析与响应 > 产品接入

  3. 产品接入页面,单击页面右上角的日志解析规则

  4. 日志解析规则页面,单击页面右上角的管理映射字典

  5. 单击目标字典操作列的编辑

  6. 编辑映射字典面板,修改映射字典的内容,并单击确定

删除映射字典

删除映射字典后,对已使用该字典的规则无影响。

  1. 登录云安全中心控制台。在控制台左上角,选择需防护资产所在的区域:中国全球(不含中国)

  2. 在左侧导航栏,选择威胁分析与响应 > 产品接入

  3. 产品接入页面,单击页面右上角的日志解析规则

  4. 日志解析规则页面,单击页面右上角的管理映射字典

  5. 单击目标字典操作列的删除

  6. 删除提示对话框中单击确定