SkyWalking 单实例 Profiling 的实现
摘要
Trace Profiling是SkyWalking监控服务指标的一项重要功能,通过Trace Profiling,我们能够直观地看到对应Trace在具体代码级别的耗时情况,进而能够快速锁定对应Trace严重消耗性能的代码位置。但是Trace Profiling并不是时刻运行的,而是需要人为开启,我们需要通过创建Trace Profiling Task,然后Agent端异步拉取任务的方式来进行对应服务的Trace Profiling。这是因为Trace Profiling需要监控代码行数级别的耗时情况,而这一行为本身也会消耗机器的性能。为了不影响具体的业务性能和指标,SkyWalking进行了限制,我们只能在对应服务上进行短时间的(通常是5到15分钟)Trace Profiling任务。
目前的Trace Profiling是服务-端点方法维度的,换句话说,在指定了要监控的服务和对应的端点方法后,生成的Trace Profiling Task会被对应服务的所有实例拉取并使用,即相应服务的所有机器都进行Trace Profiling。
但问题发生的场景是多种多样,我们有的时候,并不需要某个服务的所有实例的Trace Profiling,比如说我们进行了ABTest或者灰度部署,在这种情况下,我们真实的需求是针对某个实例进行Trace Profiling。因此,支持实例维度的Trace Profiling功能在某些场景下能够有效地降低我们排查问题带来的性能损耗。
欢迎在评论区写下你对这篇文章的看法。