mysql qps 简书_线上查看QPS

1. 需求:

服务器上线之后, 对接了三方推广,每天的指定时间并发量都特别高。但是对于这个高没有概念, 所以需要知道在那个时间段的访问情况。

2. 思路:

通过tomcat的accessLog,使用linux的文本分析命令,获取每秒的log数量,再分析出请求次数。

3. 步骤:

配置tomcat的 access log。

现在的服务器大多用上了Spring Boot,配合着嵌入式Tomcat, 关于Tomcat的所有配置, 都只需要在yml文件里面配置即可。

以往, 配置access log的方式是在server.xml,Host 标签下, 添加Value标签, 来配置access log。更多的自定义配置方式,可以跳转查看Tomcat access log配置

6ef852a064da

image

第二种配置方式, 是在application.yml里, 配置 server.tomcat.accesslog:

6ef852a064da

image

在里我只配置了日志目录,以及开启日志。

配置完成之后, 访问服务器, tomcat就会打印访问日志,默认格式为:

127.0.0.1 - - [19/Nov/2017:23:55:27 +0800] "POST /rest/user/checkToken.json HTTP/1.0" 200 138

使用linux tailf cut uniq配合,得到每秒的access log

通过查看日志

127.0.0.1 - - [19/Nov/2017:23:55:27 +0800] "POST /rest/user/checkToken.json HTTP/1.0" 200 138

发现, 只要获取每一条里面的 19/Nov/2017:23:55:27 这一部分数据, 然后将这部分数据通过uniq -c,就得到每一秒,都有多少条访问日志。所以大概的思路就是, 通过tailf 进行日志的打印, 然后使用cut 进行每一行字符串的分割得到时间那一部分, 再通过uniq -c 得到每一秒的行数。

最终得到

tailf temp.log | cut -d ' ' -f4 | uniq -c

其中

temp.log 是文件名称, 通过cut -d ' ' -f4 命令, 将每一行使用空格进行分割, 取第四个,就得到了时间那一部分。

最终得到结果

6ef852a064da

image

查看历史qps

大概思路其实和上面差不多, 配置好tomcat access日志之后, 将需要查看的日志导入到同一个地方, 然后使用文本分析命令,进行分析。

将多个日志文件进行收集

cat ./access_log.*.log > ./temp.log

对收集起来的日志进行统计分析。

cat ./temp.log | cut -d ' ' -f4 | uniq -c | sort -n -r -o ./temp_sorted.log

sort 是对日志根据访问次数进行排序, 得到哪一段时间的qps最高。

最终,就得到历史的一个QPS数据啦~

uniq:

-c或——count:在每列旁边显示该行重复出现的次数;

cut:

-d:用来定义分隔符,默认为tab键,一般与-f配合使用(如果分隔符是空格,必须是两个单引号之间确实有一个空格,是一个哦,不是支持多个)

-f:需要选取的字段,根据-d切分的字段集选取,下标从1开始

sort:

-n 依照数值的大小排序。

-r 以相反的顺序来排序。

-o 将排序后的结果存入指定的文件。

最后, 就能实时的打印出每秒的访问量啦~

材料:

日志是本地压测产生的日志,重要的是格式

2019-07-03T11:16:23+0800|127.0.0.1|-|-|GET|http|127.0.0.1|/play/get?...

2019-07-03T11:16:23+0800|127.0.0.1|-|-|GET|http|127.0.0.1|/play/get?...

2019-07-03T11:16:23+0800|127.0.0.1|-|-|GET|http|127.0.0.1|/play/get?...

问题:

如何统计某个接口每秒的QPS那?

分析:

看如下日志,2019-07-03T11:16:23+0800|127.0.0.1|-|-|GET|http|127.0.0.1|/iptv/api/new/video/play/get?...;其实,我们就是要统计接口/iptv/api/new/video/play/get在相同秒数(即:同一个时间秒数,2019-07-03T11:16:23)出现的次数。

解决办法:

先抛出命令行:tail -f host-access.log | grep '/iptv/api/new/video/play/get' | awk -F '|' '{print substr($1,1,19)}' | uniq -c

首先,通过tail -f 不间断查询日志(-f 表示不间断查询最新统计上来的日志)

第二,我们要锁定指定行(即,包含指定访问接口的日志),一般使用grep命令,如 grep /iptv/api/new/video/play/get ,得到一个请求对应的一行日志

截取对应列中秒级时间并打印(即:2019-07-03T11:16:23),常用的命令工具有cut和awk,这里用awk演示:

上面的日志格式是用 ‘ | ’进行分割的,所用awk的 -F参数指定分隔符为 | ,分割完后我们取第一个结果,即 $1 ;再用substr截取第1到第19位(格式:2019-07-03T11:16:21),用print打印结果为:

2019-07-03T11:16:21

2019-07-03T11:16:21

2019-07-03T11:16:21

2019-07-03T11:16:22

2019-07-03T11:16:22

2019-07-03T11:16:22

2019-07-03T11:16:22

2019-07-03T11:16:23

2019-07-03T11:16:23

2019-07-03T11:16:23

2019-07-03T11:16:23

对结果进行去重统计,常用工具uniq,参数指定 -c:

20 2019-07-03T11:05:22

14 2019-07-03T11:05:23

22 2019-07-03T11:05:24

20 2019-07-03T11:05:25

20 2019-07-03T11:05:26

20 2019-07-03T11:05:27

20 2019-07-03T11:05:28

命令行综述:

tail -f host-access.log | grep '/iptv/api/new/video/play/get' | awk -F '|' '{print substr($1,1,19)}' | uniq -c

获取增量日志 | 每个请求对应的行信息 | 截取相同秒数的时间 | 去重计数

结果:

每秒的QPS值在20左右

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值