开发者社区> 问答> 正文

[@项籍][¥20]如何做到apm非侵入

想问一下您,现在apm主要采用的是基于javaagent机制做字节码层面的植入么,主要涉及哪些知识点,针对不同web容器或者中间件如何植入呢

展开
收起
1115298867581123 2018-10-26 12:34:20 3013 0
1 条回答
写回答
取消 提交回答
  • 多年互联网开发经验,从事业务开发、平台开发、架构设计、云计算、APM等领域。目前专注于供应链方向的解决方案治理和服务交易域

    主要涉及的知识点

    • JVMTI
    • JNI
    • ClassLoader
    • Instrument
    • JConsole(或类似产品)
    • Javassist(或ASM等字节码类库)

    针对于不同Web容器或者中间件如何植入

    • javaagent探针加载的jar包由SystemClassloader加载,通过classfile transform入口变更字节码
    • 而我们往往通过插桩的方式埋探针,执行流程通过桩代码路由到APM的核心逻辑
    • 但是这里面有个问题在于桩代码的执行过程中如何访问宿主中的类和方法(类似于HttpservletRequst)
    • 对于普通的web容器只需要定义桩ClassLoader的加载逻辑即可;但是对于osgi容器就无法识别(这一点优雅的方法都是有损的,不做具体描述了)
    • 因此主要影响的是classloader,对于宿主jvm是web还是中间件并不重要
    2019-07-17 23:10:28
    赞同 1 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
构建微服务下的性能监控 立即下载
微服务架构的应用性能监控 立即下载
Elasticsearch全观测技术解析与应用(构建日志、指标、APM统一观测平台) 立即下载