您可以在高级查询中使用SQL语法,查询或分析您通过跟踪投递到日志服务SLS的日志事件。
在日志服务分析语句中,表示字符串的字符必须使用单引号('')包裹,无符号包裹或被双引号("")包裹的字符表示字段名或列名。例如:'status'表示字符串status,status或"status"表示日志字段status。
查询示例
- 全文查询 - 通过指定关键字(字段名称或字段值)查询。 - 示例:在日志中查询包含关键字 - DescribeInstances的事件。- DescribeInstances
- 属性精确查询 - 按照 - [事件属性名称]:[事件属性值]的格式,指定事件属性的名称和值进行精确查询。关于事件属性名称,请参见事件属性。- 示例:在日志中查询事件源 - event.eventSource为- actiontrail.cn-hangzhou.aliyuncs.com的事件。- event.eventSource: actiontrail.cn-hangzhou.aliyuncs.com
- 属性模糊查询 - 按照 - [事件属性名称]:[事件属性值]的格式,指定事件属性名称,事件属性值可以在词的中间或末尾加上模糊查询关键字,即星号- *(多个字符匹配)或问号- ?(单个字符匹配)。- 示例1:查询所有AccessKey访问事件。 - event.userIdentity.accessKeyId: *
- 示例2:查询事件源 - event.eventSource包含- actiontrail开头的所有事件。- event.eventSource: actiontrail*
 
- 多条件组合查询 - 通过括号 - ()、与- AND、或- OR逻辑判断符进行多条件的组合查询。- 示例1:查询所有访问报错的AccessKey访问事件。 - event.errorCode: * AND event.userIdentity.accessKeyId: *
- 示例2:查询事件名称 - event.eventName为- Create、- CreateInstance或- RunInstances的事件。- event.eventName: Create OR event.eventName: CreateInstance OR event.eventName: RunInstances
- 示例3:查询云产品 - event.serviceName为- kafka,且事件名称为- Create或- CreateInstance或- RunInstances的事件。- (event.serviceName: AliKafka AND ( event.eventName: Create OR event.eventName: CreateInstance OR event.eventName: RunInstances )
 
- 聚合分析查询 - 通过日志服务SLS的聚合分析语法,对事件进行聚合统计,例如:通过 - GROUP BY语法对字段进行聚合统计。- 示例1:按照云产品聚合,查询各个云产品的事件量。 - * | SELECT "event.serviceName" AS service, COUNT(*) AS count FROM log GROUP BY "event.serviceName"
- 示例2:按照用户和云产品聚合,查询事件量。 - * | SELECT "event.userIdentity.principalId" AS principalId, "event.serviceName" AS service, COUNT(*) AS count FROM log GROUP BY principalId,service
 
事件属性
操作审计支持的事件属性如下表所示。
| 分类 | 事件属性名称 | 描述 | 
| 操作者 | 
 | 阿里云账号ID(主账号ID)。 | 
| 
 | 密钥ID。 | |
| 
 | 请求者ID。 | |
| 
 | 账号类型。 | |
| 
 | 用户名。 | |
| 操作 | 
 | 服务名称。 | 
| 
 | 读写类型。 | |
| 
 | 事件名称。 | |
| 
 | 版本信息。 | |
| 
 | 错误信息。 | |
| 
 | 错误码。 | |
| 关联资源 | 
 | 资源类型。 | 
| 
 | 资源名称。 | |
| 地点 | 
 | 阿里云地域。 | 
| 
 | 事件源。 | |
| 
 | 源IP地址。 | |
| 其他 | 
 | 请求ID。 | 
| 
 | 事件ID。 | 
聚合函数
操作审计支持的聚合函数如下表所示。
| 函数名称 | 语法 | 说明 | 支持SQL | 支持SPL | 
| arbitrary(x) | 返回x中任意一个非空的值。 | √ | × | |
| avg(x) | 计算x的算术平均值。 | √ | × | |
| bitwise_and_agg(x) | 返回x中所有值按位与运算(AND)的结果。 | √ | × | |
| bitwise_or_agg(x) | 返回x中所有值按位或运算(OR)的结果。 | √ | × | |
| bool_and(boolean expression) | 判断是否所有日志都满足条件。如果是,则返回true。 bool_and函数等同于every函数。 | √ | × | |
| bool_or(boolean expression) | 判断是否存在日志满足条件。如果存在,则返回true。 | √ | × | |
| checksum(x) | 计算x的校验和。 | √ | × | |
| count(*) | 统计所有的日志条数。 | √ | × | |
| count(1) | 统计所有的日志条数,等同于count(*)。 | √ | × | |
| count(x) | 统计x中值不为NULL的日志条数。 | √ | × | |
| count_if(boolean expression) | 统计满足指定条件的日志条数。 | √ | × | |
| every(boolean expression) | 判断是否所有日志都满足条件。如果是,则返回true。 every函数等同于bool_and函数。 | √ | × | |
| geometric_mean(x) | 计算x的几何平均数。 | √ | × | |
| kurtosis(x) | 计算x的峰度。 | √ | × | |
| map_union(x) | 返回一列Map数据的并集。 如果Map中存在相同的键,则返回的键值为其中任意一个键的值。 | √ | × | |
| max(x) | 查询x中的最大值。 | √ | × | |
| max(x, n) | 查询x中最大的n个值。返回结果为数组。 | √ | × | |
| max_by(x, y) | 查询y为最大值时对应的x值。 | √ | × | |
| max_by(x, y, n) | 查询最大的n个y值对应的x值,返回结果为数组。 | √ | × | |
| min(x) | 查询x中最小值。 | √ | × | |
| min(x, n) | 查询x中最小的n个值。返回结果为数组。 | √ | × | |
| min_by(x, y) | 查询y为最小值时对应的x值。 | √ | × | |
| min_by(x, y, n) | 查询最小的n个y值对应的x值。返回结果为数组。 | √ | × | |
| skewness(x) | 计算x的偏度。 | √ | × | |
| sum(x) | 计算x的总值。 | √ | × | 
语法保留字
SQL分析语句中的所有保留字如下:
AND
AS
BETWEEN
BY
CASE
CAST
CROSS
CUBE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
DISTINCT
ELSE
END
ESCAPE
EXCEPT
EXISTS
FROM
GROUP
GROUPING
HAVING
IN
INNER
INSERT
INTERSECT
INTO
IS
JOIN
LEFT
LIKE
LIMIT
LOCALTIME
LOCALTIMESTAMP
NATURAL
NOT
NULL
ON
OR
ORDER
OUTER
RIGHT
ROLLUP
SELECT
THEN
TRUE
UNION
UNNEST
VALUES
WHEN
WHERE
WITH