随着近幾年微服務的流行,各種業務的互相調用越來越頻繁,對業務性能優化和故障診斷也會顯的更加複雜。skywalking監控主要用于使用者請求鍊路和路徑的監控(拓撲圖),能追蹤到調用鍊路各個環節是否正常(錯誤的原因)和耗時(DB查詢、緩存查詢等等),能快速定位程式的bug或者慢的原因,主要用于業務層面性性能優化和故障診斷。另外skywalking接入無需修改程式代碼,不需要開發的介入運維自己就可以部署,用戶端可以通過<group name>::<logic name>方式做好項目的分組,然後通過Python程式實作不同的項目告警通過郵件或者微信推送給不同的項目負責人,通過skywaling告警功實作能有問題及時發現、及時解決。

一、Nacos叢集的部署
Skywalking叢集的動态配置主要支援zookeeper、consul、etcd和nacos,我們采用nacos,先安裝軟體包,然後編輯配置檔案,3台nacos叢集伺服器的配置一樣。
Nacos官方文檔:https://nacos.io/zh-cn/docs/what-is-nacos.html
編輯cluster.conf配置檔案,添加叢集的節點。
[root@sw01 conf]# cat cluster.conf
ip1:8848
ip2:8848
ip3:8848
編輯application.properties配置檔案,指定mysql資料存儲。
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://x.x.x.x:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=xxxxxx
建立資料庫給資料庫授權限,并啟動nacos服務。
#建立資料庫nacos_config 并導入源sql資料檔案nacos-mysql.sql
grant all privileges on nacos_config.* to nacos@'%' identified by 'xxxxxx';
systemctl start nacos
在每個伺服器節點登入nacos背景檢視叢集是否正常。
二、Skywalking 叢集+動态配置部署
首先到官網下載下傳skywalking軟體包然後解壓,編輯skywalking配置檔案application.yml,其它配置一樣,隻需要修改gRPCHost位址為sw伺服器的IP位址。
#sw叢集配置,這裡的x.x.x.x為nacos虛位址,可以通過nginx為nacos叢集做一個虛位址
cluster:
selector: ${SW_CLUSTER:nacos}
nacos:
serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:x.x.x.x:8848}
# Nacos Configuration namespace
namespace: ${SW_CLUSTER_NACOS_NAMESPACE:"public"}
# Nacos auth username
username: ${SW_CLUSTER_NACOS_USERNAME:"nacos"}
password: ${SW_CLUSTER_NACOS_PASSWORD:"xxxxxx"}
# Nacos auth accessKey
accessKey: ${SW_CLUSTER_NACOS_ACCESSKEY:""}
secretKey: ${SW_CLUSTER_NACOS_SECRETKEY:""}
#sw配置,這裡的x.x.x.x為sw伺服器的IP位址
core:
selector: ${SW_CORE:default}
default:
gRPCHost: ${SW_CORE_GRPC_HOST:x.x.x.x}
gRPCPort: ${SW_CORE_GRPC_PORT:11800}
#後端存儲選擇ES, clusterNodes可以是ES叢集虛位址或者單個ES的IP位址
storage:
selector: ${SW_STORAGE:elasticsearch}
elasticsearch:
namespace: ${SW_NAMESPACE:""}
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:x.x.x.x:9200}
protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
connectTimeout: ${SW_STORAGE_ES_CONNECT_TIMEOUT:3000}
socketTimeout: ${SW_STORAGE_ES_SOCKET_TIMEOUT:30000}
responseTimeout: ${SW_STORAGE_ES_RESPONSE_TIMEOUT:15000}
numHttpClientThread: ${SW_STORAGE_ES_NUM_HTTP_CLIENT_THREAD:0}
user: ${SW_ES_USER:""}
password: ${SW_ES_PASSWORD:""}
#sw + nacos 動态配置,這裡x.x.x.x為nacos叢集的虛IP
configuration:
selector: ${SW_CONFIGURATION:nacos}
nacos:
# Nacos Server Host
serverAddr: ${SW_CONFIG_NACOS_SERVER_ADDR:x.x.x.x}
# Nacos Server Port
port: ${SW_CONFIG_NACOS_SERVER_PORT:8848}
# Nacos Configuration Group
group: ${SW_CONFIG_NACOS_SERVER_GROUP:skywalking}
# Nacos Configuration namespace
namespace: ${SW_CONFIG_NACOS_SERVER_NAMESPACE:}
# Unit seconds, sync period. Default fetch every 60 seconds.
period: ${SW_CONFIG_NACOS_PERIOD:60}
# Nacos auth username
username: ${SW_CONFIG_NACOS_USERNAME:"nacos"}
password: ${SW_CONFIG_NACOS_PASSWORD:"xxxxxx"}
# Nacos auth accessKey
accessKey: ${SW_CONFIG_NACOS_ACCESSKEY:""}
secretKey: ${SW_CONFIG_NACOS_SECRETKEY:""}
#啟動服務
[root@sw01 bin]# sh startup.sh
驗證,如果skywalking叢集沒有問題,在nacos背景就可以看到skywalking已經把服務注冊到nacos裡面了。
三、通過Nacos動态管理skywalking
skywalking 官方動态配置手冊:
https://skywalking.apache.org/docs/main/v8.8.1/en/setup/backend/dynamic-config/