pfinder实现原理揭秘

💡 原文中文,约14600字,阅读约需35分钟。
📝

内容提要

本文介绍了京东自研的pfinder应用全链路监控系统的核心原理和架构设计,包括多维监控、自动埋点、应用拓扑、调用链追踪等功能。pfinder使用字节码注入实现增强,解决了跨线程传递traceId的问题。

🎯

关键要点

  • pfinder是京东自研的APM系统,支持调用链追踪、应用拓扑和多维监控。

  • pfinder无需修改代码,只需在启动文件中增加脚本即可接入。

  • pfinder支持京东主流中间件和常用开源组件。

  • pfinder具备多维监控、自动埋点、应用拓扑、调用链追踪等功能。

  • pfinder使用字节码注入技术解决跨线程传递traceId的问题。

  • 字节码增强技术是pfinder的核心,涉及字节码的修改和注入。

  • 多种字节码修改框架(如ASM、javassist、bytebuddy、bytekit)可用于实现相同功能。

  • JVMTI接口允许开发者监控JVM运行时指标和实现代码调试功能。

  • Instrumentation接口使Java开发者能够编写Agent进行字节码修改。

  • pfinder通过加载配置文件中的服务和插件实现字节码增强。

  • pfinder的插件加载和字节码增强在服务初始化过程中完成。

  • pfinder通过TracingRunnable实现traceId的跨线程传递。

  • pfinder支持在线热部署功能,允许类搜索、反编译和热更新。

延伸问答

pfinder是什么,它的主要功能有哪些?

pfinder是京东自研的APM系统,主要功能包括调用链追踪、应用拓扑、多维监控、自动埋点和自动故障分析等。

pfinder如何实现字节码增强?

pfinder通过字节码注入技术实现增强,使用多种字节码修改框架如ASM、javassist等,解决了跨线程传递traceId的问题。

pfinder的接入方式是什么?

pfinder无需修改代码,只需在启动文件中增加两行脚本即可接入。

pfinder支持哪些中间件和开源组件?

pfinder支持京东主流中间件如jimdb、jmq、jsf,以及常用开源组件如tomcat、http client、mysql和es等。

pfinder如何解决跨线程传递traceId的问题?

pfinder通过TracingRunnable实现traceId的跨线程传递,确保在使用线程池或@Async时不会丢失traceId。

pfinder的在线热部署功能是如何实现的?

pfinder通过jmtp与服务端交互,允许类搜索、反编译和热更新等功能,从而实现在线热部署。

🏷️

标签

➡️

继续阅读