# SkyWalking 安装部署
### 一、业务背景
微服务作为当前系统架构的主流选型,虽然可以应对复杂的业务场景,但是随着业务扩展,微服务架构本身的复杂度也会膨胀,对于一些核心的业务流程,其请求链路会涉及到多个业务服务,少则三五个,多则十几个都很常见:
需要对请求的链路有完整监控,并且采集和分析各个环节的数据,这样才能清晰地理解系统的行为信息,比如耗时分析,故障原因发现,从而进行优化和解决;能实现这种能力的组件很多,这里来看看基于SkyWalking9的实践方式;
### 二、组件原理
Skywalking是APM规范的国产开源分布式链路追踪系统,APM(Application-Performance-Management)即应用性能管理,支持对SpringCloud微服务集成,并且无代码层面的侵入:
![](https://img.kancloud.cn/de/b0/deb010122b791f5b42c10fddba4f18ba_993x486.png)
**业务机制**![](https://img.kancloud.cn/cd/8e/cd8e74807d24b1ddfe59d84600ddc01e_991x304.png)\*\*\*\*
*****
**SpringCloud**:分布式系统中的服务,启动时配置代理即可;
**Agent**:以探针的方式进行请求链路的数据采集,并向管理服务上报;
**OAP-Service**:接收数据,完成数据的存储和展示;
**Storage**:数据的存储层,支持ElasticSearch、Mysql、H2多种方式;
**UI界面**:数据的可视化展示界面
![](https://img.kancloud.cn/77/14/7714bb38f9772f543f78a5b64107d280_1002x507.png)
工作流程,服务通过探针的方式接入数据采集的功能,之后请求链路的相关处理行为会上报到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
![](https://img.kancloud.cn/94/50/9450be30eca37d7a0d099d0b61ca2e44_1871x971.bmp)![](https://img.kancloud.cn/d0/19/d0191eab6fc9caca70133a5eb4dcf3c4_2028x1036.png)![](https://img.kancloud.cn/c6/cb/c6cbad5e609df2a40330956d8f0a3cb6_1805x853.png)
## 四、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
```
![](https://img.kancloud.cn/50/67/50678bd67a86bb3075d075215a9add67_2083x1100.png)
完整 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开启端口