Skywalking 分布式系統(tǒng)的應(yīng)用程序性能監(jiān)視工具

隨著微服務(wù)架構(gòu)的流行,尤其是近年來SpringCloud的廣泛應(yīng)用,一些微服務(wù)架構(gòu)下的問題也比較突出,比如一個(gè)請求會(huì)涉及多個(gè)服務(wù),而服務(wù)本身可能也會(huì)依賴其他服務(wù),整個(gè)請求路徑就構(gòu)成了一個(gè)網(wǎng)狀的調(diào)用鏈,而在整個(gè)調(diào)用鏈中一旦某個(gè)節(jié)點(diǎn)發(fā)生異常,整個(gè)調(diào)用鏈的穩(wěn)定性就會(huì)受到影響,為快速定位解決問題,需要一套可以跟蹤、分析系統(tǒng)性能的工具,即APM(應(yīng)用性能管理)。

目前主流的APM工具有Skywalking、Cat、Zipkin、Pinpoint,本文主要介紹SkyWalking,它是一款優(yōu)秀的國產(chǎn) APM 工具,包括了分布式追蹤、性能指標(biāo)分析、應(yīng)用和服務(wù)依賴分析等。

官方給出的架構(gòu)圖如下


skywalking-arch

SkyWalking 的核心是數(shù)據(jù)分析和度量結(jié)果的存儲(chǔ)平臺(tái),通過 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量數(shù)據(jù),SkyWalking Collecter 對數(shù)據(jù)進(jìn)行分析和聚合,存儲(chǔ)到 Elasticsearch、H2、MySQL、TiDB 等其一即可,最后我們可以通過 SkyWalking UI 的可視化界面對最終的結(jié)果進(jìn)行查看。Skywalking 支持從多個(gè)來源和多種格式收集數(shù)據(jù):多種語言的 Skywalking Agent 、Zipkin v1/v2 、Istio 勘測、Envoy 度量等數(shù)據(jù)格式。

搭建部署

下面簡要介紹Mac下Skywalking的搭建部署

下載

官方地址選擇合適的版本進(jìn)行下載

解壓安裝

解壓后目錄如下
├── agent // 本地代理模塊(探針)
│ ├── activations
│ ├── bootstrap-plugins
│ ├── config
│ ├── logs
│ ├── optional-plugins
│ └── plugins
├── bin // 啟動(dòng)腳本
├── config // 數(shù)據(jù)收集器、存儲(chǔ)、告警等配置
├── licenses
│ └── ui-licenses
├── logs
├── mesh-buffer
├── oap-libs
├── tools
│ └── profile-exporter
├── trace-buffer
└── webapp // 管理后臺(tái)UI工具

不需要修改配置文件,在bin目錄下執(zhí)行startup.sh即可啟動(dòng)服務(wù),成功后可查看到如下嘻嘻

./startup.sh

SkyWalking OAP started successfully!
SkyWalking Web Application started successfully!

然后就可以通過訪問http://localhost:8080/查看SkywalkingUI界面了

skywalking-ui

啟動(dòng)后會(huì)啟動(dòng)兩個(gè)服務(wù)skywalking-webapp和skywalking-collector,其中

  1. skywalking-webapp,管理平臺(tái)頁面,默認(rèn)端口8080(可以在webapp/webapp.yml下修改),用戶名密碼 admin/admin
  2. skywalking-collector,追蹤信息收集器,通過gRPC或者h(yuǎn)ttp收集客戶端信息,gRPC默認(rèn)端口11800,http默認(rèn)端口12800(可以在config/application.yml下修改)

收集器、存儲(chǔ)、可采集信息等配置均可在config/application.yml下修改

Java進(jìn)程使用

  • IDEA中使用,在VM options中增加
-javaagent:/path/to/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=服務(wù)名稱 -Dskywalking.collector.backend_service=127.0.0.1:12800

-javaagent,skywalking-agent.jar的絕對位置
-Dskywalking.agent.service_name,定義在UI中顯示的service名稱(可省略)
-Dskywalking.collector.backend_service,收集服務(wù)器地址(可省略)

  • jar命令啟動(dòng)
    和IDEA使用方式相同

常用配置

可在config/application.yml下調(diào)整修改相關(guān)配置

部署方式

cluster:
  selector: ${SW_CLUSTER:standalone}
  standalone:

個(gè)人電腦可選取standalon,集群部署還支持zookeeper, kubernetes, consul, etcd, nacos等

信息采集協(xié)議配置

core:
  selector: ${SW_CORE:default}
  default:
    # Mixed: Receive agent data, Level 1 aggregate, Level 2 aggregate
    # Receiver: Receive agent data, Level 1 aggregate
    # Aggregator: Level 2 aggregate
    role: ${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator
    restHost: ${SW_CORE_REST_HOST:0.0.0.0}
    restPort: ${SW_CORE_REST_PORT:12800}
    restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/}
    gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}
    gRPCPort: ${SW_CORE_GRPC_PORT:11800}
    gRPCSslEnabled: ${SW_CORE_GRPC_SSL_ENABLED:false}
    gRPCSslKeyPath: ${SW_CORE_GRPC_SSL_KEY_PATH:""}
    gRPCSslCertChainPath: ${SW_CORE_GRPC_SSL_CERT_CHAIN_PATH:""}
    gRPCSslTrustedCAPath: ${SW_CORE_GRPC_SSL_TRUSTED_CA_PATH:""}

restPort、gRPCPort分別設(shè)置http和gRPC協(xié)議的端口,建議使用默認(rèn)值

存儲(chǔ)配置

storage:
  selector: ${SW_STORAGE:h2}
  elasticsearch:
    nameSpace: ${SW_NAMESPACE:""}

默認(rèn)的是H2(不需要任何其他安裝部署),還可以支持ES、mysql等,官方比較推薦ES,也可以增加其他存儲(chǔ)如TiDB等

webapp配置

webapp配置默認(rèn)位置webapp/webapp.yml

server:
  port: 8080

collector:
  path: /graphql
  ribbon:
    ReadTimeout: 10000
    # Point to all backend's restHost:restPort, split by ,
    listOfServers: 127.0.0.1:12800

管理后臺(tái)端口默認(rèn)為8080,使用graphql方式訪問oap的數(shù)據(jù)收集端口,默認(rèn)為12800(rest方式)

agent配置

agent配置默認(rèn)在agent/config/agent.config

# 不同的namespace會(huì)導(dǎo)致調(diào)用鏈路追蹤中斷
agent.namespace=${SW_AGENT_NAMESPACE:hmall}

# 頁面上展示的service的名稱,也可以通過-Dskywalking.agent.service_name=xxx指定
agent.service_name=${SW_AGENT_NAME:gateway}

# 平臺(tái)的調(diào)用地址,也可以通過-Dskywalking.collector.backend_service=127.0.0.1:80指定
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:172.28.51.141:11800}

# 忽略指定后綴的請求收集
agent.ignore_suffix=${SW_AGENT_IGNORE_SUFFIX:.jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg}


# 每3秒的采樣率,負(fù)數(shù)代表100%
agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1}

插件使用

默認(rèn)情況agent是不支持對spring-cloud-gateway的監(jiān)控的,需要插件的支持。我們要將agent/optional-plugins下的插件apm-spring-cloud-gateway-2.x-plugin-7.0.0.jar拷貝到plugins下,使agent可以加載到該插件,其他一些需要額外插件支持的中間件和框架也是同理操作。

參考

Apache Skywalking
SkyWalking 分布式追蹤系統(tǒng)
全鏈路跟蹤skywalking簡介

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容