会一直持续更新。。。
Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。
工欲善其事,必先利其器
arthas idea 插件 - 汪小哥
monitor/watch/trace 相关
https://arthas.aliyun.com/doc/commands.html#monitor-watch-trace-%E7%9B%B8%E5%85%B3
- watch - 方法执行数据观测
- stack - 输出当前方法被调用的调用路径
- trace - 方法内部调用路径,并输出方法路径上的每个节点上耗时
- tt - 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
SkyWalking链路追踪
观测CorrelationContext.put(key, value)
操作后,关联上下文的状态变化过程
[arthas@1]$ watch org.apache.skywalking.apm.agent.core.context.CorrelationContext put '{params,target,returnObj}' -n 5 -x 3
ts=2024-06-10 15:01:22; [cost=0.134165ms] result=@ArrayList[
@Object[][
@String[scene-label],
@String[biz-route],
],
@CorrelationContext[
data=@ConcurrentHashMap[
@String[scene-label]:@String[biz-route],
],
AUTO_TAG_KEYS=@ArrayList[
@String[cyborg-flow],
@String[scene-label],
@String[scene-tag],
],
],
]
ts=2024-06-10 15:01:22; [cost=0.01605ms] result=@ArrayList[
@Object[][
@String[cyborg-flow],
@String[true],
],
@CorrelationContext[
data=@ConcurrentHashMap[
@String[scene-label]:@String[biz-route],
@String[cyborg-flow]:@String[true],
],
AUTO_TAG_KEYS=@ArrayList[
@String[cyborg-flow],
@String[scene-label],
@String[scene-tag],
],
],
]
ts=2024-06-10 15:01:22; [cost=0.007927ms] result=@ArrayList[
@Object[][
@String[scene-tag],
@String[stress-test],
],
@CorrelationContext[
data=@ConcurrentHashMap[
@String[scene-label]:@String[biz-route],
@String[cyborg-flow]:@String[true],
@String[scene-tag]:@String[stress-test],
],
AUTO_TAG_KEYS=@ArrayList[
@String[cyborg-flow],
@String[scene-label],
@String[scene-tag],
],
],
]
观测提供者上下文拦截器ContextFilter.invoke(invoker, invocation)
的调用对象
[arthas@7]$ watch org.apache.dubbo.rpc.filter.ContextFilter invoke '{params[1].getAttachments(),returnObj}' -n 5 -x 3
ts=2024-06-10 15:16:30; [cost=24.479313ms] result=@ArrayList[
@ObjectToStringMap[
@String[traceid]:@String[0a57ddf0732748208240f278a248de88.66.17181765903061237],
@String[x-request-id]:@String[0fe97869-15d9-452f-9374-228f23e56f43],
@String[x-forwarded-proto]:@String[http],
@String[sw8-correlation]:@String[c2NlbmUtbGFiZWw=:Yml6LXJvdXRl,Y3lib3JnLWZsb3c=:dHJ1ZQ==,c2NlbmUtdGFn:c3RyZXNzLXRlc3Q=],
@String[timeout]:@String[5000],
@String[generic]:@String[gson],
@String[x-envoy-attempt-count]:@String[1],
@String[remote.application]:@String[xxx-reactor-gateway],
@String[sw8-x]:@String[0- ],
@String[sw8]:@String[1-MGE1N2RkZjA3MzI3NDgyMDgyNDBmMjc4YTI0OGRlODguNjYuMTcxODE3NjU5MDMwNjEyMzc=-MGE1N2RkZjA3MzI3NDgyMDgyNDBmMjc4YTI0OGRlODguNjYuMTcxODE3NjU5MDMwODEyMzg=-0-bGVmaXQtcmVhY3Rvci1nYXRld2F5fHxzaXQ=-ZjdjNjRjNjcwYjcyNDkxZGFmNGQ5YTIyOTc5ZGZjZjdAMTkyLjE2OC4xMTAuMjUx-bnVsbC5nZXRBZHZlcnRpc2VDb25maWdOZXcoKQ==-c2l0L2xlZml0LWNtcy5zaXQuc3ZjLmNsdXN0ZXIubG9jYWw6MA==],
@String[x-forwarded-client-cert]:@String[By=spiffe://cluster.local/ns/sit/sa/default;Hash=7e7ef818f1a9cd3156d98010276ff6004b5439ce8548d1b5972066e4138a8e0f;Subject="";URI=spiffe://cluster.local/ns/sit/sa/default],
@String[id]:@String[605975],
],
]
@String[sw8-correlation]:@String[c2NlbmUtbGFiZWw=:Yml6LXJvdXRl,Y3lib3JnLWZsb3c=:dHJ1ZQ==,c2NlbmUtdGFn:c3RyZXNzLXRlc3Q=],
jvm 相关
https://arthas.aliyun.com/doc/commands.html#jvm-%E7%9B%B8%E5%85%B3
- getstatic - 查看类的静态属性
- vmtool - 从 jvm 里查询对象,执行 forceGc
SkyWalking链路追踪
关联上下文的自动跨度标签的键集合未配置未生效
【原因】可能是当时改了application.yml
文件中的searchableTracesTags: ${SW_SEARCHABLE_TAG_KEYS:
配置项,OAP和UI未重启。OAP和UI都需要配置和重启,这样才能一起生效。
1.业务应用侧,skywalking-agent.jar
使用方
[arthas@1]$ getstatic org.apache.skywalking.apm.agent.core.context.CorrelationContext AUTO_TAG_KEYS -x 3
field: AUTO_TAG_KEYS
@ArrayList[
@String[sw8_userId],
@String[scene.label],
@String[scene],
]
[arthas@1]$ getstatic org.apache.skywalking.apm.agent.core.conf.Config$Correlation AUTO_TAG_KEYS -x 3
field: AUTO_TAG_KEYS
@String[sw8_userId,scene.label,scene]
[arthas@1]$ getstatic org.apache.skywalking.apm.agent.core.conf.Config$Correlation ELEMENT_MAX_NUMBER -x 3
field: ELEMENT_MAX_NUMBER
@Integer[8]
2.SkyWalking OAP/UI服务端
[arthas@1]$ vmtool -x 3 --action getInstances --className org.apache.skywalking.oap.server.core.CoreModuleConfig --express 'instances[0].searchableTracesTags'
@String[http.method,http.status_code,rpc.status_code,db.type,db.instance,mq.queue,mq.topic,mq.broker,sw8_userId,scene.label,scene]
[arthas@1]$ vmtool -x 3 --action getInstances --className org.apache.skywalking.oap.server.core.config.SearchableTracesTagsWatcher --express 'instances[0].searchableTags'
@HashSet[
@String[db.instance],
@String[mq.topic],
@String[http.status_code],
@String[db.type],
@String[scene.label],
@String[mq.queue],
@String[sw8_userId],
@String[http.method],
@String[rpc.status_code],
@String[mq.broker],
@String[scene],
]