Nginx 如何监控各 server 的流量
而在开源版本中,就只能通过 stub_status 模块来查看 nginx 状态信息,如图:
这信息太少了,作为做常用的 web 中间件,这点信息显然不够
今天介绍一个第三方模块——nginx-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 的流量,结合监控可以实现动态调整后端权重或者流量
版权声明: 本文为 InfoQ 作者【运维研习社】的原创文章。
原文链接:【http://xie.infoq.cn/article/d5891e94a4b615572a27d1851】。文章转载请联系作者。
评论