0%

SkyWalking

簡介

SkyWalking:一個開源的可觀察性平臺,用于收集,分析,聚合和可視化來自服務和云本機基礎結構的數據。SkyWalking提供了一種簡便的方法來維護您的分布式系統的清晰視圖,即使在整個云中也是如此。它是一種現代APM,專門為基于云的基于容器的分布式系統而設計。

網址:https://github.com/apache/skywalking

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

架構主要分幾部分:

skywalking-collector:鏈路數據歸集器

skywalking-ui:web可視化平臺,用來展示落地的數據

skywalking-agent:探針,用來收集和發送數據到歸集器

storage:存儲,一般選擇elasticsearch

系統環境

  • Java:1.8
  • Elasticsearch:6.8.13
  • SkyWalking:8.3.0
  • 操作系統:centos7
  • IP:192.168.43.87

安裝java和Elasticsearch6

網址:點擊

SkyWalking

網址:https://skywalking.apache.org/downloads/

SkyWalking分不同存儲版本,本文以ES6為例,

1
2
3
4
5
6
7
cd /data

wget https://www.apache.org/dyn/closer.cgi/skywalking/8.3.0/apache-skywalking-apm-8.3.0.tar.gz

tar -zxvf apache-skywalking-apm-8.3.0.tar.gz

mv apache-skywalking-apm-bin apache-skywalking

如圖:

agent:agent探針模塊

bin:collector和web的啟動腳本

config:collector模塊配置目錄

oap-libs:依賴

webapp: web項目

創建用戶:

1
2
3
4
5
6
7
8
#創建用戶
useradd skywalking

#創建組
groupadd skywalking

#將用戶添加到組
useradd skywalking -g skywalking

賦予權限:

1
chown -R skywalking:skywalking /data/apache-skywalking/
SkyWalking OAP(skywalking-collector)

修改 OAP 配置文件 config/application.yml:

1
2
3
4
5
cd /data/apache-skywalking/config/

cp application.yml application.yml_bak

vi application.yml

配置文件中默認選擇的是H2數據源,切換成elasticsearch,

如下:

1
2
3
4
5
6
7
8
...
storage:
selector: ${SW_STORAGE:elasticsearch}
elasticsearch:
nameSpace: ${SW_NAMESPACE:"skywalking"}
#ip,請根據實際情況修改
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.43.87:9200}
...

如圖:

啟動OAP服務:

1
2
3
su - skywalking

sh /data/apache-skywalking/bin/oapService.sh

日志輸出以下信息,證明啟動成功:

1
SkyWalking OAP started successfully!

防火墻配置,以 firewalld 為例,開放 12800 、 11800端口:

1
2
3
4
5
6
7
8
9
systemctl status firewalld.service

firewall-cmd --state

firewall-cmd --zone=public --add-port=12800/tcp --permanent

firewall-cmd --zone=public --add-port=11800/tcp --permanent

systemctl reload firewalld
SkyWalking web

修改webapp/webapp.yml,將8080端口改為18080,

1
2
3
cp /data/apache-skywalking/webapp/webapp.yml /data/apache-skywalking/webapp/webapp.yml_bak

vi /data/apache-skywalking/webapp/webapp.yml

內容如下:

1
2
3
4
5
6
7
8
9
server:
port: 18080

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

保存后退出。

啟動web服務:

1
2
3
su - skywalking

sh /data/apache-skywalking/bin/webappService.sh

日志輸出以下信息,證明啟動成功:

1
SkyWalking Web Application started successfully!

防火墻配置,以 firewalld 為例,開放 18080 端口:

1
2
3
4
5
6
7
systemctl status firewalld.service

firewall-cmd --state

firewall-cmd --zone=public --add-port=18080/tcp --permanent

systemctl reload firewalld

訪問網站:http://ip:18080

1
curl http://192.168.43.87:18080

如圖:

SkyWalking agent

agent的使用需要將/agent整個目錄拷貝到對應需要監控的服務器上,并修改/agent/config下的agent.config配置,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 不同的namespace會導致調用鏈路追蹤中斷
agent.namespace=${SW_AGENT_NAMESPACE:skAgent}

# 頁面上展示的service的名稱(配置項目名稱-服務名稱),也可以通過-Dskywalking.agent.service_name=xxx指定
agent.service_name=${SW_AGENT_NAME:appName1}

# 采集信息的服務地址,也可以通過-Dskywalking.collector.backend_service=127.0.0.1:80指定
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.43.87:11800}

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


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

保存后退出。

agent.sample_n_per_3_secs配置說明:

在訪問量較少時,鏈路全量收集不會對系統帶來太大負擔,能夠完整的觀測到系統的運行狀況。但是在訪問量較大時,全量的鏈路收集,對鏈路收集的客戶端(agent探針)、服務端(SkyWalking OAP)、存儲器(例如說 Elastcsearch)都會帶來較大的性能開銷,甚至會影響應用的正常運行。在訪問量級較大的情況下,往往會選擇抽樣采樣,只收集部分鏈路信息。SkyWalking Agent 在 agent/config/agent.config 配置文件中,定義了 agent.sample_n_per_3_secs 配置項,設置每 3 秒可收集的鏈路數據的數量。

調用方式請查看:

https://github.com/apache/skywalking/blob/5.x/docs/cn/Deploy-skywalking-agent-CN.md

JAR file啟動項目時,配置 JVM 參數,加入配置 agent 的相關參數,命令行如下:

1
java -javaagent:/data/apache-skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=appName1 -Dskywalking.collector.backend_service=192.168.43.87:11800 -jar xxxx.jar

idea開發時,以windows環境為例,配置如下:
選擇XXXApplication.java(如:EurekaServerApplication.java),右擊選中 More Run/Debug -> Modify Run Configuration,在VM options,輸入:

1
2
3
-javaagent:D:/java/other/agent/skywalking-agent.jar
-Dskywalking.agent.service_name=agentName1
-Dskywalking.collector.backend_service=192.168.0.108:11800

如圖:

layicr 微信支付

微信支付

layicr 支付寶

支付寶