微服务调用链的排查,请求日志排查超时时间,锁定超时的原因
A微服务 >> B微服务 >> C微服务 论日志的请求开始时间和结束时间的重要性。
完整的日志格式:另外接口的入参,出参也需要加上,日志需要根据参数的关键字来搜索,比如会员号,ID等唯一标识。
A服务
logger.info("调用B服务httpParams=" + GsonUtils.toJson(httpParams));
调用B服务
logger.info("调用B服务httpResult=" + GsonUtils.toJson(httpResult));
B服务
logger.info("调用C服务httpParams=" + GsonUtils.toJson(httpParams));
调用C服务
logger.info("调用C服务httpResult=" + GsonUtils.toJson(httpResult));
C服务
logger.info("调用外部接口httpParams=" + GsonUtils.toJson(httpParams));
调用外部第三方接口
logger.info("调用外部接口httpResult=" + GsonUtils.toJson(httpResult));
如果调用链微服务没有httpParams这一条日志(日志没有成对出现),否则日志只能是倒排查询,倒序来推测请求是什么时间开始的。
linux排查日志截取:
sed -n '/2023-12-07 12:56:14.442/,/2023-12-07 12:56:43.710/p' test-2023-12-07-44.log >> test-231207.log
1.调用外部接口的日志输出格式:请求的入参,出参,请求消耗时间。
开始时间:1701924983639
结束时间:1701924994491
消耗时间:20033
请求返回:null
参考code(排查接口的请求响应时间):
long startTime = System.currentTimeMillis(); log.info("开始时间:" + startTime); long endTime = System.currentTimeMillis(); log.info("结束时间:" + endTime); log.info("消耗时间:" + (endTime - startTime));
重点:需要排查接口里面的是否调用了延时等方法,否则需要采用异步的方式来调用。 @Async,不影响主流程的进行和占用主流程的接口耗时。
2.调用外部服务的请求日志表,请求参数入库,返回结果入库,方便排查时候查询请求log。锁定时间
GsonUtils.java private static final Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create(); public static String toJson(Object obj) { if (obj == null) { return ""; } return gson.toJson(obj); }
标签:info,调用,服务,toJson,排查,日志,超时 From: https://www.cnblogs.com/oktokeep/p/17917844.html