連接 SLS 數據源
創建數據源連接時,需要填寫的主要參數包括:
接入域名 可以在阿里雲 SLS 的 Project 中查詢。如果 FlashCat 部署的宿主機與阿里雲 SLS 位於同一個區域,建議使用內網域名。如果 FlashCat 部署宿主機不在阿里雲環境中,建議使用外網域名。若 FlashCat 部署在私有雲環境中,則需要填寫出網代理地址以訪問外網域名;如下圖所示。 AK ID 和 AKS:可以在阿里雲 AccessKey 管理中查看和創建。
SLS 日誌查詢
原始日誌
顯示來自阿里雲 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 函數。
SLS 日誌告警
在告警規則中—> 選擇日誌數據源 —> 配置查詢語句並提取 ValueKey —> 選擇簡單模式設置 ValueKey 在指定時間內的閾值。
配置場景 1:查詢代理日誌中 status 為 404 和 405 的日誌數量,如果查詢結果的數量(即 count 字段的值)超過 5,則發送告警通知。
告警查詢語句:
status:404 OR status:405 | SELECT count(*) AS count
設定 ValueKey 為 count,並設置當 count 的值大於 5 時觸發告警。
配置場景 2:查詢代理日誌中 status 為 404 和 405 的日誌數量,如果查詢結果的數量(即 count 字段的值)超過 10,且異常率超過 80%,則發送告警通知。
告警查詢語句:
status:404 OR status:405 | SELECT count(*) AS count
設定 ValueKey 為 count,並設置當 count 的值大於 10 時觸發告警,並選擇條件表達式模式設置異常率。
SLS 控制台
可以在告警控制台中查看告警記錄、設置告警模板和響應策略。
SLS Dashboard
如果要將來自阿里雲 SLS 的數據作為圖表使用,可以在圖表面板中創建 dashboard,根據查詢結果配置圖表,支持統計圖表、時間序列等形式顯示。
如果數據結果可顯示和查詢,您可以參考上述方法進行操作。
至此完成 SLS 數據接入、查詢、告警的基本配置。