在日誌分析中選擇即時查詢,選擇阿里雲 SLS 數據源,選擇指定項目和日誌庫,就可以查詢日誌了。
統計圖表
統計圖表顯示查詢條件的結果,有兩種顯示方式:表格圖和時間序列圖。
表格圖
例如,查詢條件為 *|SELECT status,count(*) as count GROUP BY status
,這裡查詢 status
字段,計算結果並命名為 count
,然後按 status
字段進行分組,並在表格中顯示。
語法分析
*| select ...
說明: |
管道符號左側 *
是查詢語句;右側部分 select...
是分析語句。
status:表示日誌數據中的一個字段。
count() AS count: 統計每種 status
的數量,並將統計結果命名為 count
。
GROUP BY status:按 status
字段對查詢結果進行分組。
有關更多語法學習,可以參考: 查詢語法, 分析語法, 函數概述。
時間序列圖
阿里雲 SLS 日誌查詢結果可以提取為數值,並將篩選條件存儲為 metrics 中的標籤。這裡有一些查詢示例來學習和理解。
常見基礎查詢語法
查詢 GET 請求成功的日誌(狀態碼為 200~299)且請求時間小於 60 秒:
request_method:GET and status in [200 299] not request_time>=60
查詢 remote_user 字段不為空的日誌:not remote_user:""
查詢 remote_user 字段為空的日誌:remote_user:""
查詢 remote_user 字段不為 null 的日誌:not remote_user:"null"
查詢 remote_user 字段不存在的日誌:not remote_user:*
查詢 remote_user 字段存在的日誌:remote_user:*
查詢 host 字段值不為 123 的日誌:not host:123.*
情景 1:查詢 status 為 403 和 405 的代理日誌,並按 host、method 和 request_uri 進行分組。
status:403 OR status:405 | SELECT host AS host,request_method AS method,request_uri AS url,count(*) AS count GROUP BY host,method,url
這個查詢也可以轉換為錯誤日誌查詢,例如:errCode: xxx or errCode:xxx | select ...
情景 2:查詢 request_method 字段以 GE 開頭且 client_ip 字段範圍為 8.140.205.* 的日誌,並按 host、method 和 request_uri 進行分組。
request_method:GE* and client_ip:8.140.205.* | SELECT host AS host,request_method AS method,request_uri AS url,client_ip AS cip,count(*) AS count GROUP BY host,method,url,cip
情景 3:查詢請求時間小於 1 秒且包含字串 “flashcat” 的成功請求日誌,並按 host、method、request_uri、status 和 request_uri 進行分組。
flashcat AND read_request_time < 1 AND (status >= 200 AND status <= 299) | SELECT host AS host, request_method AS method, request_uri AS url,status as st, read_request_time as rqt,count(*) AS A GROUP BY host, method, url,status,read_request_time
情景 4:查詢昨天 status 為 403 和 405 的代理日誌,並按 host、method 和 request_uri 進行分組。
status:403 OR status:405 | SELECT host AS host, request_method AS method, request_uri AS url, from_unixtime(__time__) AS time, count(*) AS A WHERE __time__ < to_unixtime(current_date) AND __time__ > to_unixtime(date_add('day', -1, current_date)) GROUP BY host, method, url, time
此查詢主要使用了 from_unixtime()
, to_unixtime()
, current_date
, date_add
和 day
函數。
from_unixtime 函數:將 UNIX 時間戳轉換為時間戳類型的日期和時間表達式,格式為 YYYY-MM-DD HH:MM:SS.Ms 或 YYYY-MM-DD HH:MM:SS.Ms 時區。
to_unixtime 函數:將時間戳類型的日期和時間表達式轉換為 UNIX 時間戳。
current_date 函數:返回當前日期,格式為 YYYY-MM-DD。
date_add 函數:將指定的時間間隔加到日期或時間中。
day 函數:從日期和時間表達式中提取日期,按月計算。day 函數相當於 day_of_month 函數。