内容简介:SkyWalking 源码分析 —— Agent 插件(一)之 Tomcat
关注 微信公众号:【芋道源码】 有福利:
- RocketMQ / MyCAT / Sharding-JDBC 所有 源码分析文章列表
- RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
- 您对于源码的疑问每条留言 都 将得到 认真 回复。 甚至不知道如何读源码也可以请教噢 。
- 新的 源码解析文章 实时 收到通知。 每周更新一篇左右 。
- 认真的 源码交流微信群。
1. 概述
本文主要分享 SkyWalking Agent Tomcat 插件 。涉及到的代码不多,如下图:
2. TomcatInstrumentation
在 skywalking-plugin.def
里,定义了插件,如下图:
org.skywalking.apm.plugin.tomcat78x.define.TomcatInstrumentation
,实现 ClassInstanceMethodsEnhancePluginDefine 抽象类,定义了方法切面,代码如下:
2.1 TomcatInvokeInterceptor
org.skywalking.apm.plugin.tomcat78x.TomcatInvokeInterceptor
,实现 InstanceMethodsAroundInterceptor 接口,TomcatInstrumentation 的拦截器。代码如下:
-
#beforeMethod(...)
方法,创建 EntrySpan 对象。代码如下:- 第 59 至 65 行:解析 ContextCarrier 对象,用于跨进程的链路追踪。在 《SkyWalking 源码分析 —— Agent 收集 Trace 数据》「 3.2.3 ContextCarrier 」 有详细解析。
- 第 68 行:调用
ContextManager#createLocalSpan(operationName, contextCarrier)
方法,创建 EntrySpan 对象。 - 第 71 至 72 行:设置 EntrySpan 对象的
url
/http.method
标签键值对。 - 第 75 行:设置 EntrySpan 对象的组件类型。
- 第 78 行:设置 EntrySpan 对象的分层。
-
#afterMethod(...)
方法,完成 EntrySpan 对象。- 第 89 至 92 行:当返回状态码大于等于 400 时,标记 EntrySpan 发生异常,并设置
status_code
标签键值对。 - 调用
ContextManager#stopSpan()
方法,完成 EntrySpan 对象。
- 第 89 至 92 行:当返回状态码大于等于 400 时,标记 EntrySpan 发生异常,并设置
-
#handleMethodException(...)
方法,处理异常。 注意 ,该方法实际并且调用,在 Tomcat 的StandardWrapperValve#invoke(request, response)
方法里,发生异常时,会提交异常给StandardWrapperValve#exception(request, response, exception)
处理,所以会被「 2.2 TomcatExceptionInterceptor 」拦截。
2.2 TomcatExceptionInterceptor
org.skywalking.apm.plugin.tomcat78x.TomcatExceptionInterceptor
,实现 InstanceMethodsAroundInterceptor 接口,TomcatInstrumentation 的拦截器。代码如下:
-
#beforeMethod(...)
方法,处理异常。代码如下:- 第 35 行:调用
AbstractSpan#errorOccurred()
方法,标记 EntrySpan 对象发生异常。 - 第 35 行:调用
AbstractSpan#log(Throwable)
方法,记录异常日志到 EntrySpan 对象。
- 第 35 行:调用
666. 彩蛋
一大波插件来袭!
胖友,分享一波胖友圈括号。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 急速 debug 实战三(Node - webpack插件,babel插件,vue源码篇)
- Cloud Studio 优秀插件一览 | 附源码
- Android 插件化框架 DynamicLoadApk 源码分析
- 每日一博 | 深入分析 源码级别解读 MyBatis 插件
- SkyWalking 源码分析 —— Agent 插件(二)之 Dubbo
- SkyWalking 源码分析 —— Agent 插件(三)之 SpringMVC
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机程序设计艺术(第2卷)
Donald E. Knuth / 苏运霖 / 国防工业出版社 / 2002-8 / 98.00元
本书是国内外业界广泛关注的7卷本《计算机程序设计艺术》第2卷的最新版。本卷对半数值算法领域做了全面介绍,分“随机数”和“算术”两章。本卷总结了主要算法范例及这些算法的基本理论,广泛剖析了计算机程序设计与数值分析间的相互联系,其中特别值得注意的是作者对随机数生成程序的重新处理和对形式幂级数计算的讨论。 本书附有大量习题和答案,标明了难易程度及数学概念的使用。 本书内容精辟,语言流畅,引人入胜,可供从......一起来看看 《计算机程序设计艺术(第2卷)》 这本书的介绍吧!