服务端 APM
假设有这样一个函数,我们需要进行监控
public void saveUser() {
doDbOperation();
flushCache();
}
我们需要对它的字节码进行改写,自动注入一些代码达到监控的功能,一个最简单的模型如下面的代码所示
public void _saveUser() {
// 获取开始时间
long start = System.currentTimeMillis();
// 记录未捕获异常
Throwable uncaughtException = null;
try {
doDbOperation();
flushCache();
} catch (Throwable e) {
uncaughtException = e;
throw e;
} finally {
// 记录结束时间
long end = System.currentTimeMillis();
// 上报 spanName、开始时间、结束时间、是否有未捕获的异常
APMUtil.report("UserService.saveUser", start, end, uncaughtException);
}
}