🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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)