常见问题
应用与微服务探针能采集哪些数据?
- 应用性能数据:应用、事务、服务接口、后台任务的响应时间、错误率、吞吐率等。
- 组件类数据:数据库、数据库连接池、NoSQL、MQ、HttpClient等。
- 功能类数据:异常、错误、Request parameters、自定义的数据项以及自定义指标等。
- init数据:CPU核数、主机名称、内存、进程ID、JDK版本、探针启动时间等环境信息。
- JVM数据:当前进程的CPU耗时、当前进程的CPU占用率、内存、GC、session会话数等。
应用与微服务探针支持在线升级和卸载吗?
应用与微服务探针支持在线升级和卸载,并支持批量操作。针对大量实例的业务场景,可以轻松通过单击鼠标在控制台中完成海量探针的部署,也可以自由的进行新探针的灰度发布。具体可参见更新和卸载。
探针是如何获取JVM相关数据的?
探针通过JVM提供一系列JMX接口获取JVM相关数据。
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等。其优点是可以非常容易的使应用程序被管理。
探针是如何采集到代码调用堆栈的?
探针判断当前方法的执行时间超过慢方法堆栈阈值时,会调用以下方法获取调用堆栈:
Thread.currentThread().getStackTrace()
说明:一条trace中最多可以获取200个方法的慢方法堆栈。
探针在采集性能数据的同时,是否会采集业务数据?
探针在采集性能数据时,不会主动采集业务数据,需用户在控制台中配置后,才可获得。
通过配置获取业务数据的功能如下:
- SQL混淆:默认打开,不采集SQL参数
- 业务标识
- 数据项
- 用户溯源
- 自定义嵌码
- 请求参数。URL参数会默认采集,其他参数需在探针配置文件tingyun.properties中打开如下配置:action_tracer.capture_full_parameters=true。
PHP 探针的采集原理是什么?
PHP Agent是一个PHP扩展,使用PHP扩展技术替换zend_execute的函数指针,在Zend引擎循环执行操作码的过程中追踪获得调用各类函数的性能及错误信息。PHP探针包含一个探针进程和一个汇总进程,汇总进程负责将PHP探针采集的数据汇总发送到基调听云服务器。
.NET 探针的采集原理是什么?
.NET探针通过CLR提供的一系列的接口函数,在JIT已开始编译某个函数期间,通过ILRewrite技术替换和修改正在被编译的函数, 从而达到.NET探针嵌码的目的,实现对IIS .NET应用性能和其他数据的采集。
Java 探针如何实现慢 SQL 的抓取?
Java探针通过对数据库驱动的适配,来实现对数据库数据的采集,在数据库驱动getConnection的时候采集数据库相关的信息,然后再通过对statement和PreparedStatement等相关接口方法的适配,实现对数据库相关操作数据的抓取。当该方法的阈值超过控制台中慢方法堆栈阈值时,当前SQL被标记为慢SQL。
探针是否会影响应用的性能?
由于探针是在请求应用时采集性能数据的,必定会消耗部分资源,对应用性能产生一定的影响,目前市面上所有的性能监控工具对应用性能都会产生一定的影响。具体的影响程度与应用的业务场景有关,请参照探针的性能测试报告。
一个主机部署了多个实例,占用几个探针授权数?
一个应用实例占用一个探针授权数,以此类推。
微服务探针是如何定义的?只有Java语言支持吗?
识别为微服务探针的条件需同时满足以下两点:
安装在Docker里,有dockerId的。
内存大小不超过2G(默认2G)。
探针上传数据举例说明:
不满足以上条件的都识别为普通探针。 除Java语言外,其他语言只有普通探针,没有微服务探针类型。
热点方法学习的原理是什么?
探针定时的对应用代码生成线程快照,将快照数据发送到基调听云应用与微服务平台,平台对快照进行学习,按照算法把耗时较长、频繁调用的方法定义为热点方法,然后对热点方法进行自定义嵌码,事务追踪调用栈里就会出现该方法了。
全栈快照配置的三种采集会不会对同一个单次请求同时进行全栈快照?导致采集数据聚合有问题?
当对单一次的请求,三种采集方式的优先级是:触发采集>固定周期采集>强制采集。首先会先判断前面优先级的方式没有对当前请求做快照,然后才会对当前请求进行快照采集。