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

阿里云 SLS

在日志分析中选择即时查询,选择阿里云 SLS 数据源,选择指定项目和日志库,就可以查询日志了。

表格图

根据举例的查询条件语句*|SELECT status,count(*) as count GROUP BY status。将查询统计 status 字段,并将统计计算结果命名为 count ,将结果 count 以 status 通过表格分组展示。

语句简析

*| select ... 说明: |管道符左侧*是查询语句;|管道符右侧 select...是分析语句;

status :表示日志数据中的一个字段。

count() AS count: 表示对每种 status 进行计数,并将计数结果命名为count。

GROUP BY status:表示将查询结果按照 status 字段进行分组。

更多语法学习可以参考:查询语法 分析语法 函数概览

时序图

将阿里云 SLS 日志查询结果提取值,将过滤条件作为指标中 tag 转存展示。下面有一些查询举例,可以学习理解一下。

常用基础查询语法

查询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.*

场景一:查询代理日志中状态码为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 ...

场景二:查询 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

场景三:查询请求时间小于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

场景四:查询昨日代理日志中状态码为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_datedate_addday函数;

rom_unixtime 函数用于将UNIX时间戳转化为timestamp类型的日期和时间表达式,格式为YYYY-MM-DD HH:MM:SS.Ms或YYYY-MM-DD HH:MM:SS.Ms Time_zone。

current_date 函数将timestamp类型的日期和时间表达式转化成UNIX时间戳。

current_date 函数用于返回当前日期,格式为YYYY-MM-DD。

date_add 函数用于在日期或时间中添加或减去指定的时间间隔。

day 函数用于提取日期和时间表达式中的天数,按月计算。day函数等同于day_of_month函数。

开源版
Flashcat
Flashduty