第七章 实战二:APM数据采集之探针埋点
随着微服务的发展,企业业务复杂度的不断增加,一次请求可能调用多个微服务才能完成,依赖的中间件也越来越多,其中任何一个节点出现异常都导致请求异常,这导致问题诊断难度不断加大,于是就有了分布式调用链追踪这种新的监控模式的出现。
支持分布式调用链追踪的APM系统如Pinpoint、Skywalking,皆使用Java Agent和字节码插桩埋点完成无业务代码侵入的数据收集工作。在方法执行前后插入埋点,收集方法执行的日记信息,最后将收集的日记信息依据一定的条件串成一条调用链路,如根据一个请求事务ID和方法的执行时间节点。
如何将一个请求的日记串成一条调用链路?一种简单的方式:同一个进程中,可为每个请求生成一个事务ID,将事务ID保存到ThreadLocal,在埋点处通过ThreadLocal获取事务ID,为日记加上事务ID;不同进程之间,可通过在HTTP请求或RPC请求上添加附加参数将事务ID往下传递。