统计分析

产品文档

日志服务

2024-10-17 08:13:37

统计分析

统计分析功能可以从大量日志中筛选出满足条件的日志,进行统计计数或对数字类型字段求和、求平均值等,同时提供表格、折线图、饼图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语法,说明如下:

  1. 只支持 select 语句,不支持update,insert,delete 等语句。select 语句包含{selectExpr},{whereExpr},{fileds}三个部分,语句整体结构如下,不需指定 from 字段,服务会默认添加日志主题所属的日志类型。

   select {selectExpr} where {whereExpr} group by {fileds} 
  1. 在 {selectExpr} 中至少需要包含 max,min,avg,sum,count 中的一种或多种聚合函数。例如:

   select count(1),max(score) group by username    //正确
   
   select city group by city    //错误,未包含聚合函数
  1. 在 {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关键字	 
  1. 支持 >,>=,<,<=,=,!=,in 等比较运算符。字符值两端需要加单引号,且只有数值类型支持>,>=,<,<= 运算符。

   select count(1),max(score) where age > 5 and city = 'bj' group by username
  1. 支持分组 group by,但是在{selectExpr} 中出现的非聚合字段需要在group by 后。例如下面语法是错误的,因为 feild 字段没有出现在group by 后。

   select feild,count(1) group by pin
  1. 支持order by,允许统计结果按照指定字段进行排序。

  2. 支持limit, 最多只能返回100条统计结果。

  3. 不支持子查询。

  4. 支持date_trunc()指定时间粒度,支持的时间粒度包括second, minute, hour, day。

   select count(1), date_trunc('hour', time) group by date_trunc('hour', time)
  1. 需要补充说明的是,在自动生成的语句中每个字段都会用反引号`` ,这是防止查询语句中的某些字段是SQL的关键字。用户在手动数据字段时候,需注意适当加上反引号。

例如,database是SQL的保留关键字,如果要以database作为字段在统计分析中使用,需要加上反引号``,如下面的例子。

select `database`, count(1) group by `database`    //正确

select database, count(1) group by database    //错误,保留关键字未加反引号

常见的数据库保留关键字如database,table,insert,update,delete等。

  1. 各个数据类型支持的操作符说明如下:

    数据类型 支持的操作符
    int, float >, >=, <, <=, =, !=, in, between
    string =, !=, in
    ip =, !=

使用键值模式快速统计分析

对于不熟悉检索和统计分析语句,对统计分析复杂度要求不高的用户,系统还提供了“键值模式”,通过操作页面中控件的方式来生成统计分析结果。
例如我们想要统计客户端IP等于116.198.20.200的日志条数,可以按照如下的方式进行操作。
image.png
1. 点击需要检索的日志主题所在的日志集,进入日志主题列表。
2. 点击展开需要检索的日志主题,在子菜单中选择“检索与分析”,点击顶部的“键值模式”。
3. 在检索中,字段选择“client_ip”,运算符选择“=”,value中填写“116.198.20.200”。
4. 在分析中,字段选择“client_ip”,聚合方式选择“count”,即计数。
5. 点击“检索”按钮,在下方切换至“统计分析”tab页签,即可查看到当前的统计分析结果。

我们对上面的例子进行一下扩充,如果我们希望统计客户端IP为116.198.20.200的日志中,不同返回码的数量,并且按照返回码从小到大排序,可以按照下面的操作进行。
image.png
1. 点击需要检索的日志主题所在的日志集,进入日志主题列表。
2. 点击展开需要检索的日志主题,在子菜单中选择“检索与分析”,点击顶部的“键值模式”。
3. 在检索中,字段选择“client_ip”,运算符选择“=”,value中填写“116.198.20.200”。
4. 在分析中,字段选择“client_ip”,聚合方式选择“count”,即计数;
5. 点击新增,增加一个分析条件,字段选择“status”,聚合方式选择“不聚合”。
6. 分组已默认选中了当前唯一一个不聚合的字段“status”。
7. 再排序中,字段选择“status”,排序方式选择“asc”,即正序排序。
8. 点击“检索”按钮,在下方切换至“统计分析”tab页签,即可查看到当前的统计分析结果。

生成统计图

统计结果可直接转换为图形,例如我们在数据库审计日志中,统计连接失败的客户端IP数量,并生成饼图,可以按照如下方式操作。

高级模式操作流程

image.png
1. 在指定的日志主题下,点击左侧菜单中的“检索与分析”
2. 顶部已默认选择了“高级模式”
3. 在输入框中输入检索统计语句

operation="FAILED_CONNECT" | select count(1), user_ip group by user_ip order by count(1) desc

4. 点击检索按钮,在下方点击选择“统计分析”tab页签,默认以表格的方式展示统计分析结果。
5. 点击饼图的图标,切换为饼图展示样式。

image.png
点击生成的图形右上角的齿轮图标,可以打开图形样式窗口,可以修改图形的一些显示参数,如图形样式,数据列,分组等。

键值模式操作流程

image.png
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. 点击饼图的图标,将统计分析结果转换为饼图。


文档反馈

开始与售前顾问沟通

可直接拨打电话 400-098-8505转1

我们的产品专家为您找到最合适的产品/解决⽅案

在线咨询 5*8⼩时

1v1线上咨询获取售前专业咨询

点击咨询
企微服务助手

专业产品顾问,随时随地沟通