如何做好线上监控?

栏目: 服务器 · 发布时间: 5年前

内容简介:本文首发于 TesterHome,近期和大佬们核对任务规划,梳理新财年要做的事情,有非常重要的一项就是线上监控。对于线上监控,大家都最熟悉不过,凡是在生产环境上运行的系统,或多或少都会有监控,但是否有认真思考过:

如何做好线上监控?

本文首发于 TesterHome, 文末有福利! 链接:https://testerhome.com/topics/19188

01 前言

近期和大佬们核对任务规划,梳理新财年要做的事情,有非常重要的一项就是线上监控。对于线上监控,大家都最熟悉不过,凡是在生产环境上运行的系统,或多或少都会有监控,但是否有认真思考过:

  • 哪些监控是有效的?

  • 监控的目的是什么?

  • 监控告警出来之后又是怎么的一轮操作?

今天就来交流探讨下关于线上监控的相关经验。

02 业务系统分析

在实施线上监控之前的梳理,核心还是要对业务系统有比较深刻的了解,才能对症下药,对于业务系统的梳理,可以套一下的框

如何做好线上监控?

简单举个例子,从阶段来说,一般初创期和快速迭代的系统,业务和功能都未必稳定,这时就不宜去做比较深度的监控,把核心场景覆盖即可,结合系统的核心目标,如用户活跃和流水,对流水和用户活跃数据的敏感度的监控等,同时一般面向外部用户的业务系统都是一个前台的角色,用户敏感度比较高,所以把一些用户高频操作的功能给监控起来。

再者要结合当前的技术方向以及业务方向,如技术方向,可以引入一些新技术,或者在原有的逻辑上补充监控点,技术方向有个前提是技术栈统一或相近,不然会加大监控点建立的难度和后期的维护成本,有了前置对业务系统的分析,再实施监控时才少走弯路,降低成本。

03 监控梳理

按照个人的经验总结,我们可以按这样子的一个框架去建立监控体系:

如何做好线上监控?

依据上图,我们具体说一下里面的几个大点

3.1 监控目标

监控的核心目标,就是为了在发现线上问题时第一时间能够了解到情况,同时通过告警信息精准地定位到问题出现在哪里,比较专业的描述就是提升线上问题感知能力,迅速地感知到线上问题,并迅速地定位到问题,用最少的成本将线上问题的影响降到最低,下来的一切措施都是围绕着这个目标去开展。

3.2 监控范围

做监控梳理的第一个步骤是要明确监控的范围,哪些点是要监控起来的,那就要清晰明确业务系统的架构,技术栈以及依赖方等各种方面,并梳理优先级,简单总结为 查缺补漏。

  1. 查找整理当前有哪些监控点,具体的监控范围,从业务覆盖度(功能层面)和系统覆盖度(资源层面,如 cpu 资源等)盘点当前已应用的监控点及其价值。

  2. 检查是否已有监控中是否有由于迭代等因素,已经废弃的监控点,或者是有影响到正常排查问题思路的监控点,已经失去监控的价值的,可以废弃。

  3. 检查是否有核心功能或核心数据等没有监控起来,出现问题的时候往往都是用户反馈才发现,补全监控点。

  4. 检查告警机制是否到位,是否出现确实有监控起来但没有很好的反馈到需要关注的相关人员处,补全告警机制。

3.3 监控类型

我把监控的类型分为两个大类,分别是系统监控和业务监控。

3.3.1 系统监控

首先讲一下系统监控,如下图

如何做好线上监控?

系统监控更多的是关注业务系统所在的环境及其资源的情况,简单理解就是能让系统正常运行起来的先决条件的监控,这里将系统监控分为 资源层 基础架构层 数据层 以及 依赖方

  • 资源层会关注运行环境的硬件等资源,如cpu,内存,磁盘的使用率以及网络流量等,这也是通用的监控点,同时也是会中间网络服务监控起来,比如DNS的访问,保证域名等有效性,是否负载均衡,机器流量分布不均会导致业务流程阻塞,资源也未必很好地利用起来,中间件如一些消息服务是否有出现消息堆积等情况。

  • 基础架构层会关注实现业务系统的技术底层运行情况,以 Java 开发的系统为例,比如 JVM,一般会对其线程进行监控,如线程占用的内存,内存回收机制是否正常,是否有内存泄漏,同时在方法区,方法的调用情况是否正常,堆栈使用是否合理,代码逻辑异常时是否有正常抛出,日志是否清晰等等。

  • 数据层为关注数据库读写情况,比如 proxy 连接数是否在运行范围内,慢查询的数量,数据量的大小以及表的大小会影响读写情况,在一些耗时超时的跟踪上是可以通过监控手段跟踪起来。

  • 依赖方这里更多的是关注调用情况,调用链路是否正常,是否有越权调用的情况,调用耗时等各种方面。

3.3.2 业务监控

不同的业务系统有不的监控方式,这里只例举一些通用的场景,如下图

如何做好线上监控?

业务监控主要关注两个方面,就是系统功能以及数据。

功能监控

先说说 功能监控 ,这个很好理解,就是对用户的操作行为进行打点监控。

比如用户在使用某一功能过于频繁,导致操作被限制,用户由于对功能不理解反馈功能异常,又或者对于获得利益的功能,比如领取代金券领取奖品等,领取是否正常等等。

同时关注到业务接口尤其是几个关联接口的使用场景,比如领奖的几个关联接口中的某一个不通或者异常导致整个链路失败的,这时就可以直接根据告警信息来准确地处理问题了,当然这也可以是交互上解决的问题,这里就不扯远了。

同时对于页面访问的情况,是否出现白屏,load 超时,页面不兼容的情况,可以通过打点监控获取到相关的信息,如果是bug或其他优化问题就可以记录并做日后优化的一个工作项。

定时任务,在业务场景用应用是非常广泛的,如定时更新游戏里面的任务,定时给用户发奖,定时去获取某些信息等等,监控定时任务的执行情况保证业务流程的正常执行。

数据监控

数据监控就是针对业务数据来说的。

有些业务系统每天都会出业务报表,如果报表中的业务数据变化比较大的话,就必须通过告警让相关关注人员去确认业务数据的变化是否合理,现这种场景,一般就是通过环比同比设置预警阀值进行监控,比如环比超过10%,就需要告警到对应人员。

结合业务场景来说,如上面提到的发奖品等,数据层面就要关注发出量和领取量以及库存量,如果有设置了每天发出量的限制的话就要监控是否有超出预值,同时当库存量不足支持发奖活动的需求的,就要即时的告警出来。

除了数据量相关的监控以外,还有就是数据逻辑功能。

比如数据计算,是否和预期值是正常的,尤其是在大数据量的计算的时候,如果一条条找错误数据的话明显非常低效,于是就可以通过监控告警的方式,将不符合既定规则的数据告警出来,就可以精准定位到是哪条数据出现问题,然后再去追溯跟进问题原因

不同的业务系统有不同的监控点,所以这里只能聊一下比较通用的场景, 业务监控是建立在具体的业务逻辑上,依据其具体的逻辑去实现监控点。

3.4 监控关注方

监控关注方直白意思就是看监控的人,做了一堆监控,对于整个团队来说,是所有建立起监控的点都要关注,但每种职能关注的监控点的优先级是不一样的,产品业务侧会更关注用户行为以及相关的业务数据。

毕竟这些告警会影响到产品需求设计上的一些方向,而技术侧会更偏于系统层面的监控,比如一些error日志和硬件资源使用的情况,如果作为基础服务的系统,涉及多关联方调用的,关联方也会关注其所涉及的一些依赖接口,依赖数据等告警。

举个反例场景,线上出现一些资源上的 bug,报了一堆代码信息的告警,然后全往产品经理处发,产品经理看到后最后还是找技术侧去处理,这样的一个信息传递的链路实在是有点长。

所以在做监控实施之前,就必须明确什么监控是给什么人看的,这些信息传递得更准确,问题感知的能力才会有提升。

04 监控实施

监控点都梳理情况之后,就可以设计监控实施的方案,这里会涉及需要用到的 工具 或技术栈,以及对于的一个预警方案和救火方案,可以通过这几个明细项去设计实施方案:

  1. 监控层:比如系统监控中的运行环境资源。

  2. 监控项:比如系统监控中的运行环境资源中的 cpu,内存等。

  3. 监控点:比如网络使用中的网络 io,网络连接数据,丢包率、重传率等。

  4. 监控工具(方案):其实就是应用在这个监控点上具体的工具或者是方法。

  5. 预警策略:当监控工具将对应的监控点都监控起来,我们就能得到相关的数据,依据数据或信息设置一些预警策略,在业务层面上,比如当库存少于XXX量时,就告警,系统层面上比如磁盘使用率超过 90% 时就告警。

  6. 告警载体:如以邮件,钉钉等方式通知到关注方。

  7. 关注方:如前文所说。

举个实际的例子,如下图

如何做好线上监控?

上图通过上述的一部分监控类型举例如果是设计监控方案落地,大家可以参考一下。

在监控工具(方案)上面,上述是通过一些点去选择具体的工具或方案,但尤其是在系统监控方面,一个个点用工具去实施维护肯定是不切实际的,现在行业里面也有很多具体的方案或工具可以全面的对系统方面进行监控,比如新型监控告警工具 Prometheus ,像利用 Prometheus+Grafana 搭建起监控运维平台,就基本上面可以满足系统监控的实施需求。

05 监控价值评价

从盘点到设计到落地,监控是起来了,但作为工程技术人员,实施方案都需要评价最后得到的价值和结果,结合前文做监控的目的,就是为了提升线上问题感知能力,降低排查问题的成本。

基于这点目的出发,我们就可以记录每实施一项监控点是否满足这个目的,比如做数据计算规则的监控,可以精准定位到时哪一条数据出现问题,而不是自己一条条去排查,降低排查成本,告警梳理完善,信息更加精确地推送到关注方。

但也有反例,就是实施了监控之后让告警信息复杂化,过多的无效告警信息,或者是不需要关注方关注的信息告警出来,长期以来会让关注方对告警信息麻木,最后真的有线上问题的时候就忽略了重要信息。

还有就是实现监控之后对业务系统有较大的代码插入,带来系统 bug,这样也是得不偿失,所以综合来说可以通过判断实施监控前和实现监控后的效果来判断监控是否有效,对于无效监控应当机立断地废弃掉。

06 小结

监控方法千万条,有效告警第一条;监控不规范,同学两行泪!

不管是线上监控,还是其他方案,从业务的根本需求出发,整体地思考,细致地落地,希望通过本文能为大家在进行线上监控实施时起到一些帮助,有任何意见可以在评论区回复! (end)

- 推荐学习 -

关于质量保障 QA 体系建设中的在线监控, TesterHome 社区大咖,微医集团技术保障部负责人蒋刚毅(cay)老师 分享过 DevOps 背景下的《多维一体化监控平台构建实践》干货 技术文章

更多细节,欢迎来 MTSC2019 大会 现场交流探讨,蒋刚毅老师将全面解析《微医多维一体化监控平台实践》背后的 要点和踏坑填坑经验 ,帮助大家提升质量监控和 DevOps 实践水平。

MTSC2019 预告|8 折倒计时

MTSC2019 第五届中国移动互联网测试开发大会将于 2019 年 6 月 28-29 日在北京国际会议中心举行,50+ 来自 Google、BAT、TMD 等一线互联网企业的测试大咖分享精彩议题,涵盖 移动自动化测试、服务端测试、质量保障 QA、高新测试技术(AI+、大数据测试、IOT 测试),游戏测试,工程效率提升 等专题。( 目前确认  40+  议题,  8  折门票限时优惠中!)

如何做好线上监控?

大会官网 http://2019.test-china.org/

报名地址 :https://www.bagevent.com/event/2202999?bag_track=YT

TesterHome 福利时间

转发文章到朋友圈,抽奖赠送 TesterHome 定制版精美礼物(卫衣/图书等)、MTSC2019 测试开发大会门票或优惠折扣,以及其他福利等! 如何做好线上监控?

  • Step1: 转发本文到朋友圈,扫描二维码加小助手微信;

  • Step2 : 回复「 福利 」入群抽奖;

  • SteP3 : 回复「 组团 」入群,以 团购优惠价 购买 MTSC2019 门票;

如何做好线上监控?

P.S. 对于  MTSC  往届参会者 ,可享受 7.5 折福利 ,请联系票务负责人,也可进群咨询;

扫描二维码,或点击“ 阅读原文 ,抢购 8 折 门票!


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网站项目管理

网站项目管理

[美] 阿什利·弗里德莱因 / 李保庆、杨磊、王增东 / 电子工业出版社 / 2002-11 / 32.00元

这本书全方位地介绍了如何建立和最终交付一个具有很高商业价值的成功网站,讲解从项目管理的角度入手,撇开烦琐的技术细节,更加关注Web项目实施中诸如成本、进度、工作范围等问题,涉及了一个商业网站在实施过程中可能遇到的所有管理细节。书内附国际一流网站开发专家的深邃见解;涵盖了网络项目管理的关键原则及案例研究;通过友情链接,还为读者提供了模板、论坛、术语表、相关链接以及有关因特网知识的测验题。一起来看看 《网站项目管理》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具