APM的组成
APM包括3个部分
- agent,用于上报数据
- monitor,用于收集数据
- dashboard,用于展示数据
APM形态
- 服务器性能指标监控
- 服务监控
- 错误,异常监控
- 日志收集
- 依赖监控
- 分布式事务/链路追踪
- 代码级监控分析 Profiling
1 服务器性能指标监控
- 对服务依赖的硬件性能进行监控,例如
- CPU
- 内存
- 硬盘的容量
- 监控服务器性能指标的值
2 服务监控
- 对提供的服务进行监控
- 检测服务的情况,如
- 请求数
- 响应数
- 成功率
- 检测服务的热点,异常波动
- 检测服务的来源,调用方分布
服务监控是比较宽泛的监控,用户获取服务的大致情况,
也可用于服务提供者根据服务的流量来配置机器,可以看到大致范围的异常波动点
3 错误,异常监控
- 对报错,或异常进行监控
- 错误需要主动上报
- 需要提供大量上下文的信息才有意义,例如
- 当时的请求URL
- 错误堆栈
- 用户信息等
4 日志收集
日志是对服务器的所有情况进行记录,不管是业务本身,还是访问记录,都需要尽可能详细的日志;
一般的APM都有日志收集和分析能力;
日志都会占用大量的硬盘空间,需要定时清除;
删除以后就很难查询到问题了,这是需要权衡的点。
日志要记录有价值的信息,例如
- 时间
- 关键指标
- traceId
5 依赖监控
6 分布式链路追踪
真实场景
一个服务从发起到完成,需要经历很多的节点
传统的APM功能
7 代码级监控分析 Profiling
利用自动化的代码插桩技术,获取 nodejs进程内方法的调用链路;
查看调用栈上的总执行时间和每个方法占的比例;
结合 V8 Profiling,查看可能出现的内存泄漏