谈谈业务系统的监控报警

几年前,我半途接手负责了一个开发团队,当时这个团队作的业务系统属于金融行业。系统的开发、测试都快结束了,这个系统的功能仍是挺复杂的,子系统3、四个,定时任务也很多,依赖的第三方系统也好几个。数据库

和这个团队熟悉以后,我和你们说,咱们须要对这个系统作监控报警(监控报警的名字叫法不少),监控报警是业务系统的金钟罩,对业务系统很是重要。当时有些人对监控报警没有概念,更感受不到重要性,估计可能还有一些人认为我是新官上任三把火,一时说说而已。大部分人仍是认为,产品的需求我都实现了,并且也有测试人员把关,开发何须给本身找额外的活儿。服务器

的确,在咱们作一个软件系统的时候,常常会遇到上面相似的现象:从接到需求开始,开发人员广泛会认为设计的功能都作完了,各类测试也经过了,最后也部署上线了,就算交差了,就万事大吉了。包括我本身,在我参加工做的头几年也是这么认为,并且是以为这是理所固然的。其实呢,这种认识是很片面的,上线以后仍然要对系统负责任。为何这么说呢?微信

由于,不存在不出问题、没有Bug 的系统。系统上线以后,就免不了出现故障,出故障是或早或晚的事,是或多或少的事。测试

咱们能作的是,出现故障以后,第一时间知道,赶忙处理,防止影响扩大。再理想点,若是故障出现以前,刚有苗头的时候,咱们就能发现,提早解决就更好了。业务系统的监控报警,就是干这个用的。优化

继续说接手的那个金融业务系统,系统上线以后,果真各类问题没少出,开发人员忙的焦头烂额,很是被动。我一边给你们继续灌输监控报警的重要性,一边开始搭建监控报警。一点点的把你们从被动变主动,问题愈来愈少。给大家说几个印象深入的经历、体会。设计

1. 最多见的就是用户碰到Bug接口

不管你测试的多么充分,都不敢保证系统没有Bug,只是 Bug 还没出现。虽然 Bug 避免不了,可是做为开发人员,须要从运营或者客服人员那里知道出现 Bug,这就有问题了。用户碰到 Bug,用户找客服,客服再找开发,你想一想这个过程有多慢,效率有多低。若是用户都懒得找客服反映,开发也不知道,那这个 Bug 会影响多少用户?内存

后来经过代码埋点、响应码、异常处理等等,基本作到了:开发人员能第一时间知道Bug。知道以后快速解决,该上线就上线。路由

2. 有些问题能够在出现以前就发现开发

当时出过这么一个问题,咱们一个功能须要调用一个第三方的接口,当时第三方说 一、2 秒以内能返回结果,联调的时候也确实是很快能返回结果,因而咱们把超时时间设置成了5 秒,也就是说超过 5 秒尚未返回,就认为调用第三方接口失败。这已经在 2 秒的基础上,又多留了 3 秒余地。上线之初一直没有问题,可是过了几个月以后,常常出现调用第三方接口失败的问题。通过查缘由,发现都是由于接口超时引发的,原来是第三方的响应比之前变慢了不少,常常会超过 5 秒。

知道缘由以后就很好解决了。解决问题以后,咱们查历史,发现响应时间也不是忽然变慢的,从 1 秒、2 秒、3 秒……慢慢涨上去的。若是当初,咱们对响应时间进行监控,在接近 5 秒的时候就主动预警,主动联系第三方进行调整,那么这个问题就不会出现了。

3. 要依赖第三方,可是不要过度信赖第三方

除了上面那段提到的以外,咱们这个业务系统依赖的第三方系统还好几个。第三方系统也是人作的,也会出问题,它们出问题,咱们也跟着受影响,影响到咱们的用户,用户就认为是咱们系统的问题,解释也没啥用。

怎么让第三方对咱们的影响最小呢?一是,同一个服务,尽可能多接几家第三方,而后咱们本身作个路由。就算是其中一家掉链子了,咱们能快速切换到另一家。另外,咱们本身主动检测第三方的服务,在用户使用高峰到来以前,本身主动发起几笔业务,测测第三方的服务是否正常。对咱们系统来讲,越是重要的第三方服务(例如支付),越应该作好预防工做。

4. 咱们开发的系统,用户用着卡不卡

系统出现Bug、故障,还有一个因素也容易让用户崩溃:“系统太卡”,例如点一个按钮半天没反应,刷新一个页面须要很长时间。形成系统卡的缘由有不少,有的能够经过提升服务器配置解决,有的能够经过优化数据库和SQL 解决,有的能够经过优化代码来解决。只要能发现系统慢,能大概定位到缘由,基本就有办法进行优化。

咱们系统上线后没多久就把这块归入了监控范围。先是搞清楚了系统高峰时段,再就是,从用户角度出发,记录每一个功能服务的响应时间,发现慢的及时优化。注意,必定是按照用户角度去观测,不要只看单个服务的响应时间,或者单条SQL 的执行时间,由于有的功能包含了多个服务,或者多个 SQL 执行。单独看服务或者SQL 都不慢,可是合在一块儿,总时间可能就很长。

5. 报警的方式灵活多样

监控到问题以后,怎么报警给开发人员呢?咱们作监控报警的时候,不少人说作个系统,能够在系统上看,解决以后作好记录。我说咱们的目的是要让开发人员及时看到,若是没登陆系统不就看不到了吗。作事情必定要牢记作事的目的,不要只关注作事的方式。邮件、短信、微信、QQ 均可以通知开发人员出问题了,并且短信、微信、QQ 的实时性比作的系统更好。

后来咱们的作法是,重要的问题使用短信、微信进行通知,不过重要的问题用邮件通知。为了防止有人看不到,通常同时多通知几我的,能够互相提醒。到最后,咱们也没有作个系统,就靠着邮件、短信、微信这些,运转的也还能够。

除了上面说的,监控报警还包括不少内容,好比监控服务器的存储、内存、CPU这些最最最基础,最最最重要的,这些通常都有专业的人来作这块(我不专业就没多写);还好比监控定时任务有没有执行;还好比有没有人故意搞系统的下发短信,等等。监控报警的叫法、实现方式也有不少种,不用太纠结,“黑猫白猫,抓到老鼠就是好猫”。

工做年头越长,我越感受到监控报警的重要(也多是越老越怂),由于业务系统出现故障的代价太大了。若是这个系统是给互联网用户用的,那么出现Bug,哪怕是用户感受很卡,均可能形成用户流失。这年头获取一个用户愈来愈贵,就这么垂手可得的把客户送走,实在是太惋惜了。固然不是说,不是面向互联网用户的系统,就能够出问题,无论是给谁用的系统出了问题,作为开发人员你的脸上都不光彩吧。

业务系统的监控报警不出彩,是幕后英雄。监控报警不只仅是个系统,更重要的是,能体现咱们作事的态度和责任心。

以上的内容但愿大家看了以后可以承认。

相关文章
相关标签/搜索