一、簡(jiǎn)介
1.1、APM系統(tǒng)
APM(Application Performance Monitoring)系統(tǒng)是一種用于監(jiān)控和管理應(yīng)用程序性能的工具。它可以幫助開發(fā)人員和運(yùn)維團(tuán)隊(duì)實(shí)時(shí)監(jiān)控應(yīng)用程序的性能指標(biāo)、識(shí)別潛在的性能問題,并提供性能優(yōu)化建議。
APM系統(tǒng)可以幫助用戶及時(shí)發(fā)現(xiàn)和解決應(yīng)用程序的性能問題,提升用戶體驗(yàn)和系統(tǒng)穩(wěn)定性。它可以應(yīng)用于各種類型的應(yīng)用程序,包括Web應(yīng)用、移動(dòng)應(yīng)用、微服務(wù)架構(gòu)等。
1.2、SkyWalking 簡(jiǎn)介
SkyWalking是一個(gè)開源的應(yīng)用性能監(jiān)控(APM)系統(tǒng),用于監(jiān)控和管理分布式系統(tǒng)的性能。它提供了實(shí)時(shí)的性能指標(biāo)、事務(wù)追蹤、服務(wù)依賴分析等功能,幫助開發(fā)人員和運(yùn)維團(tuán)隊(duì)快速定位和解決性能問題。
SkyWalking的核心功能包括:
-
分布式追蹤:SkyWalking可以追蹤分布式系統(tǒng)中的請(qǐng)求流程,記錄每個(gè)請(qǐng)求經(jīng)過的服務(wù)和組件,以及請(qǐng)求在每個(gè)組件中的耗時(shí)情況。通過分析追蹤數(shù)據(jù),可以了解系統(tǒng)中各個(gè)組件之間的調(diào)用關(guān)系和性能瓶頸,幫助開發(fā)人員快速定位和解決問題。
-
實(shí)時(shí)監(jiān)控:SkyWalking提供實(shí)時(shí)的性能監(jiān)控指標(biāo),包括各個(gè)服務(wù)的請(qǐng)求量、響應(yīng)時(shí)間、錯(cuò)誤率等。通過監(jiān)控?cái)?shù)據(jù),可以及時(shí)發(fā)現(xiàn)系統(tǒng)的性能問題,并進(jìn)行調(diào)優(yōu)和優(yōu)化。
-
服務(wù)依賴分析:SkyWalking可以分析系統(tǒng)中各個(gè)服務(wù)之間的依賴關(guān)系,包括調(diào)用關(guān)系和數(shù)據(jù)流向。通過可視化的方式展示服務(wù)之間的依賴關(guān)系,可以幫助開發(fā)人員理解系統(tǒng)的架構(gòu)和流程,從而更好地進(jìn)行系統(tǒng)設(shè)計(jì)和優(yōu)化。
-
告警和報(bào)警:SkyWalking可以設(shè)置各種告警規(guī)則,當(dāng)系統(tǒng)出現(xiàn)異?;蛐阅芟陆禃r(shí),可以及時(shí)發(fā)送告警通知。這樣可以幫助運(yùn)維人員快速響應(yīng)和解決問題,保證系統(tǒng)的穩(wěn)定性和可靠性。
-
數(shù)據(jù)可視化:SkyWalking提供豐富的數(shù)據(jù)可視化功能,可以將監(jiān)控?cái)?shù)據(jù)以圖表的形式展示,幫助用戶更直觀地了解系統(tǒng)的性能和運(yùn)行情況。同時(shí),還可以根據(jù)需求自定義儀表盤,將關(guān)鍵指標(biāo)集中展示,方便用戶監(jiān)控和管理系統(tǒng)。
二、快速入門
2.1、下載、啟動(dòng)
前提:要有java環(huán)境
下載鏈接: https://skywalking.apache.org/downloads/
我這邊使用9.3版本的apm項(xiàng)目
還要再下載 agent,skywalking apm是服務(wù)端,agent才是真正監(jiān)控應(yīng)用的探針。
這里是監(jiān)控java服務(wù),所以下載的是java agent,如果是前端可以下載 javaScript
還需要再下載elasticsearch,用于存儲(chǔ)記錄
下載鏈接: https://www.elastic.co/cn/downloads/elasticsearch
1、啟動(dòng)apm系統(tǒng):
window直接進(jìn)入apm項(xiàng)目里面bin目錄下的startup.bat文件,linux 則執(zhí)行 sh startup.sh
修改啟動(dòng)端口:進(jìn)入webapp目錄下,修改yml文件
啟動(dòng)后訪問 http://localhost:8080
2、啟動(dòng)agent:
在我們自己的項(xiàng)目上,注意是我們自己開發(fā)的項(xiàng)目,不是skywalking的,在啟動(dòng)參數(shù)上加上配置:
指定到agent的jar包的位置
-javaagent:D:\code\tool\skywalking-agent\skywalking-agent.jar
-Dskywalking.agent.service_name=skywalking-service
-Dskywalking.collector.backend_service=127.0.0.1:11800
-javaagent:指定skywalking中的agent中的skywalking-agent.jar的路徑
-Dskywalking.agent.service_name:指定在skywalking中的服務(wù)名稱,一般是微服務(wù)的spring.application.name
-Dskywalking.collector.backend_service:指定oap服務(wù)綁定的地址,由于陳某這里是本地,并且oap服務(wù)默認(rèn)的端口是11800,因此只需要配置為127.0.0.1:11800
如我在idea上添加VM options配置
項(xiàng)目啟動(dòng)完畢,再次刷新http://localhost:8080/,apm項(xiàng)目,就可以看到服務(wù)注冊(cè)進(jìn)來了
微服務(wù)啟動(dòng)就是,每個(gè)服務(wù)也都寫上那個(gè)配置即可,需要更換名稱。
如果報(bào)下面錯(cuò)誤,則可以將classpath更換成JAR manifest
2.2、界面認(rèn)識(shí)
點(diǎn)擊服務(wù)名稱,可進(jìn)入更詳細(xì)的監(jiān)控界面
-
概覽(Overview):提供整體系統(tǒng)的概覽信息,包括各個(gè)服務(wù)的調(diào)用量、成功率、延遲等指標(biāo)的總覽。
-
實(shí)例(Instance):查詢和監(jiān)控系統(tǒng)中的實(shí)例,可以查看每個(gè)實(shí)例的性能指標(biāo)、調(diào)用情況等信息。
-
端點(diǎn)(Endpoint):查詢和監(jiān)控系統(tǒng)中的端點(diǎn)(API、方法等),可以查看每個(gè)端點(diǎn)的調(diào)用量、成功率、延遲等指標(biāo)。
-
拓?fù)洌═opology):展示系統(tǒng)中各個(gè)服務(wù)之間的調(diào)用關(guān)系和依賴關(guān)系,可以幫助理解系統(tǒng)的架構(gòu)和調(diào)用流程。
-
鏈路追蹤(Trace):查詢和監(jiān)控系統(tǒng)中的請(qǐng)求鏈路,可以查看每個(gè)請(qǐng)求的詳細(xì)信息,包括調(diào)用鏈路、耗時(shí)、異常等。
-
鏈路追蹤分析(Trace Profiling):對(duì)鏈路追蹤數(shù)據(jù)進(jìn)行分析和優(yōu)化,可以查看每個(gè)請(qǐng)求的性能瓶頸、調(diào)用路徑等信息。
-
eBPF Profiling:使用eBPF技術(shù)對(duì)系統(tǒng)進(jìn)行性能分析和優(yōu)化,可以查看系統(tǒng)的運(yùn)行狀態(tài)、資源使用情況等。
-
日志(Log):查詢和監(jiān)控系統(tǒng)的日志信息,可以查看系統(tǒng)的日志記錄、異常信息等。
Topology 鼠標(biāo)放上去即可看到每個(gè)鏈路的耗時(shí)。Trace 可以追蹤每個(gè)節(jié)點(diǎn)的信息和耗時(shí)
還有很多界面,大家自己點(diǎn)點(diǎn),可以監(jiān)控很多有用的信息
微服務(wù)使用,路由追蹤,需要找到自己項(xiàng)目的gateway版本,在optional-plugins的兩個(gè)jar包復(fù)制到plugins里面,在路由追蹤才會(huì)顯示網(wǎng)關(guān)
三、持久化存儲(chǔ)
SkyWalking在默認(rèn)配置下使用了內(nèi)存存儲(chǔ)(Memory Storage),這意味著數(shù)據(jù)存儲(chǔ)在內(nèi)存中,并且在重啟SkyWalking服務(wù)后會(huì)丟失。這種配置適用于開發(fā)和測(cè)試環(huán)境,但不適合生產(chǎn)環(huán)境。
如果您希望在重啟后保留數(shù)據(jù),您可以配置SkyWalking使用持久化存儲(chǔ)(Persistent Storage),例如使用Elasticsearch、MySQL等數(shù)據(jù)庫(kù)作為存儲(chǔ)后端。通過將數(shù)據(jù)存儲(chǔ)在持久化存儲(chǔ)中,即使在重啟SkyWalking服務(wù)后,數(shù)據(jù)也能夠得到保留。
我這邊存儲(chǔ)在Elasticsearch7.10.2,不演示es的下載啟動(dòng),es啟動(dòng)會(huì)有兩個(gè)默認(rèn)端口,
驗(yàn)證es啟動(dòng)成功更改skywalking-apm項(xiàng)目config下的application.yml,更換使用存儲(chǔ)連接方式,如果使用mysql,需要將mysql數(shù)據(jù)庫(kù)驅(qū)動(dòng)包拷貝到 oap-libs 目錄下才可以
重啟下服務(wù)即可
四、告警通知
可以通過修改config文件夾下的alarm-settings.yml文件來配置告警通知。
配置規(guī)則:
- metrics-name:要監(jiān)控的指標(biāo)名稱,可以是系統(tǒng)預(yù)定義的指標(biāo)名稱,也可以是自定義的指標(biāo)名稱。
- op:觸發(fā)告警的條件操作符,可以是>(大于)、>=(大于等于)、<(小于)、<=(小于等于)等。
- threshold:觸發(fā)告警的閾值,當(dāng)指標(biāo)的值滿足條件時(shí),觸發(fā)告警。
- period:觸發(fā)告警的時(shí)間窗口大小,單位為分鐘。在這個(gè)時(shí)間窗口內(nèi),指標(biāo)的值會(huì)被收集和計(jì)算。
- count:觸發(fā)告警的次數(shù)閾值,當(dāng)指標(biāo)的值在時(shí)間窗口內(nèi)連續(xù)超過這個(gè)次數(shù)時(shí),觸發(fā)告警。
- silence-period:告警的靜默期,單位為分鐘。在這個(gè)靜默期內(nèi),如果指標(biāo)的值再次觸發(fā)告警,不會(huì)重復(fù)發(fā)送告警通知。
- message:告警通知的消息內(nèi)容,可以自定義告警通知的文本信息。
自帶配置翻譯:
# 示例告警規(guī)則
rules:
# 服務(wù)響應(yīng)時(shí)間告警規(guī)則
service_resp_time_rule:
metrics-name: service_resp_time
op: ">"
threshold: 1000
period: 10
count: 3
silence-period: 5
message: 服務(wù) {name} 的響應(yīng)時(shí)間在過去的10分鐘內(nèi)超過1000毫秒的次數(shù)達(dá)到3次。
# 服務(wù)SLA告警規(guī)則
service_sla_rule:
metrics-name: service_sla
op: "<"
threshold: 8000
period: 10
count: 2
silence-period: 3
message: 服務(wù) {name} 的成功率在過去的10分鐘內(nèi)低于80%的次數(shù)達(dá)到2次。
# 服務(wù)響應(yīng)時(shí)間百分位數(shù)告警規(guī)則
service_resp_time_percentile_rule:
metrics-name: service_percentile
op: ">"
threshold: 1000,1000,1000,1000,1000
period: 10
count: 3
silence-period: 5
message: 服務(wù) {name} 的百分位數(shù)響應(yīng)時(shí)間在過去的10分鐘內(nèi)超過1000毫秒的次數(shù)達(dá)到3次,其中包括p50 > 1000, p75 > 1000, p90 > 1000, p95 > 1000, p99 > 1000。
# 服務(wù)實(shí)例響應(yīng)時(shí)間告警規(guī)則
service_instance_resp_time_rule:
metrics-name: service_instance_resp_time
op: ">"
threshold: 1000
period: 10
count: 2
silence-period: 5
message: 服務(wù)實(shí)例 {name} 的響應(yīng)時(shí)間在過去的10分鐘內(nèi)超過1000毫秒的次數(shù)達(dá)到2次。
# 數(shù)據(jù)庫(kù)訪問響應(yīng)時(shí)間告警規(guī)則
database_access_resp_time_rule:
metrics-name: database_access_resp_time
threshold: 1000
op: ">"
period: 10
count: 2
message: 數(shù)據(jù)庫(kù)訪問 {name} 的響應(yīng)時(shí)間在過去的10分鐘內(nèi)超過1000毫秒的次數(shù)達(dá)到2次。
# 端點(diǎn)關(guān)系響應(yīng)時(shí)間告警規(guī)則
endpoint_relation_resp_time_rule:
metrics-name: endpoint_relation_resp_time
threshold: 1000
op: ">"
period: 10
count: 2
message: 端點(diǎn)關(guān)系 {name} 的響應(yīng)時(shí)間在過去的10分鐘內(nèi)超過1000毫秒的次數(shù)達(dá)到2次。
webhooks:
# 配置Webhooks的URL,告警的時(shí)候,可以調(diào)用下面的接口去告警
- http://127.0.0.1/notify/
- http://127.0.0.1/go-wechat/
自定義告警接口:
將下面的接口寫在 webhooks下即可。
五、自定義追蹤-細(xì)粒度追蹤service方法
1、引入依賴:
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>${skywalking.version}</version>
</dependency>
${skywalking.version} 和你當(dāng)前使用的SkyWalking版本保持一致
2、注解配置
先在項(xiàng)目中引入依賴,然后再對(duì)應(yīng)的方法上新增上注解。這里我們通過@Tag獲取了name,address,token以及traceId參數(shù)。
@Trace
@Tags({@Tag(key = "name",value = "arg[0]"),
@Tag(key = "token",value = "returnedObj.token"),
@Tag(key = "address",value = "arg[1]"),
@Tag(key = "traceId",value = "returnedObj.traceId")})
public User doSkyWalkingPluginsV2(String name, String address, int id){
CachaUser cachaUser = new CachaUser();
cachaUser.setName(name);
cachaUser.setAddress(address);
cachaUser.setId(id);
String token = TokenUtils.getToken(cachaUser);
User user = new User();
user.setAge("18");
user.setName(name);
user.setToken(token);
user.setTraceId(TraceContext.traceId());
return user;
}
配置完成后,啟動(dòng)服務(wù)。通過postman遠(yuǎn)程調(diào)用服務(wù),在skywalking服務(wù)頁面可以看到,我們trace的doSkyWalkingPluginsV2方法也被收集到了,方法耗時(shí)也能一目了然。
點(diǎn)擊方法查看詳情,name,address,token以及traceId參數(shù)也都全部被統(tǒng)計(jì)收集上來了。文章來源:http://www.zghlxwxcb.cn/news/detail-802088.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-802088.html
到了這里,關(guān)于Skywalking鏈路追蹤的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!