玖叶教程网

前端编程开发入门

Prometheus+Grafana 构建 Nginx 状态监控

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工具优选.....

私信小编“联盟”,即可加入我们~

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言