fangpsh's blog

监控角度

监控哪些指标,一般是研发拍脑袋决定,要么是指标太多抓不住重点,给监控系统和运维人员带来很大压力。 要么是遗漏关键指标,不能提前感知异常,或在故障出现时提供线索。

面试时偶尔会问的一道题,候选人对某服务进行监控的话要考虑哪些指标。希望听到的回答,不仅全面,而且有体系,但是答案通常都杂乱无章、想一个是一个。

分享下个人的总结。

对象

  • 系统监控
  • Linux 系统状态,包括软件、硬件,例如CPU、内存、Raid卡、温度等
  • 进程监控
  • 进程状态,例如进程状态,进程Crash事件、JVM FULL GC次数和耗时,JVM 各类堆栈大小等。
  • 这里的进程,不一定绝对是进程,而是进程脱离具体业务的指标,例如nginx 丢弃连接数,框架例如tomcat会暴露出与业务无关的指标。
  • 业务监控
  • 和具体业务相关
  • 例如 各类http 请求占比、耗时

系统监控,一般系统运维会做好。不过在云上,这块细节变少,至少没有那么多硬件要监控。 业务监控的角度一般不会漏,但是进程监控角度常常被忽略,或者也是因为两者界限不是很强。 是“进程”还是“业务”,具体情况具体分析,例如一个基础服务,那么它的一些基础指标就是业务,例如Redis集群。

黄金指标

  • 延迟(请求处理时间、响应时间)
    • 服务器处理某个请求所需要的时间
    • 剔除非正常请求(限流、错误请求)以免误导,既然要剔除,那就也需要监控
    • 例如 http 请求时间99值
  • 流量(请求qps、带宽速率、io速率、iops)
  • 针对系统负载锁所进行度量的指标
  • 错误
  • 单位时间内的失败量。
  • 不仅包含协议层面的,例如http 500,也包含业务层面的,例如登录失败。
  • 饱和度
  • 针对系统内~~最为~~受限资源的度量指标
  • 可以是系统层面的,例如磁盘容量、带宽容量,也可以是业务层面的,例如并发拉流数,并发在线人数。
  • 书里面针对饱和度有“最为”2个字,但是我认为“最为”是比较难以衡量的,对于一个负载的系统来说,受限的资源方方面面,不同场景下触发的上限可能不同。这里的指标,我认为其实只是一种角度,我们要做的只是需要针对饱和度进行设置监控指标。

延迟这个指标非常有用,除了发现异常,还可用于预报异常(饱含度),,当延迟变高,往往以为接近性能拐点,饱含度异常。 延迟指标还可用于性能监控,例如更新版本之后,延迟(http 响应时间99值)的变化。 所以,不要忘记针对延迟设计监控。

参考:《Google SRE 第六章》#The Four Golden Signals

示例

某Nginx 静态文件服务,按以上角度,设置的部分指标。

对象

  • 系统监控
  • CPU 利用率、磁盘占有率、带宽、全连接队列、半连接队列等
  • 进程监控
  • Nginx status模块暴露的指标:丢弃连接数、并发连接数
Active connections: 291
server accepts handled requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106    
  • nginx error.log
  • 业务监控
  • 访问日志分析,状态码、响应时间等

黄金指标

  • 延迟
  • 2xx 请求响应时间99值
  • 流量
  • 当前活跃连接数,http 请求qps
  • 当前机器带宽
  • 错误
  • 5xx 请求qps,该服务下一般不会出现
  • 404 请求qps,可能意味着文件同步失败
  • nginx 拒绝连接数
  • 周期检测error.log 新日志
  • 饱和度
  • 磁盘容量,静态文件较多
  • 当前活跃连接数,距离nginx 设置的最大连接数