您當前的位置:首頁 > 攝影

如何評價SkyWalking?

作者:由 Lemon 的技術時空 發表于 攝影時間:2022-06-06

如何評價SkyWalking?Lemon 的技術時空2022-06-06 02:15:29

SkyWalking最近發展的不錯,也加入了Apache孵化器。不知道和點評Cat相比如何,包括功能、效能等方面?

如何評價SkyWalking?2021-07-29 01:54:27

持續關注我,讓你瞭解更多。

如何評價SkyWalking?2022-01-21 16:44:52

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?

# 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 為版本號,需和服務版本保持一致 ——>

org。apache。skywalking

apm-tookit-trace

${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 selectAppHistoryVersionList(AppHistoryVersion appHistoryVersion)

{

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 alarmList) {

SimpleMailMessage message = new SimpleMailMessage();

// 傳送者郵箱

message。setFrom(“郵箱”);

// 接收者郵箱

message。setTo(“郵箱”);

// 主題

message。setSubject(“告警郵件”);

String content = getContent(alarmList);

// 郵件內容

message。setText(content);

sender。send(message);

}

private String getContent(List alarmList) {

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 # 介面訪問地址

如何評價SkyWalking?2021-06-24 22:46:32

標簽: SkyWalking  append  告警  agent