您可以在高級查詢中使用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