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

在日誌分析中選擇即時查詢,選擇阿里雲 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 函數。

开源版
Flashcat
Flashduty