Nginx 现已成为目前使用最广泛的 Web 服务器和反向代理服务器,我们线上的Tomcat服务器一般都会由nginx进行代理,从而实现负载均衡的效果。Nginx被应用得那么广泛,如何构建Nginx 的状态监控呢?
下面是利用 Prometheus+Grafana 构建Nginx状态监控,主要记录了搭建的过程。有需要的同学可以作为参考~
部署nginx-module-vts
nginx-module-vts 是 Nginx 状态监控模块,可提供json格式的数据。
1.1 自定义编译安装 nginx
- 准备好相关的源码
mkdir /app && cd /app git clone git://github.com/vozlt/nginx-module-vts.git wget http://nginx.org/download/nginx-1.16.0.tar.gz tar xf nginx-1.16.0.tar.gz && cd nginx-1.16.0
- 编译安装nginx,增加 nginx-module-vts 模块
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fdebug-prefix-map=/data/builder/debuild/nginx-1.16.0/debian/debuild-base/nginx-1.16.0=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie' --add-module=../nginx-module-vts make && make install
- 修改完成后重新打包nginx的镜像,并上传到私有镜像仓库(此处省略)
1.2 配置nginx状态监控模块
- 在http段增加以下配置
http { ... vhost_traffic_status_zone; vhost_traffic_status_filter_by_host on; ... }
- 增加一个虚拟主机,用于监控接口
server { listen 80 default; server_name 172.19.10.231; location /status { vhost_traffic_status_display; vhost_traffic_status_display_format html; } }
配置说明:
1)vhost_traffic_status_filter_by_host on;
在Nginx配置有多个server_name的情况下,默认是流量全部计算到第一个server_name上。开启此功能后会根据不同的server_name进行流量的统计。
2)vhost_traffic_status off;
如果有server不需要统计流量,则在该server区域增加此参数。
1.3 监控状态页面查看
根据所配置的监控接口服务,访问测试。本例中为:http://172.19.10.231/status
部署nginx-vts-exporter
用于收集Nginx的监控数据,给Prometheus提供监控接口。
使用如下的yaml文件可直接部署nginx-vts-exporter服务,默认参数下,需要跟Prometheus放在一个命名空间下。
apiVersion: apps/v1beta2 kind: Deployment metadata: labels: workload.user.cattle.io/workloadselector: Reconcile name: nginx-vts-exporter namespace: monitoring spec: selector: matchLabels: app: nginx-vts-exporter template: metadata: labels: app: nginx-vts-exporter spec: containers: - image: sophos/nginx-vts-exporter:latest name: nginx-vts-exporter ports: - containerPort: 9913 protocol: TCP - env: - name: NGINX_STATUS value: http://172.19.10.231/status/format/json --- apiVersion: v1 kind: Service metadata: name: nginx-vts-exporter namespace: monitoring labels: app: nginx-vts-exporter spec: selector: app: nginx-vts-exporter ports: - port: 9913 targetPort: 9913 注意:环境变量 NGINX_STATUS 值的地址需修改为nginx vst模块提供的监控接口 增加Prometheus Target
收集nginx-vts-exporter提供的Nginx数据。
修改Promethues的配置文件,将nginx-vts-exporter写入target字段配置:
... scrape_configs: - job_name: 'prometheus' static_configs: ... - targets: - 'nginx-vts-exporter:9913' ...
热加载Promethues配置生效。
部署Grafana Dashboard
为 Nginx 监控提供图形化展示
Grafana里导入模版:nginx-vts-stats_rev2.json
(由于模板内容较多,就不在文中展示,后台私信发送「nginx状态监控」 即可获得)
选择数据源为Prometheus,保存。显示效果如下:
除了上述方式以外,小编近期还有发现一款运维神器——王教授,当中的“Forethought 监控”模块也可以轻松实现上述功能,其监控的对象既可以是一台服务器,也可以是运行的服务,例如 Nginx,Apache 等。目前“ Forethought”支持3种数据源:阿里云云监控、InfluxDB 数据源和自定义数据源,全方面的满足用户的业务监控需求。
除此之外王教授相比其他监控系统的强大之处在于,只要在当中绑定云账号的AcessKey,即可为用户提供基于云端的可视化数据监控与汇聚,帮助我们在监控事件发生后快速分析和定位问题。
有需要的同学可以点击文末王教授二维码查看详情~
网站崩溃找不到原因?平台搭建无从下手?热门技术不想落伍?想要变强找不到资料?
加入[IT拯救联盟],让大牛和同伴拯救你,带你装x带你飞。定期干货分享、大牛专业解答、实用IT工具优选.....
私信小编“联盟”,即可加入我们~