如何評價SkyWalking?
SkyWalking最近發展的不錯,也加入了Apache孵化器。不知道和點評Cat相比如何,包括功能、效能等方面?
持續關注我,讓你瞭解更多。
1。 SkyWalking是什麼?
skywalking 是一個
國產
開源框架,2015年由個人
吳晟
(華為開發者)開源 , 2017年加入Apache孵化器,skywalking是分散式系統的
應用程式效能監視工具
,專為微服務、雲原生架構和基於容器(Docker、K8s、Mesos)架構而設計。SkyWalking 是
觀察性分析平臺和應用效能管理系統
。提供
分散式追蹤、服務網格遙測分析、度量聚合和視覺化一體化
解決方案
官網:Apache SkyWalking
下載:Downloads
Github:
https://
github。com/apache/skywa
lking
文件:Welcome
1。2 鏈路追蹤框架對比
1。Zipkin是Twitter開源的呼叫鏈分析工具,目前基於springcloud sleuth得到了廣泛的使用,特點是輕量,使用部署簡單。
2。Pinpoint是韓國人開源的基於位元組碼注入的呼叫鏈分析,以及應用監控分析工具,特點是支援多種外掛,UI功能強大,接入端無程式碼侵入。
3。SkyWalking是本土開源的基於位元組碼注入的呼叫鏈分析,以及應用監控分析工具,特點是支援多種外掛,UI功能較強,接入端無程式碼侵入。目前已成為apache頂級專案
4。CAT是大眾點評開源的基於編碼和配置的呼叫鏈分析,應用監控分析,日誌採集,監控報警等一系列的監控平臺工具。
專案
Cat
Zipkin
SkyWalking
呼叫鏈視覺化
有
有
有
聚合報表
非常豐富
少
較豐富
服務依賴圖
簡單
簡單
好
埋點方式
侵入式
侵入式
非侵入,位元組碼增強
VM監控指標
好
無
有
支援語言
java/。net
豐富
java/。net/Nodejs/php/go
儲存機制
mysql(報表),本地檔案/HDFS(呼叫鏈)
記憶體,es,mysql等
H2,es
社群支援
主要國內
國外主流
Apache支援
使用案例
美團,攜程,陸金所
京東,阿里定製後不開源
華為,小米,噹噹,微眾銀行
APM
是
否
是
是否支援webflux
否
是
是
1。3 Skywalking主要功能特性
多種監控手段,可以透過語言探針和service mesh獲得監控的資料
支援多種語言自動探針,包括Java,。NET Core 和 Node。js
輕量高效,無需大資料平臺和大量伺服器資源
模組化,UI,儲存,叢集管理都有多種機制可選
支援告警
優秀的視覺化解決方案
2。SkyWalking環境搭建
下載:
https://www。
apache。org/dyn/closer。c
gi/skywalking/8。9。1/apache-skywalking-apm-8。9。1。tar。gz
下載探針:
https://www。
apache。org/dyn/closer。c
gi/skywalking/java-agent/8。8。0/apache-skywalking-java-agent-8。8。0。tgz
windows雙擊apache-skywalking-apm-bin\bin下startup。bat啟動,linux執行startup。sh
3。 微服務接入SkyWalking
3。1 windows環境接入SkyWalking
# skywalking-agent。jar的本地磁碟路徑
-javaagent:D:\SkyWalking\skywalking-agent\skywalking-agent。jar
# 在skywalking上顯示的服務名
-DSW_AGENT_NAME=springboot-skywalking-demo
# skywalking的collector服務的IP及埠
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=localhost:11800
# -DSW_AGENT_COLLECTOR_BACKEND_SERVICES 可以指定遠端地址,但javaagent必須指定本機物理路徑的skywalking-agent。jar
注意:skywalking預設不支援gateway需要到 skywalking-agent\optional-plugins 資料夾下將 apm-spring-cloud-gateway-3.x-plugin-8.8.0.jar 複製到 skywalking-agent\plugins 資料夾後,重啟服務
3。2 linux環境接入SkyWalking
java -javaagent:/usr/loacl/soft/skywalking-agent/skywalking-agent。jar
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=localhost:11800
-DSW_AGENT_NAME=springboot-skywalking-demo
-jar springboot-skywalking-demo-0。0。1-SNAPSHOT。jar
3。3 多個微服務接入SkyWalking
只需要每個微服務設定執行引數
4。SkyWalking UI介紹
service服務維度
- Service Apdex (數字) :當前服務的評分
- Service Apdex (折線圖):不同時間的Apdex評分
- Service Avg Response Times:平均響應延時,單位ms
- Service Response Time Percentile:百分比響應延時
- Successful Rate (數字):請求成功率
- Successful Rate (折線圖):不同時間的請求成功率
- Service Load (數字):每分鐘請求數
- Service Load (折線圖):不同時間的每分鐘請求數
- Service Instances Load :每個服務例項的每分鐘請求數
- Show Service Instance:每個服務例項的最大延時
- Service Instance Successful Rate :每個服務例項的請求成功率
5。SkyWalking基於mysql持久化資料
config/application。yml
storage:
selector: ${SW_STORAGE:mysql} #預設使用的H2資料庫儲存,將h2改為mysql
mysql: #修改mysql連線 IP埠號,資料庫
properties:
jdbcUrl: ${SW_JDBC_URL:“jdbc:mysql://localhost:3306/swtest?rewriteBatchedStatements=true”}
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}
skywalking預設沒有mysql驅動,下載好mysql驅動放入 apache-skywalking-apm-bin/oap-libs 資料夾後,重啟服務
6。 自定義鏈路追蹤
如需要對業務中的方法,實現鏈路追蹤,可以按照下面步驟實現
<!—— SkyWalking 工具類 ——>
<!—— skywalking。version 為版本號,需和服務版本保持一致 ——>
//在業務方法上加入@Trace註解即可
@Override
@Trace
@Tags(@Tag(key=“selectAppHistoryVersionList”,value=“arg[0]”), //記錄引數,value=arg[0],0為引數下標,key=方法名
@Tag(key=“selectAppHistoryVersionList”,value=“returnObj”)) //記錄返回值 value=returnObj,key=方法名
public List
{
return appHistoryVersionMapper。selectAppHistoryVersionList(appHistoryVersion);
}
//返回物件需在實體類加入toString,否則返回物件的記憶體地址
7。告警
自定義傳送郵件:
SkyWalking的告警訊息會透過 HTTP 請求進行傳送,請求方法為 `POST`,`Content-Type` 為 `application/json`,其JSON 資料實基於`List json資料欄位說明: - scopeId、scope:所有可用的 Scope - name:目標 Scope 的實體名稱 - id0:Scope 實體的 ID - id1:保留欄位,目前暫未使用 - ruleName:告警規則名稱 - alarmMessage:告警訊息內容 - startTime:告警時間,格式為時間戳 定義一個介面接收skywalking告警通知 @RequestMapping(“/alarm”) public class AlarmController { private final JavaMailSender sender; /** * 接收skywalking服務的告警通知併發送至郵箱 */ @PostMapping(“/receive”) public void receive(@RequestBody List SimpleMailMessage message = new SimpleMailMessage(); // 傳送者郵箱 message。setFrom(“郵箱”); // 接收者郵箱 message。setTo(“郵箱”); // 主題 message。setSubject(“告警郵件”); String content = getContent(alarmList); // 郵件內容 message。setText(content); sender。send(message); } private String getContent(List StringBuilder sb = new StringBuilder(); for (AlarmDTO dto : alarmList) { sb。append(“scopeId: ”)。append(dto。getScopeId()) 。append(“\nscope: ”)。append(dto。getScope()) 。append(“\n目標 Scope 的實體名稱: ”)。append(dto。getName()) 。append(“\nScope 實體的 ID: ”)。append(dto。getId0()) 。append(“\nid1: ”)。append(dto。getId1()) 。append(“\n告警規則名稱: ”)。append(dto。getRuleName()) 。append(“\n告警訊息內容: ”)。append(dto。getAlarmMessage()) 。append(“\n告警時間: ”)。append(dto。getStartTime()); } return sb。toString(); } } 將介面配置到 config/alarm-settings。yml 網路鉤子,告警觸發介面 webhooks: - http://127。0。0。1:8888/alarm/receive # 介面訪問地址