工作原理
Java探针原理
Java Agent基于JDK 提供的Instrumentation机制,在class文件被加载的时候,通过字节码技术,动态对Framework、数据库、NoSQL、Web Service、组件等特定方法实施监控,从而获得方法执行时间、数据库调用时间、NoSQL响应时间以及外部服务响应时间;并在这些时间超过一定阈值时,抓取调用堆栈。
UniAgent原理
Linux系统:UniAgent在Linux系统中安装Preload模块,Preload技术是Linux系统自身支持的模块预加载技术,进程加载器在应用进程启动时加载指定的预加载模块,预加载模块识别进程类型(Java、.Net、PHP、Nginx等)后加载特定的应用探针,应用探针实现采集性能数据的功能。如果应用部署在docker等容器中,UniAgent检测到容器启动后,会把应用探针自动挂载到容器内部,并在容器内部安装Preload模块,然后通过预加载模块加载应用探针。
Windows系统:UniAgent在Windows系统中安装一个驱动,此驱动在系统中监听进程启动事件,应用进程启动时回调驱动加载指定的预加载模块,预加载模块识别进程类型(Java、.Net等)后加载特定的应用探针,应用探针实现采集性能数据的功能。
Java Agent基于JDK 提供的Instrumentation机制,在class文件被加载的时候,通过字节码技术,动态对Framework、数据库、NoSQL、Web Service、组件等特定方法实施监控,从而获得请求调用次数、方法执行时间、数据库调用时间、NoSQL响应时间、外部服务响应时间、异常、堆栈以及方法参数。
Kubernetes UniAgent原理
APM探针:采用Adminisisson Webhook+InitContainer自动注入。
Infra探针:采用daemonset自动扩展Node节点。
Collector:采用Statefulset自动扩展。
Kubernetes 集群监控:对接Prometheus。
产品监测原理
探针采用两级架构,包括运行在被监控应用上的Agent部分和运行在独立服务器上的Collector部分。其中 Agent部分的工作原理如上图所示,负责对应用进行嵌码和原始的数据采集,采集后的信息全部通过局域网直接传输到Collector上,由Collector进行数据的统计和关联,并最终上报到平台的数据中心上。
由于Agent会采集全量的业务和性能数据并实时传输到Collector上,因此Agent与Collector之间必须保证通畅的本地千兆网络连接。Collector支持Failover的高可用,对一组Agent可以部署多台Collector服务器,当其中个别服务器出现故障无法正常工作时,探针可通过Failover机制将数据实时传输到其他Collector上,以实现数据采集的高可用。Collector的高可用机制如下图所示: