原文链接

本文介绍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高级模板,即可。帮助文档

原文链接

转载于:https://my.oschina.net/u/3568122/blog/1186579

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

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

    本文介绍ARMS如何实现Nginx的监控场景,对于ARMS本文主要解决的问题,还记得小明的老板给他布置的任务吗?需求回顾 1. ARMS的Nginx监控方案概述和准备 目前在监控领域上比较流行的数据处 ...

  2. 如何快速实现一个基于Nginx网站的监控场景

    一切从应用服务监控说起 小明所在的一家小型互联网创业公司一直将应用运行在阿里云上.该应用采用通用的分布式 Nginx+App 架构为用户提供电商数据统计的 webservice 服务.应用运行至今除偶 ...

  3. 基于halo快速搭建一个属于你自己的博客网站

    基于halo快速搭建一个属于你自己的博客网站 公众号 前置条件 JDK安装 下载halo配置文件 下载halo的启动jar 验证启动 公众号 前置条件 首先你需要有一台自己的服务器,比如你去各类云上面 ...

  4. 如何快速搭建一个基于FengMap的地图导航应用?

    蜂鸟视图自成立以来就专注于提供从地图数据生产.地图编辑运维.地图应用开发的全流程专业技术产品与服务.长期的市场考验与技术迭代升级,产品功能接口较全面,性能表现优异. 日前,蜂鸟视图正式向海内外开发者用 ...

  5. 如何快速搭建一个属于自己的网站?

    随着互联网的发展,网站建设的技术也越来越成熟,建站的方式也愈加丰富和多样.同时,互联网时代,无论是组织还是个人,无论是大企业还是小社团,拥有一个属于自己的网站,必不可少. 可是,不同的组织.不同的人, ...

  6. 使用Django+MySQL快速搭建一个属于自己的网站

    使用Django+MySQL快速搭建一个属于自己的网站 Hello小伙伴们,你们好啊~~ 又是日常get新技能的一天, 今天,咱们来整理一下如何使用VMware Workstation上进行openE ...

  7. 【Linux】快速搭建一个基于Vue的大型单页应用

    文章目录 一.npm的安装 二.cnpm的安装 四.Vue的安装 五.快速搭建大型单页应用 六.运行截图 开发环境:Ubuntu 20.0.4 一.npm的安装 sudo apt install np ...

  8. simpla是基于laravel5的php,一个基于laravel5.1的后台

    一个基于laravel5.1的后台 由 alonexy 创建于3年前, 最后更新于 7个月前 版本号 #2 3170 views 1 likes 0 collects 模版采用 Adminlte.io ...

  9. 基于django快速开发一个网站(一)

    *  创建虚拟环境.基于虚拟环境创建django==2.0.0和图片加载库和mysql数据库驱动 1. 创建目录并创建虚拟环境 ╰$ mkdir Cornucopiavirtualenv ╰$ cd ...

最新文章

  1. python 内置函数的一部分
  2. lisp修改天正标高值_【求教】如何批量修改天正字体
  3. 游戏杆编程心得二:如何判断按钮的有效按下
  4. Matlab-绘制日期图
  5. 算法题解:最小编辑距离(动态规划算法)
  6. 【python数据挖掘课程】二十五.Matplotlib绘制带主题及聚类类标的散点图
  7. Java进阶:java字符串定位语句
  8. C#实验——Problem Statement
  9. iPDA“国际智能车联合道路演示”压轴,IEEE IV 2018 圆满落幕!
  10. dockerfile制作镜像及k8s中应用
  11. JAVA运算的类型兼容原则_Java基础语法回顾(一)
  12. 【车间调度】基于matlab遗传算法求解车间调度问题【含Matlab源码 070期】
  13. 直播预告:摄影测量影像快速立体匹配关键技术研究
  14. 下载文件HTTP请求及处理过程
  15. 小米 信号测试软件,小米WiFi测试版
  16. 阿里云服务器建站、心选建站、定制建站有什么区别,如何选择
  17. 神奇的口袋——Java
  18. python压缩文件tar_python 实现tar文件压缩解压的实例详解
  19. C语言-顺序表直接删除重复元素
  20. CRM下午茶(十)-从淘江湖说起

热门文章

  1. 程序员的时间管理计划
  2. day1 计算机基础以及python基础
  3. 东方已渐白。一枕清欢更待何人说
  4. 洛谷P2486 lct做法
  5. Dream-hacking 造梦工程与脑波艺术
  6. 阿里云的mysql问题
  7. html5关于校庆作品名称,五十五周年校庆标语
  8. 手机改小视窗什么意思_小窗口,大作用!
  9. javascript 区号与城市的对应信息
  10. office2016实用论文排版技巧