APM的组成

APM包括3个部分

  1. agent,用于上报数据
  2. monitor,用于收集数据
  3. dashboard,用于展示数据

image.png

APM形态

  1. 服务器性能指标监控
  2. 服务监控
  3. 错误,异常监控
  4. 日志收集
  5. 依赖监控
  6. 分布式事务/链路追踪
  7. 代码级监控分析 Profiling

1 服务器性能指标监控

  1. 对服务依赖的硬件性能进行监控,例如
    1. CPU
    2. 内存
    3. 硬盘的容量
  2. 监控服务器性能指标的值

2 服务监控

  1. 对提供的服务进行监控
  2. 检测服务的情况,如
    1. 请求数
    2. 响应数
    3. 成功率
  3. 检测服务的热点,异常波动
  4. 检测服务的来源,调用方分布

服务监控是比较宽泛的监控,用户获取服务的大致情况,
也可用于服务提供者根据服务的流量来配置机器,可以看到大致范围的异常波动点

3 错误,异常监控

  1. 对报错,或异常进行监控
  2. 错误需要主动上报
  3. 需要提供大量上下文的信息才有意义,例如
    1. 当时的请求URL
    2. 错误堆栈
    3. 用户信息等

4 日志收集

日志是对服务器的所有情况进行记录,不管是业务本身,还是访问记录,都需要尽可能详细的日志;
一般的APM都有日志收集和分析能力;
日志都会占用大量的硬盘空间,需要定时清除;
删除以后就很难查询到问题了,这是需要权衡的点。
日志要记录有价值的信息,例如

  • 时间
  • 关键指标
  • traceId

5 依赖监控

6 分布式链路追踪

真实场景
一个服务从发起到完成,需要经历很多的节点
传统的APM功能

7 代码级监控分析 Profiling

利用自动化的代码插桩技术,获取 nodejs进程内方法的调用链路;
查看调用栈上的总执行时间和每个方法占的比例;
结合 V8 Profiling,查看可能出现的内存泄漏