如何快速实现一个基于Nginx的网站监控场景 – 操作篇

本文介绍ARMS如何实现Nginx的监控场景,对于ARMS本文主要解决的问题,还记得小明的老板给他布置的任务吗?需求回顾

1. ARMS的Nginx监控方案概述和准备

目前在监控领域上比较流行的数据处理方法有很多种,例如,搜索引擎,时间序列数据库,实时计算,甚至是大数据离线计算,等。

ARMS采用的是实时计算+列式存储。这种方案的优势是数据实时性高,而且对于固定的数据查询接口查询效率非常快。在Nginx的监控方案中,其架构概要如下所示, 蓝色部分为ARMS所集成的Nginx监控开箱即用的黑盒。

由于ARMS的分析是针对Nginx的accee.log日志,因此对Nginx日志有一定要求,需要用户在nginx.config中配置出打印内容,包括:“$upstream_response_time” “$request_time”等代表请求消耗时间的日志信息。如下例:

 log_format   main '$remote_addr - $remote_user [$time_local]  $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'"$upstream_response_time" "$request_time" "$ user_cookie_id"' ;

这样的话,打印出的日志,大致如下表所示。

58.211.119.29 144288 - [16/Mar/2017:21:47:07 +0800] "POST http://arms.console.aliyun.com/api/query.json?action=DataQueryAction&eventSubmitDoQueryData=1" 200 594 "https://arms.console.aliyun.com/" "127.0.0.1:8080" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4" "0.144" "0.144" "EX866MB1-Y70JO57WM37ST3HWDVFK3-JWPNH30J-Z"
58.211.119.29 148219 - [16/Mar/2017:21:47:08 +0800] "POST http://arms.console.aliyun.com/api/query.json?action=DataQueryAction&eventSubmitDoQueryData=1" 200 583 "https://arms.console.aliyun.com/" "127.0.0.1:8080" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4" "0.148" "0.148" "EX866MB1-Y70JO57WM37ST3HWDVFK3-JWPNH30J-Z"

查看详细要求

完成上述日志配置定制以后,即可开始在ARMS上进行配置。以下篇幅从ARMS数据集,报警,和交互大盘,三个部分进行配置概要描述。关于数据源如何添加到ARMS可参见文档,在此不赘述。

2. 基于ARMS的Nginx监控 数据集实现

在Nginx监控模板中,用户数据分为两类,一类是指标,相当于数据仓库中的Measure;一类是维度,相当于数据仓库中的Dimension。

对于Nginx监控,最常见的指标为以下几类指标:

页面的PV, UV

  • PV: 页面的PV通过对access.log中的每一条日志做count来统计,
  • UV: 通过日志中代表用户ID的对应的$cookie_id来做count distinct来统计。对应的cookie_id需要开发人员进行手动统计。

页面响应时间

  • 平均页面响应时间: 在ARMS中通过对$request_time做sum操作来统计出total_request_time,然后在通过total_request_time / pv来得到某维度下的平均响应时间。
  • 最大响应时间: 则对单条日志request_time进行max统计。

页面流量

  • 平均页面流量和最大页面流量:针对 $body_bytes_sent来进行统计。统计方式和页面响应时间类似,不赘述。

对于Nginx监控,最常见的维度有以下几类:

  • 页面URL: $request。用户可以针对特定URL进行访问统计,甚至可以在不同URL之间进行访问排行。
  • 页面返回状态:$status。用户可以针对不同的返回值维度进行统计,如仅统计200返回值的正常页面访问情况,或是非200返回值的错误页面访问情况。
  • 浏览器类型:根据 $http_user_agent 统计出的用户的浏览器客户端,如Chrome, Sofari, IE, Firefox, 甚至Curl命令,等。用户可以根据此类维度统计客户端的分布情况。
  • 用户ID:根据 $cook_id 统计出的用户的使用习惯,如哪一类页面被哪一些用户经常访问,等。

对于ARMS的数据集设计,其实就是针对用户感兴趣的Nginx监控结果,进行各类维度的排列组合。

  • 例如,以页面URL维度,统计UV, PV,页面响应时间,则可以统计出不同页面的各自的UV, PV和页面响应时间,甚至根据例如PV进行TopN排行。

下图是一个数据集配置的例子,该数据集配置出两个维度: URL和Status (支持由URL下钻到Status的查询方式),分别统计两个指标:PV和UV。这样用户可以依次下钻页面路径和返回值来查询PV, UV情况。

下图是另个数据集配置的例子,该数据集配置出和上例相同但是顺序相反的两个维度: Status和URL (支持由Status下钻到URL的查询方式),分别统计两个指标:PV,平均响应时间,最高响应时间 。其中,平均调用时间是复合指标,由 总体调用时间 / PV 间接得出。

3. 基于ARMS的Nginx监控 报警实现

常见的Nginx报警有以下几种:

  • 某类页面的响应时间过长。
  • 某类页面的错误率页面过高。
    使用ARMS的原生报警的一些特性天然支持Nginx监控报警的各种场景。以下举例。
  • 支持某类指标的维度下钻遍历
    例如检查(遍历)所有页面维度的响应时间是否超过100ms.
  • 支持不同指标之间的复合计算
    典型如错误码为5xx占总调用的占比,通过不同指标复合计算而得。
  • 支持各种其他报警高级报警配置
    包括最近N分钟同比,环比,最大,最小值比较,等。例如,最近5分钟同比PV下跌50%这种典型的场景。

以下例子结合以上三个特点,介绍了一种如何在ARMS定义”任意URL调用一分钟500返回占比超过10%”的报警定义例子,如下所示。

4. 基于ARMS的Nginx监控大盘配置

监控大盘一般有以下几个用途:

  • 挂在作战室,全面掌控运行状态。
  • 用于实时查看,并下钻分析每个具体用户或网页的网站实际使用情况。

针对Nginx监控,ARMS可以基于类似用户维度,页面维度,IP维度,甚至地域维度,展示不同的数据。以展示用户总体UV, PV为例,假设对应的数据集为”整站UV PV”,则配置如下:

集成各类UV, PV,响应时间等统计的最终交互式大盘效果图如下:

5. 马上快速上手

以上各类Nginx监控场景,目前在ARMS上已有成熟商业模板支持,用户只需要在ARMS首页点击 “新建标准模板监控”,并选择Nginx高级模板,即可。帮助文档

详细了解ARMS

其他解决方案推荐阅读

1. 如何快速构建全渠道零售平台
2. 针对移动互联网&物联网场景的消息服务解决方案
3. 如何高效处理 IOT 中的数据与消息
4. Dubbo的商业化解决方案
5. 面向万物互联的高性能时序数据库 HiTSDB
6. 打造立体化监控体系的最佳实践
7. 浅谈性能测试 PTS
8. 全面了解企业级互联网架构和阿里云中间件产品

时间: 2025-01-02 15:36:12

如何快速实现一个基于Nginx的网站监控场景 – 操作篇的相关文章

如何快速实现一个基于Nginx的网站监控场景----需求篇

一切从应用服务监控说起 小明所在的一家小型互联网创业公司一直将应用运行在国内某A云上.该应用采用通用的分布式Nginx+App架构为用户提供电商数据统计的webservice 服务.应用运行至今除偶发各类Bug, 性能问题以外,情况还算良好.   最近,小明的老板给小明布置了一个任务,希望把应用服务监控起来,以提高应用运行质量.老板的需求有三点: 1.    先以应用服务监控为抓手,能 a)     实时统计应用各类服务的调用次数 b)     基于a,实时统计各类服务各类返回值的次数,如200

linux-想做一个基于图像对比视频监控的监控系统应该看哪些书籍或者推荐学习什么?

问题描述 想做一个基于图像对比视频监控的监控系统应该看哪些书籍或者推荐学习什么? 基于mini2440来做的,主要是通过图像对比看当前采集到的数据和之前的有没有变化,来决定采集到的数据要不要存储.

如何快速搭建一个装饰公司的网站

问题描述 朋友拜托我搭建一个装饰公司的网站:很久以前做过asp的网站.当时网站管理还是个技术活,还没有后台管理的说法.只是编写了前段页面.有什么更新都需要程序员完成.所以对现在的网站,有点迷茫,希望听听大家的意见.因为没什么具体需求,只是一个公司的展示网站就可以.有没有通用的代码可以参考?因为涉及到后续维护,简单的程序修改我可以做.资料提交的后台操作,装修公司做.简单易懂的可以考虑收购一个! 解决方案 解决方案二:用一些cms系统加上主题就可以了.解决方案三:我是新手,但我觉得我能为你提供最现实

一个初级站长的网站推广心得利器篇之线下推广

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 线下推广篇,上篇<<一个初级站长的网站推广心得之 利器篇>>我介绍了一些网上宣传的利器,不知道是否有益处,我是那样做的,确实有些效果.今天给我继续给大家介绍一下我对线下宣传的了解.一般站长都是比较寒酸的,有钱了谁还出来干站长啊,呵呵.原则就是花最少的钱,办更多的事. 利器之一:传单 发放传单的效果仁者见仁智者见智,多数

程序猿如何快速打造一个有设计感的网站

  像我这样的程序员来说经常被"设计"这个词吓到,因为我是一名程序员而不是设计师,我拥有的是计算机学位证,另外我对 Comic Sans 字体并不介意.(注:Comic Sans 字体是 Win95 附带的一种漫画字体,设计行业极为排斥,设计师或那些拥有美学情结的人不屑与之为伍) 虽然只是一名程序员,但我还是想让自己的网站看起来更加吸引人,一方面出于虚荣,因为这样可以显得我更加"专业",而另一方面是出于现实,因为研究机构调查发现用户会更加信任那些网站"看起

码农如何快速打造一个有设计感的网站

注:拥有属于自己的网站是很多人的梦想,但大多数人只能借助像 WordPress 这样的 CMS 实现,甚至很多公司网站也是这样.但这些网站大多数看起来都比较缺乏设计感,通俗来讲就是有点"土".那么对于像程序员以及其他对设计比较小白们来说,如何能让你的网站看起来更加前卫,有范,有设计感呢?极客公园编译了 24WAYS 的文章 How to Make Your Site Look Half-Decent in Half an Hour 为您提供解决方法. 像我这样的程序员来说经常被&quo

教你快速打造一个有设计感的网站

对于好多程序员来说,经常被"设计"这个词吓到,因为Ta是一名程序员而不是设计师,拥有的是计算机学位证,另外对 Comic Sans 字体并不介意.(注:Comic Sans 字体是 Win95 附带的一种漫画字体,设计行业极为排斥,设计师或那些拥有美学情结的人不屑与之为伍.更多查看这篇为什么不要使用 Comic sans 字体) 虽然只是一名程序员,但还是想让自己的网站看起来更加吸引人,一方面出于虚荣,因为这样可以显得更加"专业",而另一方面是出于现实,因为研究机构

大数据的设计师帮你快速搞定一个极简风格网站

  如何快速做出一个极简风格网站?国外某个网站统计分析了112个明显带有极简风格的网站后,发布了这篇超级干货.全程都是以数据来说话,从占比最大的设计要素开始说起,有案例有分析,把极简风格的设计彻底发挥到了术的地步. 最小化设计的目标是移除界面当中不必要的元素或内容,减少干扰,使界面最大程度的支持用户的任务流程. 要将界面以恰当的方式简化到只保留必要元素的程度,设计师需要对一系列与最小化策略高度相关的设计模式有所了解.界面设计,就像人类的语言一样,最终是由人们的使用方式所定义的.如今,虽然"最小化

【实战】基于Nginx、Node.js和Redis的Docker工作流

本文讲的是[实战]基于Nginx.Node.js和Redis的Docker工作流,[编者的话]本文是一篇实践性很强的文章.作者通过一个完整的示例讲述了构建一个基于Nginx.Node.js.Redis的应用服务的Docker流程.推荐所有Docker使用者阅读,并根据文章实践. 在我的前一篇文章中,我已经介绍了关于容器和Docker是如何影响PaaS.微服务和云计算的.如果你刚刚接触Docker和容器,我强烈建议你先读一读我之前的文章.作为之前文章的一个延续,在本文中我仍会讲述一些Docker工