您可以在高级查询中使用SQL语法,查询或分析您通过跟踪投递到日志服务SLS的日志事件。
查询示例
全文查询
通过指定关键字(字段名称或字段值)查询。
示例:在日志中查询包含关键字
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。 |
聚合函数
操作审计支持的聚合函数如下表所示。
函数名称 | 语法 | 说明 |
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