因为要监控的目标五花八门,怎样才能让监控数据更加完备,怎样才能知道哪些指标更加重要,解决这些问题都需要监控方法论的指导。目前业界比较流行的方法论有 Google 的四个黄金指标、RED 方法、USE 方法。

1、Google 的四个黄金指标

Google 的四个黄金指标着眼点在服务监控,这四个指标分别是延迟、流量、错误和饱和度。

  • 延迟:服务请求所花费的时间,比如用户获取商品列表页面调用的某个接口,花费 30 毫秒。这个指标需要区分成功请求和失败请求,因为失败的请求可能会立刻返回,延迟很小,会扰乱正常的请求延迟数据。
  • 流量:HTTP 服务的话就是每秒 HTTP 请求数,RPC 服务的话就是每秒 RPCCall 的数量,如果是数据库,可能用数据库系统的事务量来作为流量指标。
  • 错误:请求失败的速率,即每秒有多少请求失败,比如 HTTP 请求返回了 500 错误码,说明这个请求是失败的,或者虽然返回的状态码是 200,但是返回的内容不符合预期,也认为是请求失败。
  • 饱和度:描述应用程序有多“满”,或者描述受限的资源,比如 CPU 密集型应用,CPU 使用率就可以作为饱和度指标。

Google 的四个黄金指标主要是针对服务的监控,Weaveworks 的工程师认为饱和度这个指标比较高级,延迟、流量、错误这三个指标相对更重要。

2、RED 方法

  • (Request)Rate:请求速率,每秒请求数。
  • (Request)Errors:错误,每秒错误请求数。
  • (Request)Duration:延迟,每个请求的延迟分布情况。

3、USE 方法

USE 是使用率(Utilization)、饱和度(Saturation)、错误(Error)的缩写,主要用于分析资源问题。什么是资源?在 Gregg 对模型的定义中,是指传统意义上的物理服务器组件,比如 CPU、硬盘等,但现在很多人已经扩展了资源的范围,把一些软件资源也包含在内。

  • 使用率:这个我们最熟悉,比如内存使用率、CPU 使用率等,是一个百分比。
  • 饱和度:资源排队工作的指标,无法再处理额外的工作。通常用队列长度表示,比如在 iostat 里看到的 aqu-sz 就是队列长度。
  • 错误:资源错误事件的计数。比如 malloc() 失败次数、通过 ifconfig 看到的 errors、dropped 包量。有很多错误是以系统错误日志的方式暴露的,没法直接拿到某个统计指标,此时可以进行日志关键字监控。

USE 方法和 Google 四个黄金指标配合使用,我们就可以知道不同类别的监控对象应该关注的核心指标是什么了。