SkyWalking 源碼的整體結構如下圖所示:
1、apm-application-toolkit 模塊:SkyWalking 提供給用戶調用的工具箱。
該模塊提供了對 log4j、log4j2、logback 等常見日志框架的接入接口,提供了 @Trace 注解等。
apm-application-toolkit 模塊類似於暴露 API 定義,對應的處理邏輯在 apm-sniffer/apm-toolkit-activation 模塊中實現。
2、apm-commons 模塊:SkyWalking 的公共組件和工具類。
其中包含兩個子模塊,apm-datacarrier 模塊提供了一個生產者-消費者模式的緩存組件(DataCarrier),無論是在 Agent 端還是 OAP 端都依賴該組件。
apm-util 模塊則提供了一些常用的工具類,例如,字符串處理工具類(StringUtil)、占位符處理的工具類(PropertyPlaceholderHelper、PlaceholderConfigurerSupport)等等。
3、apm-protocol 模塊:該模塊中只有一個 apm-network 模塊,我們需要關注的是其中定義的 .proto 文件,定義 Agent 與后端 OAP 使用 gRPC 交互時的協議。
4、apm-sniffer 模塊:apm-sniffer 模塊中有 4 個子模塊:
apm-agent 模塊:其中包含了剛才使用的 SkyWalkingAgent 這個類,是整個 Agent 的入口。
apm-agent-core 模塊:SkyWalking Agent 的核心實現都在該模塊中。
apm-sdk-plugin 模塊:SkyWalking Agent 使用了微內核+插件的架構,該模塊下包含了 SkyWalking Agent 的全部插件,
apm-toolkit-activation 模塊:apm-application-toolkit 模塊的具體實現。
5、apm-webapp 模塊:SkyWalking Rocketbot 對應的后端。
6、oap-server 模塊:SkyWalking OAP 的全部實現都在 oap-server 模塊,其中包含了多個子模塊,
exporter 模塊:負責導出數據。
server-alarm-plugin 模塊:負責實現 SkyWalking 的告警功能。
server-cluster-pulgin 模塊:負責 OAP 的集群信息管理,其中提供了接入多種第三方組件的相關插件,
server-configuration 模塊:負責管理 OAP 的配置信息,也提供了接入多種配置管理組件的相關插件,
server-core模塊:SkyWalking OAP 的核心實現都在該模塊中。
server-library 模塊:OAP 以及 OAP 各個插件依賴的公共模塊,其中提供了雙隊列 Buffer、請求遠端的 Client 等工具類,這些模塊都是對立於 SkyWalking OAP 體系之外的類庫,我們可以直接拿走使用。
server-query-plugin 模塊:SkyWalking Rocketbot 發送的請求首先由該模塊接收處理,目前該模塊只支持 GraphQL 查詢。
server-receiver-plugin 模塊:SkyWalking Agent 發送來的 Metrics、Trace 以及 Register 等寫入請求都是首先由該模塊接收處理的,不僅如此,該模塊還提供了多種接收其他格式寫入請求的插件,
server-starter 模塊:OAP 服務啟動的入口。
server-storage-plugin 模塊:OAP 服務底層可以使用多種存儲來保存 Metrics 數據以及Trace 數據,該模塊中包含了接入相關存儲的插件,
7、skywalking-ui 目錄:SkyWalking Rocketbot 的前端。