测试使用skywalking_skywalking初体验
skywalking簡介
官網的簡介如上(讓人遺憾的是中國人開發的軟件居然沒有中文文檔),實現的功能挺多,間接說明了在鏈路追蹤功能的基礎上可以做很多事情。這次體驗主要是驗證鏈路追蹤的功能。
skywalking快速部署
skywalking的部署非常方便,我們以默認的配置為例,底層用了本地的h2存儲。首先下載最新的tar包,wget https://mirror.bit.edu.cn/apache/skywalking/8.1.0/apache-skywalking-apm-8.1.0.tar.gz,解壓之后執行./bin/startup.sh就啟動完成了??梢灾苯油ㄟ^http://host:8080訪問dashboard,如下圖所示:服務接入skywalking
1?服務啟動指定skywalking的javaagent,這里通過java探針實現了非侵入性
我們以spring boot項目為例,打包成jar,啟動命令如下:
java \
-javaagent:xxx/apache-skywalking-apm-bin/agent/skywalking-agent.jar \
-Dskywalking_config=./agent.config \
-jar ./target/sky-demo-1.0-SNAPSHOT.jar?
其中agent.config配置文件如下:
# 設置為應用名稱agent.service_name=skydemo# 設置為OAP地址collector.backend_service=yourhost:11800引用agent注意的問題:
-?agent目錄下包含了plugin等相關插件,實際運行用到了這些插件,不能單獨只指定skywalking-agent.jar
-?skywalking-agent.jar的版本必須與skywalking服務端保持一致,避免不必要的兼容性問題
2 測試服務間的調用關系
在springboot服務中通過okhttp調用另外的服務,測試驗證服務間的調用關系
3?測試服務調用存儲系統
這里測試驗證以調用redis和mysql為例
4 系統中打印traceid
在日志中打印traceId有助于定位問題,根據traceid可以在skywalking dashboard上查詢到具體的調用鏈路。skywalking提供了sdk可以輕松實現,如下:log.info("{}", TraceContext.traceId());5 golang語言接入
無疑,skywalking配合javaagent做無侵入性的接入,對業務來說接入成本非常低。如果業務是用其他語言如golang/c++實現的,則接入成本會相對較高,必須通過api封裝接入協議,跟我們當前實現的思路類似。這里以golang為例,使用了現成的sdk:github.com/SkyAPM/go2sky,該module實現了http服務的skywalking接入。具體demo可以參考/test/e2e/example-server/main.go如上所示,我們實現了一個包含spring boot,golang服務,redis、mysql的調用關系,skywalking做了調用關系拓撲圖的展示,這對于業務梳理調用關系和系統瓶頸大有幫助。
skywalking體驗總結
(1)部署方便。從demo角度看幾乎零門檻,線上的話主要考慮存儲方面的部署和維護,比如es。
(2)無侵入性接入。由于本人并不擅長java技術棧,部署和驗證過程費了一些周折,如果是搞java的同學接入的話基本是分分鐘的事情。
(3)擴展性好。目前skywalking已經支持多種插件的探針實現,參考:https://github.com/apache/skywalking/blob/v6.6.0/docs/en/setup/service-agent/java-agent/Supported-list.md。我們甚至可以根據自己的情況添加相應的插件,而這對于業務側是無感知的。這種插件的方式具有極強的擴展性,同時可以集各路開發的力量完善整個社區。
(4)功能強大。實際上通過搜集鏈路信息本身就可以實現很多強大的功能,舉個例子我們可以根據SQL語句去分析慢查詢,可以對接口的質量進行告警,可以通過拓撲關系判斷鏈路的瓶頸等。
現有系統接入skywalking的可行性
我們現有的技術棧是Java+ServiceMesh(golang),并且現在已經有一套鏈路追蹤系統。首先業務側的java服務可以無侵入性地指定javaagent進行skywalking的接入,但是service mesh也必須進行改造,升級為支持skywalking的實現(螞蟻金服的mosn即實現了skywalking的上報),但這里帶來了兼容性問題,即mesh還需要兼容老的未升級的鏈路協議的支持,實現上比較復雜性。
另外一個問題是java服務接入也不是完全無侵入,因為現有系統日志中打印了traceId,而接入skywalking則相應的日志中的traceid要做修改。雖然改動不大,但系統的改造和過渡期會帶來各種問題。
總結
通過本次測試體驗,本人非??春胹kywalking,如果是java技術棧,如果沒有歷史遺留問題,強烈建議將skywalking引入到業務系統中。
總結
以上是生活随笔為你收集整理的测试使用skywalking_skywalking初体验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rap技术原理_「水深坑多」做分子海绵,
- 下一篇: delphi 调 web api_小程序