十分鐘三個步驟集成使用SkyWalking
隨著業(yè)務(wù)發(fā)展壯大,微服務(wù)越來越多,調(diào)用鏈路越來越復雜,需要快速建立鏈路跟蹤系統(tǒng),以及建立系統(tǒng)的可觀測性,以便快速了解系統(tǒng)的整體運行情況。此時就非常推薦SkyWalking了,SkyWalking不僅僅是一款鏈路跟蹤工具,還可以作為一個系統(tǒng)監(jiān)控工具,還具有告警功能。使用簡便、上手又快。真可謂快、準、狠。
本文主要介紹如何快速集成使用SkyWalking,從3個方面入手:原理、搭建、使用。
一、原理
1.概括
SkyWalking整體分為4個部分:探針采集層、數(shù)據(jù)傳輸和邏輯處理層、數(shù)據(jù)存儲層、數(shù)據(jù)展示層。
2.探針采集層
所謂探針,實際上是一種動態(tài)代理技術(shù),只不過不是我們常用的Java代理類,而是在類加載時,就生成了增強過的代理類的字節(jié)碼,增強了數(shù)據(jù)攔截和采集上報的功能。
探針技術(shù)是在項目啟動時通過字節(jié)碼技術(shù)(比如JavaAgent、ByteBuddy)進行類加載和替換,生成新的增強過的Class文件,對性能的影響是一次性的。
探針技術(shù),因為在類加載時進行轉(zhuǎn)換,增強了部分功能,所以會增加項目啟動時間,同時也會增加內(nèi)存占用量和線程數(shù)量。但是對性能影響不大,官方介紹在5% ~ 10%之間。
探針層在類轉(zhuǎn)換時,通過各種插件對原有的類進行增強,之后在運行時攔截請求,然后將攔截的數(shù)據(jù)上報給Skywalking服務(wù)端。同時再加上一些定時任務(wù),去采集應(yīng)用服務(wù)器的基礎(chǔ)數(shù)據(jù),比如JVM信息等。
3.數(shù)據(jù)傳輸和邏輯處理層
SkyWalking探針層使用了GRPC作為數(shù)據(jù)傳輸框架,將采集的數(shù)據(jù)上報到SkyWalking服務(wù)端。
SkyWalking服務(wù)端接收數(shù)據(jù)后,利用各種插件來進行數(shù)據(jù)的分析和邏輯處理。比如:JVM相關(guān)插件,主要用于處理上報上來的JVM信息,數(shù)據(jù)庫插件用來分析訪問數(shù)據(jù)庫的信息。然后在將數(shù)據(jù)存入到數(shù)據(jù)存儲層。
4.數(shù)據(jù)存儲層
SkyWalking的數(shù)據(jù)存儲層支持多種主流數(shù)據(jù)庫,可以自行到配置文件里查閱。我推薦使用ElasticSearch,存儲量大,搜索性能又好。
5.數(shù)據(jù)展示層
SkyWalking 通過 Rocketbot 進行頁面UI展示??梢栽陧撁娴淖笊辖强吹竭@個可愛的Rocketbot。
二、搭建
知道了原理,搭建就很輕松了,使用SkyWalking其實就3個步驟:
- 搭建數(shù)據(jù)存儲部件。
- 搭建SkyWalking服務(wù)端。
- 應(yīng)用通過agent探針技術(shù)將數(shù)據(jù)采集上報給SkyWalking服務(wù)端。
1.搭建數(shù)據(jù)存儲部件
SkyWalking支持多種存儲方式,此處推薦采用Elasticsearch作為存儲組件,存儲的數(shù)據(jù)量較大,搜索響應(yīng)快。
快速搭建Elasticsearch:
- 安裝java:yum install java-1.8.0-openjdk-devel.x86_64
- 下載Elasticsearch安裝包:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-17-1
- 修改elasticsearch.yml文件的部分字段:cluster.name,node.name,path.data,path.logs,network.host,http.port,discovery.seed_hosts,cluster.initial_master_nodes。將字段的值改成對應(yīng)的值。
- 在Elasticsearch的bin目錄下執(zhí)行./elasticsearch啟動服務(wù)。
- 訪問http://es-ip:9200,看到如下界面就代表安裝成功。
{
"name": "node-1",
"cluster_name": "my-application",
"cluster_uuid": "GvK7v9HhS4qgCvfvU6lYCQ",
"version": {
"number": "7.17.1",
"build_flavor": "default",
"build_type": "rpm",
"build_hash": "e5acb99f822233d6ad4sdf44ce45a454xxxaasdfas323ab",
"build_date": "2023-02-23T22:20:54.153567231Z",
"build_snapshot": false,
"lucene_version": "8.11.1",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}
2.搭建SkyWalking服務(wù)端
搭建SkyWalking服務(wù)端只需要4步:
(1)下載并解壓skywalking:https://archive.apache.org/dist/skywalking/8.9.0/
(2) 進入到安裝目錄下的修改配置文件:config/apllication.yaml。將存儲修改為elasticsearch。
(3)進入到安裝目錄下的bin目錄,執(zhí)行./startup.sh啟動SkyWalking服務(wù)端。
(4)此時使用jps命令,應(yīng)該可以看到如下2個進程。一個是web頁面進程,一個是接受和處理上報數(shù)據(jù)的進程。如果沒有jps命令,那自行查看下是否配置了Java環(huán)境變量。同時訪問http://ip:8080應(yīng)該可以看到如下界面。
3.應(yīng)用采集上報數(shù)據(jù)
應(yīng)用采集并且上報數(shù)據(jù),直接使用agent探針方式。分為以下3步:
(1)下載解壓agent:https://archive.apache.org/dist/skywalking/java-agent/8.9.0/,找到skywalking-agent.jar
(2)添加啟動參數(shù)
應(yīng)用如果是jar命令啟動,則直接添加啟動參數(shù)即可:
java -javaagent:/自定義path/skywalking-agent.jar -Dskywalking.collector.backend_service={{agentUrl}} -jar xxxxxx.jar
此處的{{agentUrl}}是SkyWalking服務(wù)端安裝的地址,再加上11800端口。比如:10.20.0.55:11800。
應(yīng)用如果是Docker鏡像的部署方式,則需要將skywalking-agent.jar打到鏡像里,類似下圖:
(3)啟動項目后,即可看到監(jiān)控數(shù)據(jù),如下圖:
三、UI頁面使用
原理和搭建已經(jīng)介紹完畢,接下來快速介紹UI頁面的功能。下圖標紅的部分是重點關(guān)注區(qū)域:
1.儀表盤
- APM:以全局(Global)、服務(wù)(Service)、服務(wù)實例(Instance)、端點(Endpoint)的維度展示各項指標。
- Database:展示數(shù)據(jù)庫的各項指標。
- 服務(wù)(Service):某個微服務(wù),或者某個應(yīng)用。
- 服務(wù)實例(Instance):某個微服務(wù)或者某個應(yīng)用集群的一臺實例或者一臺負載。
- 端點(Endpoint):某個Http請求的接口,或者 某個接口名+方法名。
2.拓撲圖
3.追蹤
總結(jié)
本文主要從3個方面入手:原理、搭建、使用,介紹如何快速集成使用SkyWalking。核心重點:
- SkyWalking其實就4部分組成:探針采集上報、數(shù)據(jù)分析和邏輯處理、數(shù)據(jù)存儲、數(shù)據(jù)展示。安裝使用簡單、易上手。
- 探針技術(shù)是SkyWalking的基石,說白了就是:在類加載時進行字節(jié)碼轉(zhuǎn)換增強,然后去攔截請求,采集上報數(shù)據(jù)。
- UI頁面的使用,多用用就熟悉了。