今天我們就著重講一講如何基于 Skywalking 來快速搭建一套應(yīng)用性能監(jiān)控平臺
一雏婶、Skywaling 介紹
Skywalking是由國內(nèi)開源愛好者吳晟開源并提交到Apache孵化器的開源項目器予, 2017年12月SkyWalking成為Apache國內(nèi)首個個人孵化項目, 2019年4月17日SkyWalking從Apache基金會的孵化器畢業(yè)成為頂級項目狈谊, 目前SkyWalking支持Java、 .Net沟沙、 Node.js河劝、 go、 python等探針矛紫, 數(shù)據(jù)存儲支持MySQL赎瞎、 ElasticSearch等, SkyWalking與Pinpoint相同颊咬, 對業(yè)務(wù)代碼無侵入煎娇, 不過探針采集數(shù)據(jù)粒度相較于Pinpoint來說略粗二庵, 但性能表現(xiàn)優(yōu)秀, 目前SkyWalking增長勢頭強勁缓呛, 社區(qū)活躍催享, 中文文檔齊全, 沒有語言障礙哟绊, 支持多語言探針因妙, 這些都是 SkyWalking的優(yōu)勢所在, 還有就是SkyWalking支持很多框架票髓, 包括很多國產(chǎn)框架攀涵, 例如, Dubbo洽沟、 gRPC以故、 SOFARPC 等等, 同時也有很多開發(fā)者正在不斷向社區(qū)提供更多插件以支持更多組件無縫接入SkyWalking裆操。
官網(wǎng)地址:https://skywalking.apache.org/
二怒详、Skywalking 同類產(chǎn)品比較
1. Skywalking 的特點介紹:
可以實現(xiàn)從前端到后端(多種語言)請求追蹤,指標數(shù)據(jù)采集踪区,日志記錄等多項功能昆烁。
多語言自動探針, 支持Java缎岗、 GO静尼、 Python、 PHP传泊、 NodeJS鼠渺、 LUA、 Rust等客戶端眷细。
內(nèi)置服務(wù)網(wǎng)格可觀察性系冗, 支持從Istio+Envoy Service Mesh收集和分析數(shù)據(jù)。
模塊化架構(gòu)薪鹦, 存儲掌敬、 集群管理、 使用插件集合都可以進行自由選擇池磁。
支持自定義告警配置奔害,目前是通過配置文件的形式。
-
可視化效果豐富地熄,可以自定義多種圖表進行拖拽組合展現(xiàn)华临。
整體架構(gòu)圖大致如下:
image
數(shù)據(jù)通過push/pull方式,從不同的應(yīng)用側(cè)上報到Transport Layer端考,然后經(jīng)過接收層匯聚到聚合服務(wù)降采樣計算雅潭,最終落庫展現(xiàn)揭厚,整個過程可以在單獨的一個 Java 進程中部署,也可以采用分布式架構(gòu)(混合模式)來部署扶供,根據(jù)接入的數(shù)量來選擇筛圆。
簡化架構(gòu)如下:
2. Skywalking 較同類其他產(chǎn)品比較:
參照對比結(jié)果,其實我們不難發(fā)現(xiàn)椿浓,不管是在語言支持的豐富度還是性能上太援,Skywalking都具有一定的優(yōu)勢,并且就國內(nèi)的行業(yè)背景來看扳碍,絕大部分的應(yīng)用都是基于Java開發(fā)的提岔,Skywalking本身OAP服務(wù)就是基于Java開發(fā)的,這一點具有非常天然的優(yōu)勢笋敞。
三碱蒙、IDEA開發(fā)環(huán)境的運行與配置:
1. IDEA 導(dǎo)入 Skywalking 源碼,mvn編譯成功
不要去 github 直接 clone 夯巷,下載地址:https://dlcdn.apache.org/skywalking/9.3.0/apache-skywalking-apm-9.3.0-src.tgz
啟動模塊就是 server-starter OAPServerStartUp 類赛惩,注意配置文件:application.yml 的相關(guān)配置,如果只是運行鞭莽,可以按照默認的配置來直接 main 方法啟動坊秸,如果首次體驗也可以修改 storage 模塊的存儲類型麸祷,修改對應(yīng)的數(shù)據(jù)庫地址就可以澎怒,啟動成功后,會全部自動創(chuàng)建完所有的數(shù)據(jù)庫表
注啟動完成后阶牍,會看到對應(yīng)的數(shù)據(jù)上報端點日志顯示創(chuàng)建成功:
注意配置文件的設(shè)置:
storage:
selector: mysql # the mysql storage will actually be activated, while the h2 storage takes no effect
h2:
properties:
jdbcUrl: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db;DB_CLOSE_DELAY=-1}
dataSource.user: ${SW_STORAGE_H2_USER:sa}
metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
mysql:
properties:
jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest"}
dataSource.user: ${SW_DATA_SOURCE_USER:root}
dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root@1234}
dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}
dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}
dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}
dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}
metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000}
# other configurations
2. 前端編譯:
上述步驟下載的源碼包直接就已經(jīng)包含了前端的源碼喷面,在 skywalking-ui 目錄下,訪問端口:8080
首先安裝依賴包:
// 第一步
npm install
安裝成功后走孽,直接運行:
// 第二步
npm run serve
實際訪問地址:http://localhost:8080
3. 探針安裝:以 Java 探針為例:
Java探針的包結(jié)構(gòu)如下
+-- agent
+-- activations
apm-toolkit-log4j-1.x-activation.jar
apm-toolkit-log4j-2.x-activation.jar
apm-toolkit-logback-1.x-activation.jar
...
+-- config
agent.config
+-- plugins
apm-dubbo-plugin.jar
apm-feign-default-http-9.x.jar
apm-httpClient-4.x-plugin.jar
.....
+-- optional-plugins
apm-gson-2.x-plugin.jar
.....
+-- bootstrap-plugins
jdk-http-plugin.jar
.....
+-- logs
skywalking-agent.jar
- Linux Tomcat 7, Tomcat 8, Tomcat 9 配置:修改配置文件 tomcat/bin/catalina.sh 第一行
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/path/to/skywalking-agent/skywalking-agent.jar"; export CATALINA_OPTS
- Windows Tomcat 7, Tomcat 8, Tomcat 9 配置:修改配置文件 tomcat/bin/catalina.bat 第一行
set "CATALINA_OPTS=-javaagent:/path/to/skywalking-agent/skywalking-agent.jar"
- Jar 文件惧辈,比如 SpringBoot 打成的FatJar 形式,需要啟動時添加啟動參數(shù)
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -jar yourApp.jar
- Jetty 容器磕瓷,修改 jetty.sh 文件盒齿,增加 -javaagent 參數(shù)到啟動命令
export JAVA_OPTIONS="${JAVA_OPTIONS} -javaagent:/path/to/skywalking-agent/skywalking-agent.jar"
四、最終展現(xiàn)效果
非常直觀的鏈路拓撲困食,可以快速定位問題的根源
簡潔的概覽全局頁
五边翁、寫在最后
如果大家有任何關(guān)于Skywalking不管是部署,試用硕盹,甚至生產(chǎn)環(huán)境遇到的各種問題符匾,都可以添加小觀縱的公眾號進入群聊,匯聚行業(yè)大咖一起交流瘩例。