## 簡介
* Skywalking 是一個優秀的APM(application performance monitor)應用性能監控系統,針對微服務場景設計,可以方便的實現Spring cloud等微服務場景下的性能監控、鏈路追蹤等。
* 官網:https://skywalking.apache.org/
* 下載:https://skywalking.apache.org/downloads/
* 文檔:https://skywalking.apache.org/docs/
* 中文版文檔:https://skyapm.github.io/document-cn-translation-of-skywalking/
## 部署Skywalking
1. 部署方式有很多種,本次以docker-compose一鍵部署腳本為例,若需要其他部署方式,可以參考skywalking官方文檔
2. 拷貝如下docker-compose腳本至開發機或服務器
~~~
version: '3.3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.11
container_name: elasticsearch
restart: always
ports:
- 9200:9200
- 9300:9300
environment:
- discovery.type=single-node
- TZ=Asia/Shanghai
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
ulimits:
memlock:
soft: -1
hard: -1
skywalking-oap:
image: docker.io/apache/skywalking-oap-server:9.5.0
container_name: skywalking-oap
depends_on:
- elasticsearch
restart: always
ports:
- 11800:11800
- 12800:12800
environment:
SW_CORE_RECORD_DATA_TTL: 15
SW_CORE_METRICS_DATA_TTL: 15
SW_STORAGE: elasticsearch
SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
SW_ENABLE_UPDATE_UI_TEMPLATE: "true"
TZ: Asia/Shanghai
JAVA_OPTS: "-Xms2048m -Xmx2048m"
skywalking-ui:
image: docker.io/apache/skywalking-ui:9.5.0
container_name: skywalking-ui
depends_on:
- skywalking-oap
links:
- skywalking-oap
restart: always
ports:
- 8880:8080
environment:
SW_OAP_ADDRESS: http://skywalking-oap:12800
~~~
3. 進入對應目錄,執行 `docker-compose up -d`,等待下載鏡像并啟動完畢,一般等待一分鐘后便可以進行訪問

4. skywalking前端默認端口為8080,為了防止沖突,我們將其到宿主機的端口映射為8880,大家注意開通好端口策略
5. 訪問http://服務地址:8880,若看到下圖則說明部署成功

## 下載Agent
1. 前往官網下載9.x版本的Agent

2. 放到開發機或服務器提前準備好的目錄,并記下地址,以macos的開發機為例
地址為: /users/bladex/skywalking/skywalking-agent/skywalking-agent.jar

## 依賴說明
在需要進行對接的服務,加上對應依賴
```xml
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>9.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>9.0.0</version>
</dependency>
```
## 配置說明
1. 核心配置如下
```shell
-javaagent:/users/bladex/skywalking/skywalking-agent/skywalking-agent.jar
-Dskywalking.agent.service_name=blade-gateway
-Dskywalking.collector.backend_service=127.0.0.1:11800
```
2. `-javaagent:` 需要配置為剛剛下載 skywalking-agent 的具體jar包地址
3. `-Dskywalking.agent.service_name=`注冊到skywalking的服務名稱
4. `-Dskywalking.collector.backend_service=`skywalking部署的地址+服務端口號
5. 服務啟動命令如下
```shell
java -jar app.jar -javaagent:/users/bladex/skywalking/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=blade-gateway -Dskywalking.collector.backend_service=127.0.0.1:11800
```
## 開始對接
1. 以開發模式下的idea為例,打開啟動器配置,并加上skywalking所需的配置,注意各個服務的配置不同,主要需要修改注冊的服務名




2. 啟動配置的GateWayApplication,等待啟動完畢


3. 一個服務成功后,說明之前的部署與配置均無問題,之后我們將需要監控的服務,都加上對應的配置并且啟動完畢
4. 打開skywalking前端,查看服務已經注冊成功,并且可以看到自動將調用關系以圖像的形式展現出來了,鏈路追蹤也一并處理完畢



## 日志配置
* skywalking支持log4j、log4j2、logback三種日志,若需要將日志推送到skywalking,僅需要在對應配置文件加上官方的配置即可,無需二次開發
* 引入 對應依賴
```xml
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>9.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>9.0.0</version>
</dependency>
```
* 以logback為例,加入如下配置便可,主要是通過 `%tid` 來定義
```xml
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
</layout>
</encoder>
</appender>
```
* 如果使用MDC,則通過 `%X{tid}` 來定義
```xml
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
</layout>
</encoder>
</appender>
```
* 更多具體完整配置請見官方文檔:https://skywalking.apache.org/docs/skywalking-java/next/en/setup/service-agent/java-agent/application-toolkit-logback-1.x/
- 第零章 序
- 序言
- 系統架構
- 視頻公開課
- 開源版介紹
- 商業版介紹
- 功能對比
- 答疑流程
- 第一章 快速開始
- 升級必看
- 環境要求
- 環境準備
- 基礎環境安裝
- Docker安裝基礎服務
- Nacos安裝
- Sentinel安裝
- 插件安裝
- 建數據庫
- 工程導入
- 導入Cloud版本
- 導入Nacos配置
- 導入Boot版本
- 工程運行
- 運行Cloud版本
- 運行Boot版本
- 工程測試
- 測試Cloud版本
- 測試Boot版本
- 第二章 技術基礎
- Java
- Lambda
- Lambda 受檢異常處理
- Stream 簡介
- Stream API 一覽
- Stream API (上)
- Stream API (下)
- Optional 干掉空指針
- 函數式接口
- 新的日期 API
- Lombok
- SpringMVC
- Swagger
- Mybatis
- Mybatis-Plus
- 開發規范
- 第三章 開發初探
- 新建微服務工程
- 第一個API
- API鑒權
- API響應結果
- Redis緩存
- 第一個CRUD
- 建表
- 建Entity
- 建Service和Mapper
- 新增 API
- 修改 API
- 刪除 API
- 查詢 API
- 單條數據
- 多條數據
- 分頁
- 微服務遠程調用
- 聲明式服務調用 Feign
- 熔斷機制 Hystrix
- 第四章 開發進階
- 聚合文檔
- 鑒權配置
- 跨域處理
- Xss防注入
- 自定義啟動器
- Secure安全框架
- Token認證簡介
- Token認證配置
- PreAuth注解配置
- Token認證實戰
- Token認證加密
- 日志系統
- 原理解析
- 功能調用
- Seata分布式事務
- 簡介
- 編譯包啟動
- 配置nacos對接
- docker啟動
- 對接微服務
- 代碼生成配置
- 前言
- 數據庫建表
- 代碼生成
- 前端配置
- 優化效果
- 第五章 功能特性
- SaaS多租戶
- 概念
- 數據隔離配置
- 線程環境自定義租戶ID
- 多終端令牌認證
- 概念
- 系統升級
- 使用
- 第三方系統登錄
- 概念說明
- 對接說明
- 對接準備
- 配置說明
- 操作流程
- 后記
- UReport2報表
- 報表簡介
- 對接配置
- 報表后記
- 接口報文加密
- 簡介
- 運行邏輯
- 對接準備
- 功能配置
- 接口測試
- 改造查詢
- 改造提交
- 改造刪除
- 動態數據權限
- 數據權限簡介
- 數據權限開發
- 純注解配置
- Web全自動配置
- 注解半自動配置
- 數據權限注意點
- 動態接口權限
- 樂觀鎖配置
- 統一服務登陸配置
- Skywalking追蹤監控
- Minio分布式對象存儲
- Boot版本對接至Cloud
- 第六章 生產部署
- windows部署
- linux部署
- jar部署
- docker部署
- java環境安裝
- mysql安裝
- docker安裝
- docker-compose安裝
- harbor安裝
- 部署步驟
- 寶塔部署
- 準備工作
- 安裝工作
- 部署準備
- 部署后端
- 部署前端
- 部署域名
- 結束工作
- k8s平臺部署
- 第七章 版本控制
- Git遠程分支合并
- Git地址更換
- 第八章 學習資料
- 第九章 FAQ
- 第十章 聯系我們