设为首页 收藏本站
查看: 2410|回复: 0

[资源发布] 用Prometheus细化Nginx监控

[复制链接]

尚未签到

发表于 2018-11-8 07:21:42 | 显示全部楼层 |阅读模式
  国内用Nginx的比较多,Nginx的监控比较老的方案可能是通过跑脚本定期收集nginx的status模块的数据,或者监控nginx的日志;后来阿里的tengine在国内开始流行,于是诞生了很多不错的lua模块;但是这些监控方案在有新的监控需求的时候,可能就需要再修改脚本或者更改nginx conf配置,有时候不是特别的方便。用Prometheus进行nginx的监控可以自动的对相关server_name和upstream进行监控,你也可以自定义Prometheus的数据标签,实现对不同机房和不同项目的nginx进行监控。
  监控Nginx主要用到以下三个模块:
  nginx-module-vts:Nginx virtual host traffic status module,Nginx的监控模块,能够提供JSON格式的数据产出。
  nginx-vts-exporter:Simple server that scrapes Nginx vts stats and exports them via HTTP for Prometheus consumption。主要用于收集Nginx的监控数据,并给Prometheus提供监控接口,默认端口号9913。
  Prometheus:监控Nginx-vts-exporter提供的Nginx数据,并存储在时序数据库中,可以使用PromQL对时序数据进行查询和聚合。
  一、nginx-module-vts模块的编译
  nginx_vts_exporter依赖nginx-module-vts模块,安装此模块无需任何其他依赖。模块与Nginx的版本兼容性如下:
  1.11.x (last tested: 1.11.10)
  1.10.x (last tested: 1.10.3)
  1.8.x (last tested: 1.8.0)
  1.6.x (last tested: 1.6.3)
  1.4.x (last tested: 1.4.7)
  同时适用于tengine,其他nginx早期版本未做验证。
  安装步骤:


  • 下载模块  shell> git clone git://github.com/vozlt/nginx-module-vts.git

  •   编译配置
      在nginx编译时添加vts模块
      --add-module=/path/to/nginx-module-vts
      下载官方的软件包并编译进vts模块,例如:
      

    ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_sysguard_module  --add-module=nginx-module-vts  


  •   安装:
      make && make install
      二、Nginx Conf配置
      更改Nginx Conf的配置,添加监控接口/status/:
      

    http {  
    vhost_traffic_status_zone;
      vhost_traffic_status_filter_by_host on;
      

      
    ...
      

      
    server {
      

      ...
      

      location /status {
      vhost_traffic_status_display;
      vhost_traffic_status_display_format html;
      }
      
    }
      
    }
      


  配置建议:  


  • 打开vhost过滤:  vhost_traffic_status_filter_by_host on;
      开启此功能,在Nginx配置有多个server_name的情况下,会根据不同的server_name进行流量的统计,否则默认会把流量全部计算到第一个server_name上。

  • 在不想统计流量的server区域禁用vhost_traffic_status,配置示例:  

    server {  
    ...
      
    vhost_traffic_status off;
      
    ...
      
    }
      

      假如nginx没有规范配置server_name或者无需进行监控的server上,那么建议在此vhost上禁用统计监控功能。否则会出现“127.0.0.1”,hostname等的域名监控信息。
      三、监控数据的查看
      安装完vts模块后,可以通过nginx status接口进行监控数据的查看,比如:http://127.0.0.1/status:

DSC0000.jpg

  在页面的最下方可以指定监控页面刷新的时间间隔,点击JSON,可以转为JSON格式输出。
DSC0001.jpg

  三、nginx-vts-exporter的使用
  exporter会收集nginx性能指标的JSON格式数据,并汇总后暴露监控接口给Prometheus。
  它的安装使用很简单,开箱即用:


  • 下载当前最新版本的软件包:  # wget -c https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.9.1/nginx-vts-exporter-0.9.1.linux-amd64.tar.gz

  • 解压后运行:  #  nginx-vts-exporter-0.9.1.linux-amd64/nginx-vts-exporter -nginx.scrape_timeout 10 -nginx.scrape_uri http://127.0.0.1/status/format/json
      推荐exporter和nginx安装在同一台机器上,如果不在同一台主机,把scrape_uri改为nginx主机的地址。
      nginx_vts_exporter的默认端口号:9913,对外暴露监控接口http://xxx:9913/metrics.

  四、Nginx的监控数据类型
  nginx-vts-exporter的数据类型命名空间默认以“nginx”开头,主要有如下9个:
  HELP是对监控条目的解释,TYPE的格式是:监控条目名称+Prometheus数据类型:
  

# HELP nginx_server_bytes request/response bytes  
# TYPE nginx_server_bytes counter
  
# HELP nginx_server_cache cache counter
  
# TYPE nginx_server_cache counter
  
# HELP nginx_server_connections nginx connections
  
# TYPE nginx_server_connections gauge
  
# HELP nginx_server_requestMsec average of request processing times in milliseconds
  
# TYPE nginx_server_requestMsec gauge
  
# HELP nginx_server_requests requests counter,可以区分状态码
  
# TYPE nginx_server_requests counter
  
# HELP nginx_upstream_bytes request/response bytes
  
# TYPE nginx_upstream_bytes counter
  
# HELP nginx_upstream_requestMsec average of request processing times in milliseconds
  
# TYPE nginx_upstream_requestMsec gauge
  
# HELP nginx_upstream_requests requests counter,可以区分状态码
  
# TYPE nginx_upstream_requests counter
  
# HELP nginx_upstream_responseMsec average of only upstream/backend response processing times in milliseconds
  
# TYPE nginx_upstream_responseMsec gauge
  

  五、Nginx监控在Prometheus的数据汇总
  常用监控汇总表达式:
  DomainName对应nginx conf里的server_name,这里可以根据不同的server_name和upstream分别进行qps、2xx/3xx/4xx/5xx的状态码监控,另外也可以监控nginx每台后端server的qps和后端接口响应时间。
  如果不需要区分server_name,可以把表达式里的$DomainName改为星号,“*****”代表所有;


  • 求Nginx的QPS:  sum(irate(nginx_server_requests{code="total",host=~"$DomainName"}[5m]))

  • 求4xx万分率(5xx类似,code=“5xx”):  (sum(irate(nginx_server_requests{code="4xx",host=~"$DomainName"}[5m])) / sum(irate(nginx_server_requests{code="total",host=~"$DomainName"}[5m]))) * 10000

  • 求upstream的QPS(示例求group1的qps):  sum(irate(nginx_upstream_requests{code="total",upstream="group1"}[5m]))

  • 求upstream后端server的响应时间(示例求group1的后端响应时间):  nginx_upstream_responseMsec{upstream=“group1”}

  六、Nginx监控的展示
  Dashboard的展示当然是使用grafana,自己根据表达式画图即可,监控图类似:
DSC0002.jpg




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表