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


说明:

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)
	}
	
	}
}
}






相关内容

    暂无相关文章