Openresty--关于统计qps和tps的思路及代码设计

本文介绍如何使用OpenResty通过Lua脚本来实时统计QPS(每秒请求数)和TPS(每秒处理数)。通过在access阶段和log阶段设置ngx.shared.dict并利用add和incr函数来实现计数器的功能。最终,在两个不同的端口分别展示实时的QPS与TPS值以及前一秒的统计数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:

QPS----每秒中服务器端收到的请求数量。

TPS----特意说明下,在这里当中的意思是每秒处理完成的请求的数量。

需掌握:

openresty的access,log阶段

ngx.shared.DICT 及其add get 和incr函数

思路:

QPS的统计:在access阶段当前秒钟第一个请求进来时,将字段("qps_num:")+当前时间作为key,value为1写入缓存中,当下一个请求进来时,递增1.

TPS的统计:在log阶段当前秒钟第一个请求进来时,将字段("tps_num:")+当前时间作为key,value为1写入缓存中,下一个请求走到该阶段时,递增1.

设计:

在80端口返回正常响应,并记录tps和qps,在81端口返回上一秒钟的tps和qps值。

实现:

nginx.conf:

...
http{
    ...
    lua_shared_dict cache 10m;
    ...
server{
    listen 80;
    server_name 80;
    access_by_lua_block{
	local cache=ngx.shared.cache
	local ctime=os.time()
	local qps_key="qps_num"..ctime
	local expire=3
	cache:add(qps_key,0,expire)
	cache:incr(qps_key,1)
	}
	
	log_by_lua_block{
	local cache=ngx.shared.cache
	local ctime=os.time()
	local tps_key="tps_num"..ctime
	local expire=3
	cache:add(tps_key,0,expire)
	cache:incr(tps_key,1)
	}
    location / {
    proxy_pass ...;
    }
}

server{
	listen 81;
	server_name 81;
	location / {
	content_by_lua_block{
	local cache=ngx.shared.cache
	local ctime=os.time()
	local timen=tonumber(ctime)-1
	local qps_key="qps_num"..timen
	local tps_key="tps_num"..timen
	local qps_count=cache:get(qps_key) or 0
	local tps_count=cache:get(tps_key) or 0
	ngx.say("qps: ",qps_count)
	ngx.say("tps: ",tps_count)
	}
	
	}
}
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值