通过ngx-lua来统计nginx上的虚拟主机性能数据

Share on:

最近研究公司项目,发现是用ngx-lua来统计api的日均请求量、峰值、响应时间、状态码等等。
用ngx-lua来做性能统计、甚至一些运营数据统计,都是非常好的选择。
1.几乎对原有项目代码分离
2.性能佳
3.支持分不同虚拟主机统计, 同一个虚拟主机下可以分不同的location统计
4.可以统计与query-times、request-time、status-code、speed相关的数据
因为基于ngx-lua所以需要先安装环境,请移步Nginx安装lua-nginx-module模块
github这个项目https://github.com/initial5/ngx-lua-stats前辈们已给代码
使用方法就是在nginx.conf的http中配置加入

lua_shared_dict log_dict 5M;
lua_shared_dict result_dict 5M;

然后在入口nginx上配置

server {
listen 80;
server_name funboxpower.com;
access_log /home/logs/funboxpower.com.log main;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://funboxpower.com_backend;
log_by_lua_file ./site-enable/record.lua;
}
}

记得配upstream,否则之后用到的统计有关于upstream的值是出不来的,这个我还要进一步确认下
然后可以再配一个server

server {
listen 8080 default;
server_name _;
location / {
return 404;
}
location /status {
content_by_lua_file ./site-enable/output.lua;
}
location /empty_dict {
content_by_lua_file ./site-enable/empty_dict.lua;
}
}

配置好后,就可以通过如下命令获取

curl ip_addr:8080/status

运行一段时间之后, 字典会变大. 可以通过如下接口清理

数据返回如下格式

key: funboxpower.com__upstream_time_10.0.3.32:8250_counter
0.375
key: funboxpower.com__upstream_time_10.0.3.32:8250_nb_counter
124
key: funboxpower.com__upstream_time_10.0.4.93:8250_counter
0.131
key: funboxpower.com__upstream_time_10.0.4.93:8250_nb_counter
123
key: funboxpower.com__upstream_time_10.20.12.49:8250_counter
0.081
key: funboxpower.com__upstream_time_10.20.12.49:8250_nb_counter
127
key: funboxpower.com__query_counter
500
key: funboxpower.com__request_time_counter
0.68
key: funboxpower.com__upstream_time_counter
0.683
key: funboxpower.com__upstream_time_10.20.12.59:8250_counter
0.096
key: funboxpower.com__upstream_time_10.20.12.59:8250_nb_counter
126
key: funboxpower.com__bytes_sent_counter
81500

其中__用来分割虚拟主机(包含prefix)与后面的数据项,便于数据处理.
counter表示此值一直在累加
nb_counter表示次数
可以得到的数据包括: query次数 request_time bytes_sent upstream_time
其中
upstream_time_10.20.12.49:8250_counter 表示到某个特定后端的upstream_time耗时累加
upstream_time_10.20.12.49:8250_nb_counter 表示到到某个特定后端的upstream_time次数累加

数据处理,delta不明白啥意思,先记录
delta(bytes_sent_counter)/delta(query_counter) 得到就是这段时间的http传输速度
delta(upstream_time_10.20.12.49:8250_counter)/delta(upstream_time_10.20.12.49:8250_nb_counter) 得到的就是这个后端upstream_time的平均值

闽ICP备12003472号-7