您可以在進階查詢中使用SQL文法,查詢或分析您通過跟蹤投遞到Log ServiceSLS的日誌事件。
在Log Service分析語句中,表示字串的字元必須使用單引號('')包裹,無符號包裹或被雙引號("")包裹的字元表示欄位名或列名。例如:'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 )
彙總分析查詢
通過Log ServiceSLS的彙總分析文法,對事件進行彙總統計,例如:通過
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
事件屬性
Action Trail支援的事件屬性如下表所示。
分類 | 事件屬性名稱 | 描述 |
操作者 |
| 阿里雲帳號ID(主帳號ID)。 |
| 密鑰ID。 | |
| 要求者ID。 | |
| 帳號類型。 | |
| 使用者名稱。 | |
操作 |
| 服務名稱。 |
| 讀寫類型。 | |
| 事件名稱。 | |
| 版本資訊。 | |
| 錯誤資訊。 | |
| 錯誤碼。 | |
關聯資源 |
| 資源類型。 |
| 資源名稱。 | |
地點 |
| 阿里雲地區。 |
| 事件來源。 | |
| 源IP地址。 | |
其他 |
| 請求ID。 |
| 事件ID。 |
彙總函式
Action Trail支援的彙總函式如下表所示。
函數名稱 | 文法 | 說明 | 支援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