共计 2082 个字符,预计需要花费 6 分钟才能阅读完成。
前言
之前我有写过一篇记录生产环境事变的文章,取得了不少好评。
后续,咱们团队有做过一些探讨,为了撑持经营保护,搭建了更好的日志平台 Granfa+Loki,也引入了 SkyWalking 做链路追踪。
但过程中也遇到了一些问题,我会在上面讲述进去,而后将这个简略的小技巧分享进去,心愿对大家有所帮忙。
如果临时没工夫看,能够先珍藏起来,等闲下来缓缓看,当前如果遇到相似的状况说不定能间接翻出来照搬。
<br/>
艰难
后面说了,咱们团队有搭建日志平台和链路追踪,但实际上也带来一些艰难,大体如下:
1)、对于中小企业来说,这样的平台搭建起来对资源有肯定要求 (
要钱
),我的项目保护期也常常会呈现资源缓和的状况,减少了保护老本,因为老本不是管制在你手上,是老板手上;2)、对于团队成员来说,要有肯定能力相熟和应用这样的平台,把握一些罕用的命令,而中小企业人员流动还挺频繁,并不是每个入职的成员都能上手,这无形中加大了人力老本;
3)、在线上排查问题过程中,不便了许多,但也麻烦了许多,不便是因为有平台能间接定位了,麻烦是因为平台越来越多,有成员反馈地址太多有点晕了 (
笑
)。综上所述,思考到咱们公司的规模和经济能力,最终咱们团队还是决定用最简略的方法来定位接口耗时的问题,也就是 SpringAOP 对第三方接口做切面来实现耗时统计。
<br/>
成果
先把最终在线上出现的成果展现进去,大家能高深莫测。
咱们我的项目应用的是微服务 +K8s,下图是 Granfa+Loki 搭建的收集 k8s 日志的平台,通过关键字进行搜寻就能间接定位到调用第三方接口耗时的状况。
<br/>
模仿场景
咱们来模仿一下场景,实现 AOP 切面统计第三方接口的耗时。
1、模仿用户建档
实体类
用 map 来模仿寄存用户、获取用户、删除用户。
2、模仿第三方接口
这里就是简略的用线程睡眠来模仿调用第三方接口的耗时,伪装几个接口别离消耗了这么多工夫。
3、service 服务
4、controller 服务
5、测试一下接口
OK,没有问题。
6、AOP 切面
引入依赖
编写切面类,这里简略阐明一下,次要明确几点。
1)、Pointcut 切面要指向第三方接口调用的类,也就是本篇场景中的 RemoteClient;
2)、应用盘绕切面,其中办法名是之后线上检索日志定位的关键字;
3)、计时间接应用 StopWatch 即可,省得引入其余依赖;
4)、StopWatch 的 start 和 stop 办法包裹的 jointPoint.proceed()就是第三方接口的执行操作,这样 StopWatch 就能够统计出该办法的耗时;
5)、最初打印日志也挺重要,能够参考我这样,把类名. 办法 () 都打印进去便于当前检索,同时耗时最好用 ms 单位,这样高深莫测。
7、成果
咱们手动执行模仿场景中的几个接口后,来察看日志打印的状况。
能够看到,办法对应的耗时都统计进去了。
这样,最终 k8s 的日志也会像这样被日志平台收集起来,咱们最终只须要通过关键字检索就能一次定位到所有第三方接口的耗时状况。
最初,我把咱们某一次生产环境定位到的第三方接口超时的日志展现进去给大家看看,正是这样的统计帮忙咱们定位到了其余厂家的接口问题,之前他们始终都是说咱们的问题,靠这个截图才让他们
抬头认罪
,之后他们就修复了这个问题。这是在 Granfa 中咱们依据类名. 办法名间接定位第三方接口的命令
这是检索到的某一段时间内他们接口始终超时的统计,也是最初发给他们的证据。
<br/>
总结
最初,我把这种形式的益处再总结一遍,如果和我所在公司状况相似的同行能够参考下。
1)、节约了保护老本,不须要额定搭建什么链路追踪等用来定位的中间件或基础设施,很多中小企业其实用不上,大体还是习惯通过日志来定位问题,一个链路追踪的平台搭建简略,然而应用过程中咱们显著发现会造成资源缓和,也要进行定期的保护,这个老本会在与日俱增中逐步变多;
2)、团队成员不须要再额定学习多余的技能,尤其是这种快节奏的互联网行业团队,人员变更挺频繁,每次都要培训和领导是一件比拟消耗心力的事件,往往一个人把握了没多久他又跳槽了,对于公司而言又要重来;
3)、平台变简单不是坏事,光是环境地址就能积攒几个 Excel,规模不大的团队还是偏向于最简略的形式来解决问题,综合思考之下,人力齐全能够代替平台(
老板们其实就喜爱这样的员工
)。
另外略微提一点,这种形式既能够利用于单体架构,也能够利用于分布式架构,但对于分布式架构要留神一点,第三方服务最好能独立进去,这样你应用 AOP 切面就完满适配了,否则你须要每个服务都引入一遍。
<br/>
附言
源码会在评论区分享进去,有趣味的能够去下载来本人试试,外面还有我整顿的 logback 配置,有黑白日志的配置,还有每个配置很具体的正文,AOP 局部的代码就是线上运行了半年多的代码,能够间接拿去应用,只须要批改一下你的切面指向及类名办法名的日志打印即可。
<br/>
原创文章纯手打,一个一个字敲进去的,键盘上全是血
,如果感觉有帮忙麻烦点个 赞和珍藏
吧~
自己致力于分享工作中的教训及趣事,喜爱的话能够进主页 关注一下
哦~
更多最新技术文章可关注 GZH:【Java 分享客栈】