隨著微服務(wù)架構(gòu)的流行,尤其是近年來(lái)SpringCloud的廣泛應(yīng)用升略,一些微服務(wù)架構(gòu)下的問(wèn)題也比較突出衷蜓,比如一個(gè)請(qǐng)求會(huì)涉及多個(gè)服務(wù),而服務(wù)本身可能也會(huì)依賴其他服務(wù)判呕,整個(gè)請(qǐng)求路徑就構(gòu)成了一個(gè)網(wǎng)狀的調(diào)用鏈倦踢,而在整個(gè)調(diào)用鏈中一旦某個(gè)節(jié)點(diǎn)發(fā)生異常送滞,整個(gè)調(diào)用鏈的穩(wěn)定性就會(huì)受到影響,為快速定位解決問(wèn)題辱挥,需要一套可以跟蹤犁嗅、分析系統(tǒng)性能的工具,即APM(應(yīng)用性能管理)晤碘。
目前主流的APM工具有Skywalking褂微、Cat、Zipkin园爷、Pinpoint宠蚂,本文主要介紹SkyWalking,它是一款優(yōu)秀的國(guó)產(chǎn) APM 工具童社,包括了分布式追蹤肥矢、性能指標(biāo)分析、應(yīng)用和服務(wù)依賴分析等叠洗。
官方給出的架構(gòu)圖如下
SkyWalking 的核心是數(shù)據(jù)分析和度量結(jié)果的存儲(chǔ)平臺(tái)甘改,通過(guò) HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量數(shù)據(jù),SkyWalking Collecter 對(duì)數(shù)據(jù)進(jìn)行分析和聚合灭抑,存儲(chǔ)到 Elasticsearch十艾、H2、MySQL腾节、TiDB 等其一即可忘嫉,最后我們可以通過(guò) SkyWalking UI 的可視化界面對(duì)最終的結(jié)果進(jìn)行查看。Skywalking 支持從多個(gè)來(lái)源和多種格式收集數(shù)據(jù):多種語(yǔ)言的 Skywalking Agent 案腺、Zipkin v1/v2 庆冕、Istio 勘測(cè)、Envoy 度量等數(shù)據(jù)格式。
搭建部署
下面簡(jiǎn)要介紹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!
然后就可以通過(guò)訪問(wèn)http://localhost:8080/查看SkywalkingUI界面了
啟動(dòng)后會(huì)啟動(dòng)兩個(gè)服務(wù)skywalking-webapp和skywalking-collector,其中
- skywalking-webapp,管理平臺(tái)頁(yè)面,默認(rèn)端口8080(可以在webapp/webapp.yml下修改)响巢,用戶名密碼 admin/admin
- skywalking-collector,追蹤信息收集器棒妨,通過(guò)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的絕對(duì)位置
-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方式訪問(wèn)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}
# 頁(yè)面上展示的service的名稱弥咪,也可以通過(guò)-Dskywalking.agent.service_name=xxx指定
agent.service_name=${SW_AGENT_NAME:gateway}
# 平臺(tái)的調(diào)用地址过蹂,也可以通過(guò)-Dskywalking.collector.backend_service=127.0.0.1:80指定
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:172.28.51.141:11800}
# 忽略指定后綴的請(qǐng)求收集
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是不支持對(duì)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簡(jiǎn)介