SkyWalking
Apache SkyWalking 是一个开源的应用性能监控(APM)工具和可观测性分析平台,特别适用于微服务、云原生架构以及基于容器(如Docker、Kubernetes、Mesos)部署的服务。SkyWalking 提供了分布式追踪、度量指标收集、服务网格遥测分析、诊断等功能,帮助开发者更好地理解和优化他们的应用程序和服务。
本文将介绍如何分析系统偶尔响应慢的思路
链路追踪 | Trace
配置了SkyWalking可以查询Trace标签下响应慢的接口,选择Duration
即可根据响应时间进行排序,然后点击列表即可展示链路的追踪信息,正常情况下可以看到redis, SQL的执行时间。
然而有种情况是,链路展示的大部分耗时属于Self(ms)
这种情况通常无法直接定位问题。接下来需要采用第二种方法
追踪剖析 | Trace Profiling
在 Apache SkyWalking 中,追踪剖析(Trace Profiling)是一种高级功能,它允许开发者深入分析分布式系统中特定服务调用链路的性能瓶颈。通过这种方法,可以精确地定位到导致响应时间过长或者错误发生的具体代码段或服务交互,从而有效地进行优化。
在Trace Profiling
标签页我们可以新建任务
配置需要监控的接口,如下图所示
端点名称:要监听的接口url
监控时间:从现在开始或者指定开始时间,最长能采样15分钟
起始监控时间(ms):大于这个数值的请求将被采样记录
最大采样数:记录的样本数最大值,超过这个值的样本则舍弃,最大值为9
如果接口慢是常态,用这种方法可以快速采取到样本,并进行分析,但是有种情况是,不知道接口什么时候会慢,几个小时内甚至几天都不会出现一次的情况,通过这个页面配置显然无法满足要求,那该如何解决。
模拟新建任务
如果接口慢是偶发,可以采用postman
或者Apifox
等软件每15分钟调用一次SkyWalking 新建任务接口,通过浏览器F12可以获取到具体请求报文如下
http://{skywalking_host}/graphql
{
"query": "mutation createProfileTask($creationRequest: ProfileTaskCreationRequest) {\n task: createProfileTask(creationRequest: $creationRequest) {\n id\n errorReason\n }\n }",
"variables": {
"creationRequest": {
"serviceId": "WmhvbmdTaGFuY2ZnbHxDRlhUfA==.1",
"endpointName": "POST:/upload",
"startTime": 1744686317425,
"duration": 15,
"minDurationThreshold": 1000,
"dumpPeriod": 10,
"maxSamplingCount": 9
}
}
}
根据上述报文,我们知道只需要每15分钟请求时候,自动生成startTime
即可,定期检查下是否捕捉到样本然后进行分析。
采样分析
采样成功后只需要,选择样本,然后点击分析即可展现具体的堆栈情况
点击分析后得到堆栈信息 ,滚到最后找打耗时长的方法
最后居然发现因为ui问题无法完全展示
解决方案其实很简单,打开开发者模式,直接获取分析时返回的json内容提交个GPT进行分析即可
评论区