SkyWalking 介绍及部署

  • 1、SkyWalking简介
  • 2、SkyWalking的搭建
    • [2.1 部署Elasticsearch](#2.1 部署Elasticsearch)
    • [2.2 部署SkyWalking-Server](#2.2 部署SkyWalking-Server)
    • [2.3 部署SkyWalking-UI](#2.3 部署SkyWalking-UI)
  • 3、应用接入
    • [3.1 jar包部署方式](#3.1 jar包部署方式)
    • [3.2 dockerfile方式](#3.2 dockerfile方式)
    • [3.3 DockerFile示例](#3.3 DockerFile示例)
  • [4、SkyWalking UI 界面说明](#4、SkyWalking UI 界面说明)
    • [4.1 仪表盘](#4.1 仪表盘)
    • [4.2 拓扑图](#4.2 拓扑图)
    • [4.3 追踪](#4.3 追踪)
    • [4.4 性能剖析](#4.4 性能剖析)
    • [4.5 日志](#4.5 日志)
    • [4.6 告警](#4.6 告警)
  • 5、其他相关的配置
    • [5.1 数据清理机制](#5.1 数据清理机制)
    • [5.2 数据存储和写入优化(针对ES)](#5.2 数据存储和写入优化(针对ES))
    • [5.3 链路过长问题](#5.3 链路过长问题)
  • 6、参考文档:

随着微服务架构的流行,一些微服务架构下的问题也会越来越突出,比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个调用链的稳定性就会受到影响。

面对以上情况, 我们就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,这时候 APM(Application Performance Management应用性能管理)工具就该闪亮登场了。

1、SkyWalking简介

SkyWalking 它是一款优秀的国产 APM 工具,包括了分布式追踪、性能指标分析、应用和服务依赖分析等。

SkyWalking架构分为三部分:

  • skyWalking-collector:链路数据归集器,相当于Skywalking的服务端

  • skyWalking-ui:SkyWalking的web可视化平台

  • skyWalking-agent:探针,与应用容器绑定在一起,启动时通过javaagent进行JVM级别的AOP,收集和发送数据到归集器

SkyWalking 的核心是数据分析和度量结果的存储平台,通过 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量数据,SkyWalking Collecter 对数据进行分析和聚合,存储到 Elasticsearch、H2、MySQL、TiDB 等。

说明: SkyWalking 的核心是数据分析和度量结果的存储平台,通过 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量数据,SkyWalking Collecter 对数据进行分析和聚合,

存储到 Elasticsearch、H2、MySQL、TiDB 等其一即可,最后我们可以通过 SkyWalking UI 的可视化界面对最终的结果进行查看。Skywalking 支持从多个来源和多种格式收集数据:多种语言的 Skywalking Agent 、Zipkin v1/v2 、Istio 勘测、Envoy 度量等数据格式。

整体架构看似模块有点多,但在实际上还是比较清晰的,主要就是通过收集各种格式的数据进行存储,然后展示。

所以搭建 Skywalking 服务我们需要关注的是 SkyWalking Collecter、SkyWalking UI 和 存储设备,SkyWalking Collecter、SkyWalking UI 官方下载安装包内已包含,最终我们只需考虑存储设备即可。

2、SkyWalking的搭建

2.1 部署Elasticsearch

注意:版本与SkyWalking版本对应

展开源码

bash 复制代码
docker run --name elasticsearch -p 9200:9200  -p 9300:9300 \
 -e "discovery.type=single-node" \
 -e ES_JAVA_OPTS="-Xms1g -Xmx1g" \
 --restart always \
 -v /home/docker/elastic/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
 -v /home/docker/elastic/elasticsearch/data:/usr/share/elasticsearch/data \
 -v /home/docker/elastic/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
 --net network_network \
 -d elasticsearch:7.17.0

2.2 部署SkyWalking-Server

apache-skywalking-apm-es7-8.3.0.tar.gz 下载地址

  • 拉取镜像

展开源码

bash 复制代码
docker pull apache/skywalking-oap-server:8.3.0-es7
  • 运行 skywalking-oap-server 容器 SW_STORAGE:数据存储配置,支持H2,MySQL、ES等,这里改为 elasticsearch7

配置文件路径:apache-skywalking-apm-bin-es7/config/application.yml

SkyWalking 默认使用12800 作为Rest API通信端口,11800为gRPC API端口

展开源码

bash 复制代码
docker run -d --name skywalking-oap \
-e TZ=Asia/Shanghai \
-p 12800:12800 -p 11800:11800 \
--link elasticsearch:elasticsearch \
--net network_network \
-e SW_STORAGE=elasticsearch7 \
-e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 \
apache/skywalking-oap-server:8.3.0-es7
复制代码

2.3 部署SkyWalking-UI

配置文件路径:apache-skywalking-apm-bin-es7/webapp/webapp.yml

  • 拉取镜像

展开源码

bash 复制代码
docker pull apache/skywalking-ui:8.3.0
  • 运行 skywalking-ui 容器

展开源码

bash 复制代码
docker run -d --name skywalking-ui \
-e TZ=Asia/Shanghai \
-p 8088:8080 \
--link skywalking-oap:skywalking-oap \
--net network_network \
-e SW_OAP_ADDRESS=skywalking-oap:12800 \
apache/skywalking-ui:8.3.0

3、应用接入

注意:agent 中指定服务名(SW_AGENT_NAME),不同的服务用不同的服务名区分。如果服务名相同,相当于是多个实例。

3.1 jar包部署方式

  • 将skywalking安装包下的agent整个目录(apache-skywalking-apm-bin-es7/agent),拷贝到应用机器所在的目录,如:/home/docker/
  • 在启动的脚本上添加 skywalking-agent配置:

|---------------------------------------|------------------------------------------|
| 配置参数 | 描述 |
| -javaagent | 配置skywalking-agent.jar位置,确保这个参数在-jar参数之前 |
| -DSW_AGENT_NAME | 配置应用名称,用于区分不用的服务 |
| -DSW_AGENT_COLLECTOR_BACKEND_SERVICES | 配置server的服务地址 |
| | |

展开源码

bash 复制代码
java -javaagent:/home/docker/agent/skywalking-agent.jar
-DSW_AGENT_NAME=gateway
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
-Dserver.port=9999 -Xmx128m -Xms128m -XX:MaxMetaspaceSize=128m
-jar gateway.jar 

3.2 dockerfile方式

  • 将skywalking安装包下的agent整个目录(apache-skywalking-apm-bin-es7/agent),拷贝到应用机器所在的目录,如:/home/docker/
  • docker-compose.yml

docker-compose.yml 展开源码

bash 复制代码
  # skywalking-aop
  skywalking-oap:
    image: apache/skywalking-oap-server:8.3.0-es7
    container_name: skywalking-oap
    links:
      - elasticsearch:elasticsearch
    restart: always
    ports:
      - 11800:11800
      - 12800:12800
    environment:
      TZ: Asia/Shanghai
      SW_STORAGE: elasticsearch7
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
      JAVA_OPTS: "-Xms512m -Xmx512m"
    networks:
      - network

  # skywalking-ui
  skywalking-ui:
    image: apache/skywalking-ui:8.3.0
    container_name: skywalking-ui
    links:
      - skywalking-oap:skywalking-oap
    restart: always
    ports:
      - 8088:8080
    environment:
      TZ: Asia/Shanghai
      SW_OAP_ADDRESS: skywalking-oap:12800
    networks:
      - network
复制代码

4、SkyWalking UI 界面说明

4.1 仪表盘

4.1.1 APM

APM 应用性能管理,分为全局维度、服务维度、实例维度、端点维度

(1)全局维度
  • Service Load:服务每分钟请求数
  • Slow Services:慢响应服务,服务耗时最长的一次耗时时间
  • Un-Health Services(Apdex):服务性能健康指数,0~1
  • Slow EndPoints:慢响应的端点
  • Global Response Latency:不同百分比的响应延时时间
  • Global Heatmap:热力图
(2)服务维度
  • Service Apdex:服务性能指数
  • Service Apdex(折线图):
  • Service Avg Response Time:平均响应时间
  • Global Response Time Percentile:百分比的响应时间
  • Successful Rate:请求成功率
  • Successful Rate(折线图):不同时间的请求的成功率
  • Service Load:每分钟请求数
  • Service Load(折线图):不同时间的每分钟请求数
  • Service Instances Load:每个服务实例的每分钟请求数
  • Slow Service Instances:服务实例的最大延时
  • Service Instances Successful Rate:服务实例的请求成功率
(3)实例维度
  • Service Instances Load:服务实例的每分钟请求数
  • Service Instances Successful Rate:服务实例的请求成功率
  • Service Instances Latency:服务实例的响应延时
  • JVM CPU:占用CPU的百分比
  • JVM Memory:内存占用大小
  • JVM GC Time:垃圾回收时间,包括Young GC 和 Old GC
  • JVM GC Count:垃圾回收次数
  • JVM Thread Count:JVM 创建线程数量
  • CLR xxx:
(4)端点维度
  • EndPoint Load in Current Service:每个端点的每分钟请求数
  • Slow Endpoints in Current Service:每个端点的最慢请求时间
  • Successful Rate in Current Service:每个端点的请求成功率
  • Endpoint Load:当前端点每个时间段的请求数据
  • Endpoint Avg Response Time:端点请求的平均响应时间
  • Endpoint Response Time Percentile:当前端点每个时间段的响应时间占比
  • Endpoint Successful Rate:当前端点每个时间段的请求成功率

4.1.2 数据库

展示数据库的响应时间、响应时间分布、吞吐量、SLA、慢SQL等详细信息,便于直观展示数据库状态

  • Database Avg Response Time:数据库平均响应时间
  • Database Access Successful Rate:数据库的访问成功率
  • Database Traffic:数据库每分钟请求数
  • Database Access Latency Percentile:数据库不同比例的响应时间
  • Slow Statements:前N个慢查询
  • All Database Loads:所有数据库中的每分钟请求数排名
  • Un-Health Databas:所有数据库的请求成功率排名

4.1.3 Istio、SelfObservability 、WebBrowser

这几个比较次用,用得不多,不详细介绍

  • Istio:结合Istio,适配容器、采集容器信息
  • SelfObservability:监控SkyWalking自身信息
  • WebBrowser:8.2.0 版本新增的浏览器,提供PV、UV等数据。需结合 Skywalking-Client-js 使用

SkyWalking自监控(SelfObservability)的配置:

修改配置文件apache-skywalking-apm-bin-es7/config/application.yml

修改内容:

Prometheus-fetcher 的selector修改为:default

telemetry的selector修改为:prometheus

SelfObservability:

4.2 拓扑图

服务之间的调用关系。每条连线的颜色反应了服务之间的调用延迟情况,可以非常直观的看到服务与服务之间的调用状态,连线中间的点能点击,可显示两个服务之间链路的平均响应时间、吞吐率以及SLA等信息

4.3 追踪

显示请求的代码内部执行情况,一个完整的请求都经过了哪些服务、执行了哪些代码方法、每个方法的执行时间、执行状态等详细信息,快速定位代码问题

  • 左侧:端点信息列表(API接口列表),红色------异常请求;蓝色------正常请求
  • 右侧:请求追踪列表,请求中连接各端点的先后顺序和时间

4.4 性能剖析

  • 服务:需要分析的服务
  • 端点:链路监控中的端点名称(可以在链路追踪中查看端点信息)
  • 监控时间:采集数据的开始时间
  • 监控持续时间:采集数据的时间长度
  • 起始监控时间:多少毫秒后开始进行采集
  • 监控间隔:多少毫秒采集一次
  • 最大采样数:最大采集多少样本

4.5 日志

参考:微服务链路追踪 Skywalking 生成 Trace ID 以及 logback 日志归集-CSDN博客

在应用代码中添加依赖

展开源码

java 复制代码
<!--skywalking trace工具包-->
<dependency>
  <groupId>org.apache.skywalking</groupId>
  <artifactId>apm-toolkit-trace</artifactId>
  <version>${skywalking.version}</version>
</dependency>

4.6 告警

参考:Skywalking-告警功能实践_from(endpoint.*).filter(responsecode in [404,500,5-CSDN博客

5、其他相关的配置

5.1 数据清理机制

配置文件路径:apache-skywalking-apm-bin-es7/config/application.yml

展开源码

java 复制代码
core:
  selector: ${SW_CORE:default}
  default:
        # 数据清理机制的开关,默认开启
    enableDataKeeperExecutor: ${SW_CORE_ENABLE_DATA_KEEPER_EXECUTOR:true}
        # 数据清理定时器周期,默认5,单位分钟
    dataKeeperExecutePeriod: ${SW_CORE_DATA_KEEPER_EXECUTE_PERIOD:5}
        # 明细记录数据的有效期,默认3天
    recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:3} # Unit is day
        # 指标数据的有效期,默认7天
    metricsDataTTL: ${SW_CORE_METRICS_DATA_TTL:7} # Unit is day

5.2 数据存储和写入优化(针对ES)

主要是进行bulk 批量写入调整,buffer 优化等,具体参见《elasticsearch写入速度优化》

5.3 链路过长问题

往往就是循环中调用其他服务 或 循环操作数据库;或者 定时任务重跑批处理

方案:

1、不加入链路追踪,直接ignore url 配置忽略

2、业务代码处理,数据库批量更新操作

6、参考文档:

【1】Skywalking分布式追踪与监控(Skywalking分布式追踪与监控)

【2】破解 Java Agent 探针黑科技 (破解 Java Agent 探针黑科技)

【3】elasticsearch 写入速度优化 (elasticsearch 写入速度优化)

【4】SkyWalking 数据清理机制 (SkyWalking 数据清理机制)

【5】开启Apache SkyWalking的自监控 (开启Apache SkyWalking的自监控)

【6】Skywalking-告警功能实践 (Skywalking-告警功能实践)

相关推荐
dgvri4 天前
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
spring boot·后端·skywalking
rOuN STAT5 天前
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
spring boot·后端·skywalking
危笑ioi5 天前
helm部署skywalking链路追踪 java
java·开发语言·skywalking
MmeD UCIZ6 天前
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
spring boot·后端·skywalking
专注API从业者6 天前
淘宝 API 调用链路追踪实战:基于 SkyWalking/Pinpoint 的全链路监控搭建
大数据·开发语言·数据库·skywalking
MMMMMMMMMMemory7 天前
记录skywalking预警如何处理401问题
skywalking
SoulRoar.7 天前
Armbian离线安装ES+SkyWalking并注册系统服务
大数据·elasticsearch·skywalking
@土豆8 天前
Java JVM参数环境变量详解及SkyWalking Agent集成技术文档
java·jvm·skywalking
NCIN EXPE8 天前
SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪
spring boot·后端·skywalking
enjoy编程8 天前
SkyWalking 分布式追踪、APM学习-I
skywalking