nginx日志统计qps

2024-03-20 00:52
文章标签 统计 日志 nginx qps

本文主要是介绍nginx日志统计qps,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.QPS

QPS全称为Queries Per Second,即每秒钟处理的请求数量。对于一个高并发应用来说,QPS是非常重要的性能指标,它反映了应用处理请求的能力。在实际应用中,QPS的大小取决于应用的负载和应用本身的性能。
QPS = req/sec = 请求数/秒
举个例子,假设有一个电商网站,这个网站每天需要处理100万个订单请求,那么每秒钟需要处理的订单数量就是1000000 / 86400 ≈ 11.57。因此,这个网站的QPS应该至少达到11.57。

  • 计算

QPS = req/sec = 请求数/秒

QPS计算PV和机器的方式

QPS统计方式 [一般使用 http_load 进行统计]
QPS = 总请求数 / ( 进程总数 * 请求时间 )
QPS: 单个进程每秒请求服务器的成功次数
单台服务器每天PV计算

公式1:每天总PV = QPS * 3600 * 6

公式2:每天总PV = QPS * 3600 * 8

服务器计算

服务器数量 = ceil( 每天总PV / 单台服务器每天总PV )

峰值QPS和机器计算公式

原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间

公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS)

机器:峰值时间每秒QPS / 单台机器的QPS = 需要的机器

问:每天300w PV 的在单台机器上,这台机器需要多少QPS?

( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (QPS)

如果一台机器的QPS是58,需要几台机器来支持?

139 / 58 = 3

  • 通过nginx日志计算
tail -f /var/log/nginx/access.log | awk '{print $4}' | cut -c 14-18 | uniq -c

tail -f命令用于实时输出日志内容,awk命令用于提取日志中的时间戳信息,cut命令用于截取时间戳中的秒数信息,uniq -c命令用于统计每个秒数内的请求数。.
若统计结果为

10 22:12
15 22:13
12 22:14

则QPS为:(10+15+12)/3=12.33。这表示平均每秒钟有12.33个请求。

  • 通过日志确定某个接口的QPS

日志中接口记录如下

2023-07-12T11:16:23+0800|127.0.0.1|-|-|GET|http|127.0.0.1|/getVideoInfo?id=1

首先nginx的日志是按照时间顺序的。因此计算QPS,只需要先统计条数,再计算时间差,二者相除就可以得到。

使用wc命令
1.获取条数
wc -l access.log | awk '{print $1}'
2.统计第一条和最后一条的时间并格式化成时间戳
// 第一条日志时间戳
date -d "$(head -n 1 access.log | awk -F "|" '/getVideoInfo/ {print $1}')" +%s// 最后一条日志时间戳
date -d "$(tail -n 1 access.log | awk -F "|" '/getVideoInfo/ {print $1}')" +%s
3.计算qps
count=$(wc -l access.log | awk '{print $1}'); start=$(date -d "$(head -n 1 access.log | awk -F "|" '/getVideoInfo/ {print $1}')" +%s); end=$(date -d "$(tail -n 1 access.log | awk -F "|" '/getVideoInfo/ {print $1}')" +%s); t=$(($end-$start));  qps=$(echo "scale=2; $count/$t" | bc); printf "%.2f\n" $qps
使用awk命令
1.统计条数
awk -F "|" '$8=="/getVideoInfo?id=1" {count++} END {print count}' access.log
2.第一条和最后一条时间计算
-v start="$(date -d "$(head -n 1 access.log | grep "getVideoInfo" | cut -d "|" -f 1)" +%s)" -v end="$(date -d "$(tail -n 1 access.log | grep "getVideoInfo" | cut -d "|" -f 1)" +%s)"
3.计算qps
awk -F "|" -v start="$(date -d "$(head -n 1 access.log | grep "getVideoInfo" | cut -d "|" -f 1)" +%s)" -v end="$(date -d "$(tail -n 1 access.log | grep "getVideoInfo" | cut -d "|" -f 1)" +%s)" '$8=="/getVideoInfo?id=1" {count++} END {qps=count/(end-start); print qps}' access.log

详见 https://cloud.tencent.com/developer/article/2357770

2.TPS

TPS全称为Transactions Per Second,即每秒钟处理的事务数量。事务是指一个操作或者一组操作的集合,例如提交一个订单、更新一个用户信息等等。与QPS类似,TPS也是衡量高并发应用性能的重要指标之一。

以支付宝为例,每秒钟需要处理大量的交易请求,因此TPS是支付宝必须要关注的性能指标。如果支付宝的TPS不足,那么就会导致用户无法及时完成交易,给用户带来不便。如果每个订单包含多个操作(例如下单、付款、发货等),那么需要考虑每秒钟能够处理的事务数量。假设每个订单需要处理10个事务,那么每秒钟需要处理的事务数量就是11.57 * 10 ≈ 115.7。因此,这个网站的TPS应该至少达到115.7。

3.PV

PV 即 page view,页面浏览量。用户每一次对网站中的每个页面访问均被记录 1 次。用户对同一页面的多次刷新,访问量累计。可以统计服务一天的访问日志得到。

这篇关于nginx日志统计qps的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/827769

相关文章

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

如何使用Nginx配置将80端口重定向到443端口

《如何使用Nginx配置将80端口重定向到443端口》这篇文章主要为大家详细介绍了如何将Nginx配置为将HTTP(80端口)请求重定向到HTTPS(443端口),文中的示例代码讲解详细,有需要的小伙... 目录1. 创建或编辑Nginx配置文件2. 配置HTTP重定向到HTTPS3. 配置HTTPS服务器

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

Mysql如何将数据按照年月分组的统计

《Mysql如何将数据按照年月分组的统计》:本文主要介绍Mysql如何将数据按照年月分组的统计方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql将数据按照年月分组的统计要的效果方案总结Mysql将数据按照年月分组的统计要的效果方案① 使用 DA