Nginx监控模块nginx-module-vts编译安装
- 背景
- 编译OpenResty
- 获取代码
- 下载vts插件
- 下载openresty-packaging
- 准备打包环境
- 安装rpm build工具包
- 安装OpenResty依赖包
- 安装OpenResty包
- 准备RPM环境
- 开始打包
- 修改openresty.spec添加vts插件
- 将以下内容放入build.sh中执行
- 查看结果
- 部署新OpenResty
- 替换文件
- 配置vts
- 验证
- 可能遇到的问题
- 依赖的openresty模块不存在
背景
最近发现日志接收服务中偶尔会出现503的错误,以及在后续用户行为分析时会出现行为缺失的情况,猜想日志上报接收过程中可能会存在数据丢失的情况。然而目前的日志接收服务(OpenResty)中并没有相关的监控信息,无法判断问题出在什么地方,因此考虑对Nginx添加监控。经过调研,大致有两种方案:
通过ngxtop等工具分析Nginx日志,优点是侵入性低,但需要开启access_log,线上环境中为了性能通常把这个关掉了;
通过lua_shared_dict指令开启一个内存共享空间,将需要统计的指标存入,优点是监控粒度细,但后面的监控也是个问题;
通过第三方插件如nginx-module-vts等进行监控;
经过对比,nginx-module-vts的功能最强大,且可以结合我们已有的Telegraf+InfluxDB+Grafana来进行监控,通过配置一些文件就可以搞定,不需要再新增服务,减少维护成本。
有利有弊,nginx-module-vts需要重新编译OpenResty,将这个插件添加进去,下面是具体过程介绍
编译OpenResty
获取代码
下载vts插件
git clone git://github.com/vozlt/nginx-module-vts.git /usr/local
下载openresty-packaging
git clone https://github.com/openresty/openresty-packaging.git ~/
准备打包环境
安装rpm build工具包
yum install rpm-build redhat-rpm-config rpmdevtools
安装OpenResty依赖包
yum install openssl-devel zlib-devel pcre-devel gcc make perl \ perl-Data-Dumper libtool ElectricFence systemtap-sdt-devel valgrind-devel
安装OpenResty包
由于在编译RPM包的过程中,会存在彼此依赖的情况,为了方便编译,我们直接在编译服务器上把这些依赖包全部装上
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo yum install openresty-zlib-asan-devel openresty-openssl-asan-devel openresty-pcre-asan-devel \ openresty-zlib-devel openresty-openssl-debug-devel openresty-pcre-devel openresty-openssl-devel
准备RPM环境
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros cp ~/openresty-packaging/rpm/SOURCES/* ~/rpmbuild/SOURCES/ cp ~/openresty-packaging/rpm/SPECS/*.spec ./rpmbuild/SPECS
开始打包
cd ~/rpmbuild/SPECS
修改openresty.spec添加vts插件
vim openresty.spec,在configure参数中加入如下内容
--add-module =/usr/local/nginx-module-vts \
将以下内容放入build.sh中执行
for file in *.spec; do spectool -g -R $file rpmbuild -ba $file done
查看结果
编译后的RPM包位于~/rpmbuild/RPMS/x86_64/目录
部署新OpenResty
替换文件
yum remove openresty rpm -ivh openresty-1.13.6.2-1.el7.centos.x86_64.rpm
配置vts
在nginx.conf配置文件中加入如下内容
http { vhost_traffic_status_zone; ... server { ... location /status { vhost_traffic_status_display; vhost_traffic_status_display_format html; } } }
验证
点击JSON可以以JSON格式查看
可能遇到的问题
依赖的openresty模块不存在
在执行打包过程中可能会出现以下错误
openresty-zlib-asan-devel >= 1.2.11-6 is needed by openresty-asan-1.13.6.2-6.el7.centos.x86_64 openresty-openssl-asan-devel >= 1.1.0h-1 is needed by openresty-asan-1.13.6.2-6.el7.centos.x86_64 openresty-pcre-asan-devel >= 8.42-1 is needed by openresty-asan-1.13.6.2-6.el7.centos.x86_64 openresty-zlib-devel >= 1.2.11-3 is needed by openresty-debug-1.13.6.2-1.el7.centos.x86_64 openresty-openssl-debug-devel >= 1.1.0h-1 is needed by openresty-debug-1.13.6.2-1.el7.centos.x86_64 openresty-pcre-devel >= 8.42-1 is needed by openresty-debug-1.13.6.2-1.el7.centos.x86_64
解决办法
yum install openresty-zlib-asan-devel openresty-openssl-asan-devel openresty-pcre-asan-devel \ openresty-zlib-devel openresty-openssl-debug-devel openresty-pcre-devel openresty-openssl-devel
读后有收获可以支付宝请作者喝咖啡
