大型网站性能监控体系

大型网站性能监控体系

为什么要做监控

昨天下午,公司发生一起大批量创建订单异常事故,影响单量1600单左右,时长约8分钟,如果按照客单量500RMB计算,显然这是一笔不小的数目,是一起S1级的事故了。

大型网站的用户访问量在数量级上比小型网站大得多,一旦发生问题,对于业务的影响将非常大。

像淘宝、天猫这样的交易型网站,数分钟的不可用可能造成数亿甚至数十亿的损失。

大型网站的运行需要一个完善的监控体系,监控的根本目的是发现问题并定位问题,是性能优化的基础。

监控设计

从问题排查思路看监控设计

问题发现

通过监控能够直接判断出是否出了问题,是否对业务有影响,从这个角度来看,首先要考虑部署业务监控的能力,对业务的关键指标进行监控,同时根据业务周期性规律进行环比、同比的报警规则设置,出现对业务有直接影响的问题要立即报警。

定位问题

首先排查应用是否产生了大量异常,当业务有损伤时,会看是否是应用本身出现问题了。

其次看关键链路的调用次数是否变少了,

  • 可能原因之一,外部流量减少。

    • 正常业务的影响:活动或者节假日影响。
    • 网络链路加入异常:如外部接入核心交换,通常多个运行商接入,某些运营商出现网络问题,这个问题一旦出现会导致整体流量下滑。
  • 可能原因之二:链路耗时变长,导致一定时间内处理的请求数变少了。

    • 交换机流量不均,某些机器的流量被打满,TCP重试,导致耗时边长。
    • 服务器流量不均
    • 应用集群个体异常,某些服务器存在问题。
    • 集群系统指标个体异常,集群中个别服务器存在问题,可能配置不同
    • 依赖方个体异常,某些依赖存在问题,导致访问异常

监控的设计步骤

关键监控项梳理

关键监控项报警

  • 临界点报警
  • 业务预警做重点关注报警,可以通过短信方式预警

监控布点开发和设计

监控需要各种数据的支持。布点要和关键指标关联。

  • 捕获关键异常,对关键异常进行日志记录,分级。
  • 对直接依赖的运行耗时进行日志记录。
  • 对反应业务指标的运行情况进行日志记录。
  • 正确处理错误码。

监控展现设计

趋势化的监控比列表型展现更一目了然。

确定合适的监控粒度,长段间距相结合。

从粗到细,从汇总到细分的监控。

监控体系设计的目标和原则

准确性

  • 监控系统应该一直持续可用。
  • 监控系统应该保持数据的准确性

完整性

在诊断过程中,需要把几乎所有需要的监控项监控完整

实时性

问题发生时要及时发现,避免因为监控的架构设计问题造成发现问题延迟。

细分性

细分化对于排查系统的瓶颈、追踪系统问题是非常关键的。

聚合化

大型网站往往有数千台服务器,一个大型的应用集群可能需要上千台机器,查看这些机器的汇总表现非常重要。

图标化

将数字化的东西用图形的方式展示,人们通过图标很容易看到发生问题。

可追溯

有些问题准瞬即逝,模拟和重现非常困难,因此监控结果需要保留一段时间。

性能监控的关键指标

应用监控

QPS

QPS(Query per Second)表示每秒处理完成的请求数,是衡量系统吞吐量大小或者系统处理能力的指标,服务器的QPS越高,提供服务需要的机器就越少。每个系统都有自己的峰值QPS,表示系统最大的吞吐量。

在做容量规划的时,峰值QPS作为容量规划的一个主要因子,来计算需要多少台机器。可以根据一定的数学计算得出业务访问需要多少QPS,再除以Peak QPS,就可以得出需要的机器数量。

注:QPS和TPS是有区别的,TPS是每秒处理完成事务的过程数,一个请求可能包含多个事务处理过程。对于web请求而言,一个单独的请求算作一个query,所以通常QPS是衡量服务器性能的主要指标。

RT

RT(Response Time)表示响应时间,它是从接收请求开始到服务器处理完成的时间差值。

减少RT的方法,要么合并请求,将多次调用合并成一次调用,要么减少调用。减少远程接口调用,可以通过缓存架构升级或者去除多于调用来实现。

并发数

并发数是衡量系统压力的指标,并发数越大,系统压力越大。

一般并发数是针对某个具体的链路而言的,并发数是同时在处理或者需要处理的任务数或者线程数。

以上三个指标是最终系统运行中性能的表现,是各种资源综合作用的结果,与应用本身程序编写的问题、应用本身的特点和应用本身的架构都密切相关。

异常监控

通常服务器端出现峰值时会出现一些异常,这些异常主要是程序本身的异常,最常见的异常包括RPC连接池异常、数据库连接池异常、超时异常、JVM异常。

通常在单机或者集群进行压力测试时,异常作为停止的指标。

URL 监控

URL是WEB应用通常需要监控的,包含以下关键指标:

  • 调用量
  • 耗时
  • 错误数
  • 相关依赖明细
  • 状态码
  • 并发数

关键方法监控

服务或者中间件,需要监控以下指标:

  • 耗时
  • 依赖明细
  • 异常
  • 并发数

JVM监控

  • 分区监控
  • 垃圾回收次数
  • 垃圾回收时间

系统监控

CPU资源监控

CPU是是操作系统的调度中枢,是影响服务器端吞吐量的最重要因素。

服务器峰值的处理能力取决于CPU的利用率和CPU的处理时间。所以监控CPU的使用情况,能够获知系统瓶颈的变化,以及在发现问题时,是否可以通过水平扩展机器数来解决问题。

网络监控

网络监控通常指的是服务器网路监控,用于定位服务器网络瓶颈,通常看TCP的重传率,内部网络重传率超过1%,往往会造成访问延迟增加。

网络监控包含以下关键指标:

  • TCPretr
  • 网络I/O
  • TCP连接数

内存监控

系统的内存不足引发磁盘交换,很可能使内存成为“木桶短板”。

内存监控包含以下关键指标:

  • 内存的使用量:物理内存的使用量
  • swap I/O:交换到磁盘的量,常常是因为内存不够才发生的

磁盘监控

磁盘I/O性能监控指标如下

  • 磁盘利用率(Utilization)
  • 服务时间(Service Time)
  • I/O 等待队列长度(Queue Length)
  • 等待时间(Wait Time)

参考:《大型网站性能优化实战》