APM系統(tǒng)
- APM (Application Performance Management) 即應(yīng)用性能管理系統(tǒng),APM系統(tǒng)是可以幫助理解系統(tǒng)行為、用于分析性能問題的工具,以便發(fā)生故障的時候,能夠快速定位和解決問題。它主要有三個方面的內(nèi)容,分別是 Logs(日志)、Traces(鏈路追蹤) 和 Metrics(報表統(tǒng)計)。以后大家接觸任何一個 APM 系統(tǒng)的時候,都可以從這三個方面去分析它到底是什么樣的一個系統(tǒng)。
分布式鏈路追蹤(SkyWalking)
- 官網(wǎng)
-
整體架構(gòu)包含如下三個組成部分:
2.1 探針(agent)負(fù)責(zé)進(jìn)行數(shù)據(jù)的收集
2.2 可觀測性分析平臺OAP(Observability Analysis Platform),接收探針發(fā)送的數(shù)據(jù),將數(shù)據(jù)存儲到對應(yīng)的存儲介質(zhì)上,比如ES、MySQL、H2數(shù)據(jù)庫等
2.3 SkyWalking會提供單獨的UI進(jìn)行數(shù)據(jù)的查看,UI會調(diào)用OAP提供的接口
SkyWalking-配置

SkyWalking-UI
- SkyWalking日志框架的使用
3.1 引入POM
<!-- SkyWalking對 Logback 的集成 -->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>6.6.0</version>
</dependency>
<!-- SkyWalking工具類 -->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>6.6.0</version>
</dependency>
3.2 代碼示例

示例代碼
3.3 UI效果圖

請求鏈路

日志鏈路
3.4 如何將鏈路ID記錄到項目日志平臺中去

修改日志配置
2022-09-19 10:21:51.521 INFO 18611 TID:22.37.15782305114330001 --- [nio-8079-exec-1] c.i.s.l.s.controller.DemoController : 測試日志

根據(jù)鏈路ID查詢?nèi)罩?/div>
- SkyWalking其他功能
4.1 SkyWalking也支持其他組件的鏈路追蹤,例如Spring MVC,Dubbo,MySQL,Redis,MongoDB,ES,RabbitMQ等,代碼是無侵入的,只需要引入SkyWalking的依賴和配置即可,這里不再舉例。
- java agent(探針)
5.1 探針的優(yōu)勢:不修改原有項目一行代碼就可以進(jìn)行集成。SkyWalking服務(wù)掛了也不會影響到業(yè)務(wù)
package org.apache.skywalking.apm.toolkit.trace;
public class TraceContext {
public TraceContext() {
}
//獲取鏈路ID的方法
//SkyWalking探針會對這個方法做增強(qiáng),在項目運行時,會返回鏈路ID
//如果SkyWalking掛了,那么這個獲取鏈路ID的方法就會直接返回空字符串,當(dāng)前業(yè)務(wù)不會因為SkyWalking掛了而導(dǎo)致報錯
public static String traceId() {
return "";
}
}
5.2 如何實現(xiàn)一個簡單的探針。例如在沒有修改代碼的情況下,利用java agent統(tǒng)計項目中所有方法的耗時,SkyWalking也是基于這些技術(shù)來實現(xiàn)鏈路追蹤的。
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy-agent</artifactId>
<version>1.9.2</version>
</dependency>
public static void premain(String agentArgs, Instrumentation inst) {
//創(chuàng)建一個轉(zhuǎn)換器,轉(zhuǎn)換器可以修改類的實現(xiàn)
//ByteBuddy對java agent提供了轉(zhuǎn)換器的實現(xiàn),直接使用即可
AgentBuilder.Transformer transformer = new AgentBuilder.Transformer() {
public DynamicType.Builder<?> transform(DynamicType.Builder<?> builder, TypeDescription typeDescription, ClassLoader classLoader, JavaModule javaModule) {
return builder
// 攔截任意方法
.method(ElementMatchers.<MethodDescription>any())
// 攔截到的方法委托給TimeInterceptor
.intercept(MethodDelegation.to(MyInterceptor.class));
}
};
new AgentBuilder // Byte Buddy專門有個AgentBuilder來處理Java Agent的場景
.Default()
// 根據(jù)包名前綴攔截類
.type(ElementMatchers.nameStartsWith("com.levi"))
// 攔截到的類由transformer處理
.transform(transformer)
.installOn(inst);
}
}
public class MyInterceptor {
@RuntimeType
public static Object intercept(@Origin Method method, @SuperCall Callable<?> callable) throws Exception {
long start = System.currentTimeMillis();
try {
//執(zhí)行原方法
return callable.call();
} finally {
//打印調(diào)用時長
System.out.println(method.getName() + ":" + (System.currentTimeMillis() - start) + "ms");
}
}
}
-
VM設(shè)置 -javaagent:C:\Users\Administrator\agent-demo.jar
VM設(shè)置 -
運行結(jié)果
運行結(jié)果
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
相關(guān)閱讀更多精彩內(nèi)容
- [toc] 一、基礎(chǔ)知識 1.1 為什么要使用分布式追蹤 微服務(wù)在架構(gòu)、敏捷開發(fā)、快速部署、去中心化、組件化等方面...
- [toc] 一、分布式鏈路追蹤 1.1 分布式鏈路追蹤系統(tǒng)起源 在比較大型的web集群和微服務(wù)環(huán)境中,客戶端的一次...
- 一、技術(shù)調(diào)研 Zipkin是Twitter開源的調(diào)用鏈分析工具、目前基于SpringCloud Sleuth得到了...
- 如果能跟蹤每個請求,中間請求經(jīng)過哪些微服務(wù),請求耗時,網(wǎng)絡(luò)延遲,業(yè)務(wù)邏輯耗時等。我們就能更好地分析系統(tǒng)瓶頸、解決系...
- 個人專題目錄 SkyWalking入門 1. Skywalking概述 根據(jù)官方的解釋,Skywalking是一個...


