源代碼地址
skywalking是一款很優(yōu)秀的監(jiān)控系統(tǒng),采用代理方式基于切面編程來攔截請求進行監(jiān)控數(shù)據(jù)記錄恩敌,架構采用CS模式
server端構建過程
此文不做原理解析,只講大概入門思路海洼,server里面同時也包含了后端管理和監(jiān)控UI頁面竖慧,基于spring boot開發(fā),項目名稱是apm-webapp
工具
工欲善其事必先利其器座每,因此在構建之前需要說明一些需要的工具:
JDK 11:官方提倡
Maven3 >3.6
Git
npm
nodejs >12.0.0
IDEA
下載源代碼
git clone --recurse-submodules https://github.com/apache/skywalking.git
cd skywalking/
./mvnw clean package -DskipTests
或
git clone https://github.com/apache/skywalking.git
cd skywalking/
git submodule init
git submodule update
打開IDEA Terminal執(zhí)行Maven編譯命令,編譯前profiles需要勾選backend,windows:
./mvnw compile -Dmaven.test.skip=true
執(zhí)行完成之后摘悴,會生成許多源碼文件峭梳,因此我們需要將文件所在目錄設置為源碼目錄,便于IDEA在編譯時進行識別蹂喻。
設置源碼目錄
分別將下邊8個目錄設置為源碼目錄:
grpc-java and java folders in apm-protocol/apm-network/target/generated-sources/protobuf
grpc-java and java folders in oap-server/server-core/target/generated-sources/protobuf
grpc-java and java folders in oap-server/server-receiver-plugin/receiver-proto/target/generated-sources/fbs
grpc-java and java folders in oap-server/server-receiver-plugin/receiver-proto/target/generated-sources/protobuf
grpc-java and java folders in oap-server/exporter/target/generated-sources/protobuf
grpc-java and java folders in oap-server/server-configuration/grpc-configuration-sync/target/generated-sources/protobuf
grpc-java and java folders in oap-server/server-alarm-plugin/target/generated-sources/protobuf
antlr4 folder in oap-server/oal-grammar/target/generated-sources
設置方法如下(以apm-protocol/apm-network/target/generated-sources/protobuf為例):
在IDEA上找到該目錄-->右鍵-->Mark Directory as-->Generated Source Root
設置后對應目錄編程藍色葱椭,則表明設置成功。
注意:
- 目前2023/7/23 的版本master最新的構建不過口四,只好checkout到8.8.x
- receive-proto項目依賴的flatbuffers-compiler在阿里云鏡像找不到孵运,需要將版本從1.12.0.1修改為2.0.8,執(zhí)行完成再改回去執(zhí)行一次編譯就可以了窃祝!后來發(fā)現(xiàn)原因是沒有勾選windows掐松。
- npm執(zhí)行報錯需要通過命令安裝依賴或者升級npm到12以上 npm i polyfill-object.fromentries,主要原因是apm-webapp pom文件使用的node版本太老需要修改為最新的20.5.0
編譯源代碼
分別對skywalking和skywalking-java進行編譯踱侣,skywalking-java編譯后會在skywalking-agent目錄生成skywalking-agent.jar粪小,后面我們會用到
./mvnw clean package -DskipTests
啟動OAP Server
運行OAP-server的org.apache.skywalking.oap.server.starter.OAPServerStartUp的#main(args)方法,啟動SkyWalking OAP Server,由于構建比較耗時抡句,啟動需要勾選啟動前不構建探膊。
- 運行過程中報graphsql 初始化MetaDataQuery.getAllService報錯No TypeDefinition for type name Service,經(jīng)歷調(diào)試發(fā)現(xiàn)是生成的jar包query-graphql-plugin里面query-protocol目錄下的metadata.graphqls存在問題待榔,重新新install server-query-plugin項目后正常運行逞壁。
啟動SkyWalking UI
運行 apm-webapp 的 org.apache.skywalking.apm.webapp.ApplicationStartUp 的 #main(args) 方法流济,啟動 SkyWalking UI,由于構建比較耗時腌闯,啟動需要勾選啟動前不構建绳瘟。
瀏覽器打開 http://127.0.0.1:8080
演示項目
從https://github.com/SkyAPMTest/skywalking-live-demo 下載演示項目
> git clone https://github.com/SkywalkingTest/skywalking-live-demo.git
> cd skywalking-live-demo
> mvn clean package # build the live demo archive
演示項目基于Spring Boot搭建,ProjectA調(diào)用ProjectB,ProjectC,ProjectD姿骏,首先通過
啟動參數(shù)設置
-javaagent:/xxx/skywalking-java/skywalking-agent/skywalking-agent.jar
-Dskywalking.collector.grpc_channel_check_interval=2
-Dskywalking.collector.app_and_service_register_check_interval=2
-Dcollector.discovery_check_interval=2
-Dskywalking.collector.backend_service=localhost:11800
-Dskywalking.agent.service_name=business-zone::projectA
-Dskywalking.logging.level=info
-Dskywalking.plugin.toolkit.log.grpc.reporter.server_host=localhost
-Dskywalking.plugin.toolkit.log.grpc.reporter.server_port=11800
-Dskywalking.plugin.toolkit.log.grpc.reporter.max_message_size=10485760
-Dskywalking.plugin.toolkit.log.grpc.reporter.upstream_timeout=30
然后通過下面的方法啟動ProjectA
test.skywalking.springcloud.test.projecta.ProjectA#main
啟動后
瀏覽器打開 http://localhost/projectA/test