统计分析功能可以从大量日志中筛选出满足条件的日志,进行统计计数或对数字类型字段求和、求平均值等,同时提供表格、折线图、饼图3种展现形式,可以帮助用户快速查看分析结果。(注意:只有结构化结构化的日志才支持统计分析操作,针对自定义业务日志需要先进行日志预处理操作。)
统计分析语法格式为:
查询语句|统计语句
查询语句支持全文检索与键值检索,表示从全部日志内容中筛选检索结果,关于查询语句可查看日志检索语法中内容。如果不需要进行筛选可以使用*。
统计语句支持类SQL92的语法,表示从前边查询语句筛选后的结果集中进行统计分析。
场景一:分析请求分布情况
在应用负载均衡7层访问日志中,将日志按照request_method分组,统计各个请求方法出现的次数。
* | select request_method,count(1) group by request_method
展示结果如下,在选定的时间内,POST方法有50条日志,GET方法有9条日志。
request_method | COUNT(1) |
---|---|
POST | 50 |
GET | 9 |
场景二:统计发送请求流量最大的IP
在应用负载均衡7层访问日志中,筛选请求包长度>10的日志数据,将日志按照客户端IP分组,统计总发送流量最大的5个客户端IP。
request_length > 10 | select client_ip,sum(bytes_sent) group by client_ip order by sum(bytes_sent) desc limit 5
展示结果如下
场景三:获取耗时较长时间的SQL执行语句句
在mysql的慢日志中,按照clienthost字段分组,统计query_time 大于1s 发生的次数。
query_time>1 | select clienthost,count(1) group by clienthost
展示结果如下,在选定的时间内,192.168.0.29超过1秒的次数有16次,192.168.0.28超过1s的次数有4次。
clienthost | COUNT(1) |
---|---|
192.168.0.29 | 16 |
192.168.0.28 | 4 |
场景四:按照指定的时间粒度和时间格式,获取耗时较长的SQL执行次数的趋势
在mysql的慢日志中,按照秒的粒度汇总统计query_time大于1s的发生次数,时间格式为"xxxx年-xx月-xx日 xx时:xx分:xx秒"。
query_time>1 | select date_format(date_trunc('second', time), 'YYYY-MM-dd HH:mm:ss') as ts, count(1) group by ts
展示结果如下,在选定的时间内,2021-12-25 10:01:23超过1秒的次数有5次,2021-12-25 10:01:24超过1秒的次数有7次。
time | COUNT(1) |
---|---|
2021-12-25 10:01:23 | 5 |
2021-12-25 10:01:24 | 7 |
聚合统计的查询语法支持基本的SQL语法,说明如下:
只支持 select 语句,不支持update,insert,delete 等语句。select 语句包含{selectExpr},{whereExpr},{fileds}三个部分,语句整体结构如下,不需指定 from 字段,服务会默认添加日志主题所属的日志类型。
select {selectExpr} where {whereExpr} group by {fileds}
在 {selectExpr} 中至少需要包含 max,min,avg,sum,count 中的一种或多种聚合函数。例如:
select count(1),max(score) group by username //正确
select city group by city //错误,未包含聚合函数
在 {whereExpr} 中只支持 and 和 between 关键字,不支持or,is,not 等其他关键字。
select count(1) where city= 'bj' and age = 18 //正确
select count(1) where city= 'bj' or age = 18 //错误,不支持or关键字
支持 >,>=,<,<=,=,!=,in 等比较运算符。字符值两端需要加单引号,且只有数值类型支持>,>=,<,<= 运算符。
select count(1),max(score) where age > 5 and city = 'bj' group by username
支持分组 group by,但是在{selectExpr} 中出现的非聚合字段需要在group by 后。例如下面语法是错误的,因为 feild 字段没有出现在group by 后。
select feild,count(1) group by pin
支持order by,允许统计结果按照指定字段进行排序。
支持limit, 最多只能返回100条统计结果。
不支持子查询。
支持date_trunc()指定时间粒度,支持的时间粒度包括second, minute, hour, day。
select count(1), date_trunc('hour', time) group by date_trunc('hour', time)
需要补充说明的是,在自动生成的语句中每个字段都会用反引号`` ,这是防止查询语句中的某些字段是SQL的关键字。用户在手动数据字段时候,需注意适当加上反引号。
例如,database是SQL的保留关键字,如果要以database作为字段在统计分析中使用,需要加上反引号``,如下面的例子。
select `database`, count(1) group by `database` //正确
select database, count(1) group by database //错误,保留关键字未加反引号
常见的数据库保留关键字如database,table,insert,update,delete等。
各个数据类型支持的操作符说明如下:
数据类型 | 支持的操作符 |
---|---|
int, float | >, >=, <, <=, =, !=, in, between |
string | =, !=, in |
ip | =, != |
对于不熟悉检索和统计分析语句,对统计分析复杂度要求不高的用户,系统还提供了“键值模式”,通过操作页面中控件的方式来生成统计分析结果。
例如我们想要统计客户端IP等于116.198.20.200的日志条数,可以按照如下的方式进行操作。
1. 点击需要检索的日志主题所在的日志集,进入日志主题列表。
2. 点击展开需要检索的日志主题,在子菜单中选择“检索与分析”,点击顶部的“键值模式”。
3. 在检索中,字段选择“client_ip”,运算符选择“=”,value中填写“116.198.20.200”。
4. 在分析中,字段选择“client_ip”,聚合方式选择“count”,即计数。
5. 点击“检索”按钮,在下方切换至“统计分析”tab页签,即可查看到当前的统计分析结果。
我们对上面的例子进行一下扩充,如果我们希望统计客户端IP为116.198.20.200的日志中,不同返回码的数量,并且按照返回码从小到大排序,可以按照下面的操作进行。
1. 点击需要检索的日志主题所在的日志集,进入日志主题列表。
2. 点击展开需要检索的日志主题,在子菜单中选择“检索与分析”,点击顶部的“键值模式”。
3. 在检索中,字段选择“client_ip”,运算符选择“=”,value中填写“116.198.20.200”。
4. 在分析中,字段选择“client_ip”,聚合方式选择“count”,即计数;
5. 点击新增,增加一个分析条件,字段选择“status”,聚合方式选择“不聚合”。
6. 分组已默认选中了当前唯一一个不聚合的字段“status”。
7. 再排序中,字段选择“status”,排序方式选择“asc”,即正序排序。
8. 点击“检索”按钮,在下方切换至“统计分析”tab页签,即可查看到当前的统计分析结果。
统计结果可直接转换为图形,例如我们在数据库审计日志中,统计连接失败的客户端IP数量,并生成饼图,可以按照如下方式操作。
1. 在指定的日志主题下,点击左侧菜单中的“检索与分析”
2. 顶部已默认选择了“高级模式”
3. 在输入框中输入检索统计语句
operation="FAILED_CONNECT" | select count(1), user_ip group by user_ip order by count(1) desc
4. 点击检索按钮,在下方点击选择“统计分析”tab页签,默认以表格的方式展示统计分析结果。
5. 点击饼图的图标,切换为饼图展示样式。
点击生成的图形右上角的齿轮图标,可以打开图形样式窗口,可以修改图形的一些显示参数,如图形样式,数据列,分组等。
1. 在指定的日志主题下,点击左侧菜单中的“检索与分析”
2. 在顶部选择“键值模式”
3. 在检索中,字段选择“operation”,运算符选择“=”,value填写“FAILED_CONNECT”
4. 在分析中,首先添加聚合字段,字段选择“user_ip”,聚合方式选择“count”
5. 在分析中,再添加非聚合字段用于分组使用,点击新增按钮,增加一行分析字段,字段名仍然选择“user_ip”,聚合方式选择“不聚合”
6. 分组中已默认选中了当前唯一一个不聚合的字段“user_ip”
7. 再排序中,字段选择“count(user_ip)”,排序方式选择“desc”,即倒序排序。
8. 点击检索按钮,在下方选择“统计分析”tab页签。
9. 点击饼图的图标,将统计分析结果转换为饼图。
我们的产品专家为您找到最合适的产品/解决⽅案
1v1线上咨询获取售前专业咨询
专业产品顾问,随时随地沟通