# SkyWalking 安裝部署
### 一、業務背景
微服務作為當前系統架構的主流選型,雖然可以應對復雜的業務場景,但是隨著業務擴展,微服務架構本身的復雜度也會膨脹,對于一些核心的業務流程,其請求鏈路會涉及到多個業務服務,少則三五個,多則十幾個都很常見:
需要對請求的鏈路有完整監控,并且采集和分析各個環節的數據,這樣才能清晰地理解系統的行為信息,比如耗時分析,故障原因發現,從而進行優化和解決;能實現這種能力的組件很多,這里來看看基于SkyWalking9的實踐方式;
### 二、組件原理
Skywalking是APM規范的國產開源分布式鏈路追蹤系統,APM(Application-Performance-Management)即應用性能管理,支持對SpringCloud微服務集成,并且無代碼層面的侵入:

**業務機制**\*\*\*\*
*****
**SpringCloud**:分布式系統中的服務,啟動時配置代理即可;
**Agent**:以探針的方式進行請求鏈路的數據采集,并向管理服務上報;
**OAP-Service**:接收數據,完成數據的存儲和展示;
**Storage**:數據的存儲層,支持ElasticSearch、Mysql、H2多種方式;
**UI界面**:數據的可視化展示界面

工作流程,服務通過探針的方式接入數據采集的功能,之后請求鏈路的相關處理行為會上報到OAP服務中,進行數據的聚合管理和分析,并存儲在持久層,然后可以通過UI界面進行可視化呈現;
## 三、安裝部署 版本9.2
下載地址:[https://skywalking.apache.org/downloads/](https://skywalking.apache.org/downloads/)
**1、版本描述&下載**
skywalking在之前的舊版本中,apm與agent是在一個包中的,在9.0的版本中是需要分開下載的;agent包下載解壓之后,也將其放到apm包下面維護:
* skywalking-apm-9.2.0.tar.gz
* skywalking-java-agent-8.13.0.tgz

## 四、SkyWalking 的配置
在服務器解壓完畢后,我們將分三步進行,完成整體 SkyWalking 的配置。Skywalking 主要分為 oap 、webapp 和 agent 三部分,
* `oap` 用于匯總數據。
* `webapp` 用于匯總數據的展示。
* `agent` 是探針,部署在需要收集數據的應用服務器上,并將數據同步到Skywalking的平臺。
**`oap` 和 `webapp`這兩塊共同組成了Skywalking的平臺**
*****
## `4.1、oap` 進行配置
進入 `config` 文件夾, `application.yml` 文件夾進行編輯。下面將進行集群配置、存儲配置、自監控空配置。
集群部分
```
cluster:
# 配置我們是集群還是單節點。這里我們是單節點,所以不做改變。
selector: ${SW_CLUSTER:standalone}
```
存儲部分這里我們的存儲使用 elasticsearch7
```
storage:
selector: ${SW_STORAGE:elasticsearch}
……
elasticsearch:
# sky-walking 在 ES 中索引的前綴
nameSpace: ${SW_NAMESPACE:"Sky-walking"}
# 在 ES 安裝的位置與端口
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9208}
```
自監控【**采取了默認的配置沒有更改】**
```
prometheus-fetcher:
selector: ${SW_PROMETHEUS_FETCHER:default}
default:
enabledRules: ${SW_PROMETHEUS_FETCHER_ENABLED_RULES:"self"}
active: ${SW_PROMETHEUS_FETCHER_ACTIVE:true}
……
telemetry:
selector: ${SW_TELEMETRY:prometheus}
```
## 4.2 對 `webapp` 進行配置
1、訪問 oap 的方式默認使用graphql方式訪問oap的數據收集端口,因此監聽的是12800端口由于oap 和web 在同一臺機器上。所以我填寫的是127.0.0.1
```
server:
port: 7100#訪問頁面使用的端口
collector:
path: /graphql
ribbon:
ReadTimeout: 10000
# Point to all backend's restHost:restPort, split by ,
listOfServers: 127.0.0.1:12800
```
完成上述步驟就可以啟動了
## 4.3 對 `agent` 進行配置 【樣例】
```
-javaagent:/opt/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar=agent.service_name=NJ-GL,agent.application_code=90001,
logging.level=debug
```
```
-javaagent:/usr/hj/apps/agent/skywalking-agent.jar
-Dskywalking.agent.service_name=$APP_NAME
-Dskywalking.collector.backend_service=$skywalking_Server
-jar $FULL_PATH --spring.profiles.active=prod >/dev/null 2>&1 &
```
# 五、啟動
進入 `bin` 目錄執行 `startup.sh` 文件即可啟動 `SkyWalking` 平臺,內部文件其實是分別執行 `oapService.sh` 與`webappService.sh` 文件,如果我們是分開部署這兩部分功能,可以單獨運行對應的 `.sh` 文件即可啟動對應部分。
```
cd /usr/local/skywalking/bin
sh startup.sh
```
`startup.sh` 腳本內容。
```
setlocal
call "%~dp0"\oapService.bat start
call "%~dp0"\webappService.bat start
endlocal
```

完整 Java啟動腳本
```
rt JAVA_HOME=/usr/local/java/jdk1.8.0_211
APP_PATH="/usr/hj/apps/hmall-service-trade"
APP_NAME="hmall-service-trade"
FULL_PATH=${APP_PATH}/${APP_NAME}".jar"
skywalking_Server="14.29.150.191:11800"
#啟動方法
start(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
if [ "$pid" ]; then
echo "$APP_NAME is already running. pid=$pid ."
else
nohup $JAVA_HOME/bin/java -javaagent:/usr/hj/apps/agent/skywalking-agent.jar -Dskywalking.agent.service_name=$APP_NAME -Dskywalking.collector.backend_service=$skywalking_Server -jar $FULL_PATH --spring.profiles.active=prod >/dev/null 2>&1 &
echo $!
echo "$APP_NAME now is running"
fi
}
#停止方法
stop(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
if [ "$pid" ]; then
kill -9 $pid
echo "Pid:$pid stopped"
else
echo "$APP_NAME is not running"
fi
}
#輸出運行狀態
status(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
if [ "$pid" ]; then
echo "$APP_NAME is running. Pid is ${pid}"
else
echo "$APP_NAME is NOT running."
fi
}
#根據輸入參數,選擇執行對應方法,不輸入則執行使用說明
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
stop
sleep 5
start
;;
*)
echo "Usage:{start|stop|status|restart}"
;;
esac
exit 0
```
UI說明
[https://blog.csdn.net/miluan\_ren/article/details/118223680](https://blog.csdn.net/miluan_ren/article/details/118223680)
- 項目介紹
- 項目聲明
- 項目簡介
- 架構設計
- 項目亮點功能介紹
- 技術棧介紹
- 核心功能
- 運行環境
- 項目更新日志
- 文檔更新日志
- F&Q
- 部署教程
- 環境準備
- JDK安裝
- JDK1.8,17共存
- maven
- 分布式緩存Redis
- 單機版
- 集群
- 注冊&配置中心alibaba/nacos
- 介紹
- Nacos安裝
- Nacos配置中心
- Nacos注冊發現
- Nacos生產部署方案
- 服務監控-BootAdmin
- 基本介紹
- 如何使用
- 整合Admin-Ui
- 客戶端配置
- 鏈路追蹤
- 基本介紹
- SkyWalking-1
- Skywalking-1
- 消息隊列
- Kafka
- docker安裝kafka
- Linux集群
- Maven私服
- nexus安裝部署
- nexus使用介紹
- 全文搜索elasticsearch
- windows集群搭建
- docker安裝es
- ElasticHD
- linux集群部署
- 統一日志解決方案
- 日志解決方案設計
- 介紹與相關資料
- ELK安裝部署
- elasticsearch 7.5
- logstash-7.5
- kibana-7.5
- filebeat
- 服務監控-Prometheus
- Prometheus安裝配置
- Prometheus介紹
- grafana
- 持續集成部署CICD
- 自動化部署Jenkins
- 安裝部署win
- 打包發布遠程執行
- 安裝部署linux
- jenkins+gitlab+docker容器化工程自動化部署
- Git
- CICD說明
- 阿里云效
- CentOS_MYSQL安裝
- docker
- 安裝
- Docker安裝Nginx
- Docker部署啟動springboot
- dockerCompose
- harbor
- Docker私有鏡像倉庫
- Portainer
- Docker遠程連接設置
- 打包工程
- 必要啟動模塊
- 核心模塊
- 登錄認證
- 緩存功能
- 日志模塊
- 分布式鎖
- 消息隊列
- 異常處理
- 系統接口
- 參數驗證
- es檢索
- 數據導出
- 系統設計
- 系統總體架構
- 擴展模塊(可選)
- 限流熔斷alibaba/sentinel
- 使用Sentinel實現gateway網關及服務接口限流
- Sentinel使用Nacos存儲規則及同步
- 服務調用Feign
- Feign基本介紹
- 如何使用
- 負載均衡
- 請求超時
- 請求攔截器
- 分布式任務調度
- XXL-JOB
- 分布式事務
- TX-LCN
- Seata
- Seata原理解析
- 數據庫分庫分表
- swagger文檔
- 分布式ID生成器解決方案
- 服務網關CloudGateway
- 基本介紹
- 使用網關
- 路由配置
- 全局過濾器
- 服務認證授權架構設計
- 認證服務流程
- 授權服務流程
- 系統冪等性設計與實踐
- 分布式日志鏈路跟蹤
- 實時搜索系統設計
- 應用性能
- 壓力測試工具
- Apache JMeter介紹和安裝
- ApacheJMeter使用
- JVM
- JVM性能調優
- 常見JVM內存錯誤及解決方案
- JVM 分析工具詳解
- Spring Cloud性能調優
- Linux運維
- Linux 常用命令
- Linux開啟端口