Nginx如何监控各server的流量
nginx中,ngx_http_status_module(在1.13之前)或ngx_http_api_module中提供了丰富的nginx状态信息,可以作为nginx监控数据,可以更全面的监控nginx,但这两个模块都是收费版本的
而在开源版本中,就只能通过stub_status模块来查看nginx状态信息,如图:
这信息太少了,作为做常用的web中间件,这点信息显然不够
今天介绍一个第三方模块——ninx-module-vts,仓库地址:https://github.com/vozlt/nginx-module-vts
该模块是一个nginx的监控模块,能够提供json、html、prometheus格式的数据输出,虽然已经两年没有更新维护过了,但我在nginx1.16仍能编译成功
首先clone源码
接着在nginx源码包中添加动态模块
接着安装模块
安装完成,在objs目录下生成了库文件
将库文件复制到nginx的modules目录下,在nginx配置文件中通过load_module加载该模块
模块添加完之后,就可以享受商业版status模块(api模块)的待遇了,先来看下最基本的状态信息
上图就是html格式的状态信息,动态显示,每秒刷新一次,只需要如下配置
在http模块中添加vhost_traffic_status_zone
接着在vhost中添加status的location
如果是zabix监控采集数据,可以用json格式
如果是prometheus,可以直接用prometheus的格式输出
除了可以提供各种格式的数据输出,它最香的就是可以监控各vhost的流量
通常一个nginx的web服务中,会包含多个server,但是通常监控的流量都是服务器总的流量,目前我只能通过分析日志来进行访问量统计,找到流量大的server(如果有其他方式,请留言指教)
那么有这个nginx监控模块之后,各个server的流量,一览无余
复制一份刚才的配置,添加一个server
访问一下之后,查看状态页面
可以看到server zones统计中,每个server的信息分别详细展示
除了server分别统计外,各个upstream也可以分别统计,这样我们可以很方便的查看nginx转发到upstream的流量,结合监控可以实现动态调整后端权重或者流量
不得不说,这才是我要的nginx监控,如果也是你想要的,点个在看吧!