概述
与单体应用相比,在微服务架构下,一次用户调用会因为微服务拆分后,变成多个不同服务之间的相互调用,这也就需要对拆分后的每个服务都监控起来。
在讲述如何监控微服务调用前,首先要搞清楚三个问题:监控的对象是什么?具体监控哪些指标?从哪些维度进行监控?
监控对象
既然要监控,那么要监控哪些对象呢?对于微服务系统来说,监控对象可以分为四个层次,由上到下可归纳为:
- 用户监控:通常是指业务直接对用户提供的功能的监控;
- 接口监控:通常是指业务提供的功能所依赖的具体RPC接口的监控;
- 资源监控:通常是指某个接口依赖的资源的监控;
- 基础监控:通常是指对服务器本身的健康状况的监控。主要包括CPU利用率、内存使用量、I/O读写量、网卡带宽等。
监控指标
在弄清楚监控对象后,我们需要知道监控哪些指标?通常有如下业务指标需要重点监控:
- 请求量:请求量监控分为两个维度,一个是实时请求量,一个是统计请求量。实时请求量用QPS(Queries Per Second)即每秒查询次数来衡量,它反映了服务调用的实时变化情况。统计请求量一般用PV(Page View)即一段时间内用户的访问量来衡量,比如一天的PV代表了服务一天的请求量,通常用来统计报表;
- 响应时间:
- 错误率:错误率的监控通常用一段时间内调用失败的次数占调用总次数的比例来衡量,比如对于接口的错误率一般用接口返回错误码503的比率来表示。
监控维度
一般来说,要从多个维度来对业务进行监控,具体来讲可以包括下面几个维度:
- 全局维度:从整体角度监控对象的请求量、平均耗时以及错误率,全局维度的监控一般是为了让你对监控对象的调用情况有个整体了解;
- 分机房维度:一般为了业务的高可用性,服务通常部署在不止一个机房,因为不同机房地域的不同,同一个监控对象的各种指标可能会相差很大,所以需要深入到机房内部去了解;
- 单机维度:即便实在同一个机房内部,可能由于采购年份和批次的不同,位于不同机器上的同一个监控对象的各种指标也会有很大差异。一般来说,新采购的机器通常由于成本更高,配置也更高,在同等请求量的情况下,可能表现出较大的性能差异,因此需要从单机维度去监控同一个对象;
- 时间维度:同一个监控对象,在每天的同一时刻各种指标通常也不会一样,这种差异要么由业务变更导致,要么是运营活动导致。为了了解监控对象各种指标的变化,通常需要与一天前、一周前、一个月前,甚至三个月前做比较;
- 核心维度:业务上一般会依据重要性程度对监控对象进行分级,最简单的是分成核心业务和非核心业务。核心业务和非核心业务在部署上必须隔离,分开监控,这样才能对核心业务做重点保障。