1、什么是 APM

APM 是一种主动监控应用程序环境的许多方面的做法,以便在问题成为主要问题之前识别和缓解,实际上是一个很大的课题而不仅只是包括监控日志之类的事件。主要的内容包括服务、基础设施、网络、主机和容器、第三方 API、用户交互等,在实际中带来很多的好处:

  1. 打破应用孤岛提供集中上下文和可见性;

  2. 满足并超越客户的期望;

  3. 保护公司业务的底线;

  4. IT 一致性的保障,节省调试和排队故障的耗时。

1.1 应该具有的能力

一款好的 APM 工具应该具有以下的能力来为应用提供更好的服务:

  • 实时通知:出现任何问题是提供警报,不然错误就只能停留在系统中,而不能得到实际的解决。

  • 系统总览:清晰且易于使用的仪表盘,免于忽略任何的关键问题。

  • 数据历史:帮助挖掘过去的数据以找到根本的原因,在做根因分析的时候历史数据是必不可少的,因为我们的错误分析往往都是延后的(包括问题的复盘分析等等延后),第一时间是解决错误,需要保障线上的应用正常的提供用户的访问能力。

  • 网站建议优化:能够理解用户体验,并未推动更多流量和转换提供洞察力(对接口的业务流量分析,就能得出具体的用户倾向)。

  • 程序性能监控:代码跟踪(上游服务出现循环调用下级服务的时候就会出现请求倍增的攻击现象导致下游服务的压力等等)和基础设施监控(包括 JVM 之类的底层性能),以全面了解网站性能。

  • 错误监控:真多错误提供警报和定位功能。

  • 日志监控:错误或合规性原因需要的日志记录(请求产生的日志不属于 APM 的管控范围了)。

2、典型的 APM 工具

目前的 CNCF 中的链路追踪项目还不是很多,可能面对于国内的微服务的话更多的使用 Skywalking 作为工具吧。

项目使用都是比较简单的,可以全部拉下来跑一遍就知道各自的服务特点了。

3、Skywalking 应用

上图是 Skywalking 应用的结构图,最重要的部分就是一个数据采集和 OAP 模块,前者由 Agent 来提供,后者就是一个分析平台,包括前端的展示拓扑之类的图形数据,最后就是一个数据的保存了,我们的数据大部分情况都会放入到 ES 中,方便进行结构化的查询索引(所以在部署 Skywalking 的前面需要我们部署好 ES 的应用)。