Nginx监控模块nginx-module-vts编译安装

  |   0 评论   |   528 浏览

背景

最近发现日志接收服务中偶尔会出现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 \


configure.png

将以下内容放入build.sh中执行

for file in *.spec; do
    spectool -g -R $file
    rpmbuild -ba $file
done

查看结果

编译后的RPM包位于~/rpmbuild/RPMS/x86_64/目录

rpm.png


部署新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;
        }
    }
}

验证

访问http://${IP}:${PORT}/statusimage.png

点击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