几乎所有的系统(我们通常都是APM:应用系统监控)都可以通过是三个方面来构建三维一体立体化监控体系。

总体架构

立体化监控分三个维度,三种相互辅助的完整监控体系。

  • Metrics: 可以用于服务告警
  • Logging: 用于调试发现问题
  • Tracing: 用于调试发现问题

不同的指标表示不同维度的监控,构成一个完成的监控体系。

监控分类

Metrics

metrics就是指标监控,通过定义的指标来表示资源的使用情况或者状态等。针对这一类监控,我们通常使用时序数据库来做图表面展示,我们常用的监控系统有prometheus生态,zabbix等,目前来说时序更加符合监控的需求,无论重数据的存储到数据的使用上都是时序数据库有优势。

Logging

log就是日志监控,采集日志,进行处理,存储,展示,重日志中获取到运行的信息,我们通常用的日志系统有EFK生态

Tracing

trace就是调用链监控,即一次完整的事务调用请求。比方说一个用户的下单请求,经过层层服务预处理,到支付服务成功,数据落库,成功返回,这就是一条完整的 Trace 。Trace 最大的特点就是它含有上下文环境,通常来说会由一个唯一的 ID 来进行标识。一个 Trace 内可能有多个不同的事务 (Transaction) 以及标志事件 (Event) 组成。我们通常使用的是[Skywalking](),CNCF推荐的是[jaeger]()。

对比结合

三种对比

  • metrics监控前期的搭建难度适中,后期维护比较简单,在出现问题的时候,灵敏度比较高,比较容易发现问题,发出告警,但是在排查问题的只有表面的数据,不能找到具体的根因。
  • log监控前期的搭建难度比较低,现在搭建一套ELK已经很成熟了,后期维护比较高,因为日志的数据量都是巨大的,在出现问题的时候,灵敏度比较适中,不是太容易发现问题,发出告警,主要在排查问题的进行查看。
  • trace监控前期的搭建难度很高,后期维护也比较适中,在出现问题的时候,灵敏度很低,不容易发现问题,发出告警,但是在排查问题的时候能找到具体的根因,主要是用于排查问题。

结合

一般系统出问题的时候,都是metrics先发现问题,发出告警,然后我们去查看日志查看问题,查看trace来定位到具体的原因。

监控分层

在不同的层面都可以使用上面三种监控类型进行监控,结合起来完成每一层完整的监控体系。

从底到上分为:基础设施监控、系统层监控、应用层监控、业务层监控、端用户体验监控

  • 端侧监控主要是用调用链监控,来监控一些调用延迟,错误等,比如听云。
  • 业务层监控主要是用metrics监控,日志监控,来监控注册登陆转化订单数据,这些业务的错误情况下还需要通过日志来进行排查。
  • 应用层其实也就是我们的服务层了,需要通过三位一体化的监控,形成完整的监控体系,来监控一些调用延迟错误。
  • 系统层就是底层基础设施的监控,一些系统的指标日志。