夜莺-Nightingale
夜莺V6
项目介绍 架构介绍
快速开始
黄埔营
安装部署
升级
采集器
使用手册
API
数据库表结构
FAQ
开源生态
Prometheus
版权声明
第1章:天降奇兵
第2章:探索PromQL
第3章:Prometheus告警处理
第4章:Exporter详解
第5章:数据与可视化
第6章:集群与高可用
第7章:Prometheus服务发现
第8章:监控Kubernetes
第9章:Prometheus Operator
参考资料

連接 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_addday 函數。

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 數據接入、查詢、告警的基本配置。

开源版
Flashcat
Flashduty