SkyWalking 安装及入门

1. 简介

1.1 概念

  • 一个开源的可观测平台, 用于从服务和云原生基础设施收集, 分析, 聚合及可视化数据。SkyWalking 提供了一种简便的方式来清晰地观测分布式系统, 甚至横跨多个云平台。SkyWalking 更是一个现代化的应用程序性能监控(Application Performance Monitoring)系统, 尤其专为云原生、基于容器的分布式系统设计。

1.2 功能列表

  • 多种监控手段。可以通过语言探针和 service mesh 获得监控是数据。
  • 多个语言自动探针。包括 Java,.NET Core 和 Node.JS。
  • 轻量高效。无需大数据平台,和大量的服务器资源。
  • 模块化。UI、存储、集群管理都有多种机制可选。
  • 支持告警。
  • 优秀的可视化解决方案。

1.3 整体架构

SkyWalking安装及入门

整个架构,分成上、下、左、右四部分:

  • 上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。
  • 下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
  • 右部分 Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。
  • 左部分 SkyWalking UI :负责提供控台,查看链路等等。

2. 搭建 SkyWalking 单机环境

SkyWalking安装及入门

  • 第一步,搭建一个 Elasticsearch 服务。
  • 第二步,*载下** SkyWalking 软件包。
  • 第三步,搭建一个 SkyWalking OAP 服务。
  • 第四步,启动一个 Spring Boot 应用,并配置 SkyWalking Agent。
  • 第五步,搭建一个 SkyWalking UI 服务。

2.1 Elasticsearch 搭建

  • 2.1.1 *载下**安装包
  • 2.1.2 安装elasticsearch,将压缩包解压
tar -zxvf ./elasticsearch-6.4.0.tar.gz
  • 2.1.3 修改Linux系统的限制配置,将文件创建数修改为65536个。

修改系统中允许应用最多创建多少文件等的限制权限。Linux默认来说,一般限制应用最多 创建的文件是65535个。但是ES至少需要65536的文件创建数的权限。 修改系统中允许用户启动的进程开启多少个线程。默认的Linux限制root用户开启的进程可 以开启任意数量的线程,其他用户开启的进程可以开启1024个线程。必须修改限制数为 4096+。因为ES至少需要4096的线程池预备。

vi /etc/security/limits.conf

#新增如下内容在limits.conf文件中

es soft nofile 65536

es hard nofile 65536

es soft nproc 4096

es hard nproc 4096

修改系统控制权限,ElasticSearch需要开辟一个65536字节以上空间的虚拟内存。Linux默认不允许任何用户和应用程序直接开辟这么大的虚拟内存。

vi /etc/sysctl.conf

#新增如下内容在sysctl.conf文件中,当前用户拥有的内存权限大小

vm.max_map_count=262144

#让系统控制权限配置生效

sysctl -p

建一个用户, 用于ElasticSearch启动。

ES在5.x版本之后,强制要求在linux中不能使用root用户启动ES进程。所以必须使用其他用户开启ES进程才可以。

#创建用户

useradd es

#修改上述用户的密码

passwd es

#创建密码记得不能太过简单

#修改elasicsearch目录的拥有者

chown -R es elasticsearch-6.4.0

使用es用户启动elasticsearch

#切换用户

su es

#到ElasticSearch的bin目录下

cd bin/

#后台启动

./elasticsearch -d

访问:IP:9200 ,如果显示出如下信息,就证明ElasticSearch安装成功:

{

"name" : "node-1",

"cluster_name" : "CollectorDBCluster",

"cluster_uuid" : "aP9RJgc0S5iTXhOPj1fJhA",

"version" : {

"number" : "7.15.2",

"build_flavor" : "default",

"build_type" : "tar",

"build_hash" : "93d5a7f6192e8a1a12e154a2b81bf6fa7309da0c",

"build_date" : "2021-11-04T14:04:42.515624022Z",

"build_snapshot" : false,

"lucene_version" : "8.9.0",

"minimum_wire_compatibility_version" : "6.8.0",

"minimum_index_compatibility_version" : "6.0.0-beta1"

},

"tagline" : "You Know, for Search"

}

修改:elasticsearch.yml

node.name: node-1 //节点名称

cluster.initial_master_nodes: ["node-1"] //初始化节点

network.host: 0.0.0.0 // 内网访问

# 如果 cluster.name 不设置为 CollectorDBCluster ,则需要修改 SkyWalking 的配置文件

cluster.name: CollectorDBCluster

node.master: true

#指定该节点是否存储索引数据,默认为true

node.data: true

2.2 安装Skywalking,分为两个步骤:

  • 安装Backend后端服务
  • 安装UI

2.2.1 安装Backend后端服务

① 首先切回到root用户,切换到目录下,解压Skywalking压缩包。

#切换到root用户
su root
# 解压
$ tar -zxvf apache-skywalking-apm-es7-6.6.0.tar.gz
$ cd  apache-skywalking-apm-bin-es7

$ ls -ls
 4 drwxr-xr-x 8 root root  4096 Sep  9 15:09 agent # SkyWalking Agent
 4 drwxr-xr-x 2 root root  4096 Sep  9 15:44 bin # 执行脚本
 4 drwxr-xr-x 2 root root  4096 Sep  9 15:44 config # SkyWalking OAP Server 配置文件
32 -rwxr-xr-x 1 root root 28903 Sep  9 14:32 LICENSE
 4 drwxr-xr-x 3 root root  4096 Sep  9 15:44 licenses
32 -rwxr-xr-x 1 root root 31850 Sep  9 14:32 NOTICE
16 drwxr-xr-x 2 root root 16384 Sep  9 15:22 oap-libs # SkyWalking OAP Server
 4 -rw-r--r-- 1 root root  1978 Sep  9 14:32 README.txt
 4 drwxr-xr-x 2 root root  4096 Sep  9 15:44 webapp # SkyWalking UI

② 修改Skywalking存储的数据源配置:

cd apache-skywalking-apm-bin
vi config/application.yml

我们可以看到默认配置中,使用了H2作为数据源。我们将其全部注释。将ElasticSearch对应的配置取消注释:

cluster:
 # selector: ${SW_CLUSTER:standalone}
  standalone: // 单机模式
core:
  default:
     # 混合角色:接收代理数据,1级聚合、2级聚合
      # 接收者:接收代理数据,1级聚合点
      # 聚合器:2级聚合点
    role: ${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator
    restHost: ${SW_CORE_REST_HOST:0.0.0.0} #skywalking服务端的REST绑定的IP
    restPort: ${SW_CORE_REST_PORT:12800}
    restContextPath: ${sSW_CORE_REST_CONTEXT_PATH:/}
    gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0} #skywalking服务端GRPC通信绑定的IP
    gRPCPort: ${SW_CORE_GRPC_PORT:11800}  
storage:
  selector: ${SW_STORAGE:elasticsearch7} # elasticsearch 的集群名称
  elasticsearch7:
    nameSpace: ${SW_NAMESPACE:"CollectorDBCluster"} #会相应修改es中存储的索引的前缀
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200} # elasticsearch 集群节点的地址及端口
    protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
    user: ${SW_ES_USER:""} # elasticsearch 的用户名
    password: ${SW_ES_PASSWORD:""} # elasticsearch 的密码
    indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}  # 设置 elasticsearch 索引分片数量
    indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0} # 设置 elasticsearch 索引副本数
    # Those data TTL settings will override the same settings in core module.
    recordDataTTL: ${SW_STORAGE_ES_RECORD_DATA_TTL:7} # 记录明细有效期,默认7,单位天。
    otherMetricsDataTTL: ${SW_STORAGE_ES_OTHER_METRIC_DATA_TTL:45} # 其他指标(分钟/小时/天)数据有效期,默认45,单位天。
    monthMetricsDataTTL: ${SW_STORAGE_ES_MONTH_METRIC_DATA_TTL:18} # 月级指标数据有效期,默认18,单位月
    # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html
    # 批量处理配置 
    bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # # 每2000个请求执行一次批量
    flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} ## 无论请求的数量如何,每10秒刷新一次堆
    concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2}  # 并发请求的数量
    resultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000}
    metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}  # elasticsearch 查询的最大数量
    segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200} # elasticsearch 查询段最大数量

  • 重点修改 storage 配置项,通过 storage.selector 配置项来设置具体使用的存储器。
  • storage.elasticsearch 配置项,设置使用 Elasticsearch 6.X 版本作为存储器。胖友可以主要修改 nameSpace clusterNodes 两个配置项即可,设置使用的 Elasticsearch 的集群和命名空间。
  • storage.elasticsearch7 配置项,设置使用 Elasticsearch 7.X 版本作为存储器。

③ 启动 SkyWalking OAP 服务

$ bin/oapService.sh

SkyWalking OAP started successfully!

是否 真正 启动成功,胖友打开 logs/skywalking-oap-server.log 日志文件,查看是否有错误日志。首次启动时,因为 SkyWalking OAP 会创建 Elasticsearch 的索引,所以会“疯狂”的打印日志。最终,我们看到如下日志,基本可以代表 SkyWalking OAP 服务启动成功:

友情提示:因为首次启动会创建 Elasticsearch 索引,所以可能会比较慢。

2026-03-18T15:04:37+00:00,635 - org.eclipse.jetty.server.Server - 444 [main] INFO  [] - Started @35249ms

2.2.2 安装UI

这样安装Backend后端服务就已经完毕了,接下来我们安装UI。先来看一下UI的配置文件:

cat webapp/webapp.yml
#默认启动端口
server:
  port: 8081

spring:
  cloud:
    gateway:
      routes:
        - id: oap-route
          uri: lb://oap-service
          predicates:
            - Path=/graphql/**
    discovery:
      client:
        simple:
          instances:
            oap-service:
              - uri: http://127.0.0.1:12800
            # - uri: http://<oap-host-1>:<oap-port1>
            # - uri: http://<oap-host-2>:<oap-port2>
  mvc:
    throw-exception-if-no-handler-found: true #出现错误时, 直接抛出异常
  web:
    resources:
      add-mappings: true #关闭工程中的资源文件建立映射
management:
  server:
    base-path: /manage
# 设置Agent命名空间,它用来隔离追踪和监控数据,当两个应用使用不同的名称空间时,跨进程传播链会中断。
agent.namespace=${SW_AGENT_NAMESPACE:default-namespace}
 
# 设置服务名称,会在 Skywalking UI 上显示的名称
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
 
# 每 3秒采集的样本跟踪比例,如果是负数则表示 100%采集
agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1}
 
# 启用 Debug ,如果为 true 则将把所有检测到的类文件保存在"/debug"文件夹中
# agent.is_open_debugging_class = ${SW_AGENT_OPEN_DEBUG:true}
 
# 后端的 collector 端口及地址
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.2.215:11800}
 
# 日志级别
logging.level=${SW_LOGGING_LEVEL:DEBUG}

目前的默认配置不用修改就可以使用,启动UI程序:

[root@localhost bin]# webappService.sh

然后我们就可以通过浏览器访问Skywalking的可视化页面了,访问地址:http://虚拟机IP地址:8080,如果 出现下面的图,就代表安装成功了。

SkyWalking安装及入门

/bin/startup.sh可以同时启动backend和ui,后续可以执行该文件进行重启。

2.3 SkyWalking Agent

① Agent 软件包

我们需要将 apache-skywalking-apm-bin/agent 目录,拷贝到 Java 应用所在的服务器上。这样,Java 应用才可以配置使用该 SkyWalking Agent。我们来看看 Agent 目录下有哪些:

$ ls -ls

total 35176
    0 drwxr-xr-x@  7 yunai  staff       224 Dec 24 14:20 activations
    0 drwxr-xr-x@  4 yunai  staff       128 Dec 24 14:21 bootstrap-plugins
    0 drwxr-xr-x@  3 yunai  staff        96 Dec 24 14:12 config # SkyWalking Agent 配置
    0 drwxr-xr-x@  3 yunai  staff        96 Jan  2 19:29 logs # SkyWalking Agent 日志
    0 drwxr-xr-x@ 13 yunai  staff       416 Dec 24 14:22 optional-plugins # 可选插件
    0 drwxr-xr-x@ 68 yunai  staff      2176 Dec 24 14:20 plugins # 插件
35176 -rw-r--r--@  1 yunai  staff  18006420 Dec 24 14:12 skywalking-agent.jar # SkyWalking Agent

② 配置 Java 启动脚本

# SkyWalking Agent 配置
export SW_AGENT_NAME=demo-application # 配置 Agent 名字。一般来说,我们直接使用 Spring Boot 项目的 `spring.application.name` 。
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 # 配置 Collector 地址。
export SW_AGENT_SPAN_LIMIT=2000 # 配置链路的最大 Span 数量。一般情况下,不需要配置,默认为 300 。主要考虑,有些新上 SkyWalking Agent 的项目,代码可能比较糟糕。
export JAVA_AGENT=-javaagent:/Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar # SkyWalking Agent jar 地址。

# Jar 启动
java -jar $JAVA_AGENT -jar lab-39-demo-2.2.2.RELEASE.jar
  • 通过环境变量,进行配置。
  • 更多的变量,可以在 /skywalking/apache-skywalking-apm-bin/agent/config/agent.config 查看。要注意,可能有些变量是被注释掉的,例如说 SW_AGENT_SPAN_LIMIT 对应的 agent.span_limit_per_segment

③ 执行脚本:

直接执行上述的 Shell 脚本,启动 Java 项目。在启动日志中,我们可以看到 SkyWalking Agent 被加载的日志。日志示例如下:

DEBUG 2026-03-18T15:04:37+00:00:400 main AgentPackagePath : The beacon class location is jar:file:/Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar!/org/apache/skywalking/apm/agent/core/boot/AgentPackagePath.class.
INFO 2026-03-18T15:04:37+00:00:402 main SnifferConfigInitializer : Config file found in /Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/config/agent.config.

同时,也可以在 /Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/agent/logs/skywalking-api.log 查看对应的 SkyWalking Agent 日志。日志示例如下:

DEBUG 2026-03-18T15:04:37+00:00:539 SkywalkingAgent-5-ServiceAndEndpointRegisterClient-0 ServiceAndEndpointRegisterClient : ServiceAndEndpointRegisterClient running, status:CONNECTED.
  • 这里,我们看到 status:CONNECTED ,表示 SkyWalking Agent 连接 SkyWalking OAP 服务成功。

3. UI页面元素解析

3.1页面简介

  1. 功能选项卡选择区. 这里列出了主要特性。更多细节将在下面介绍.
  2. 重载区. 控制重新加载机制,包括定期重新加载或手动重新加载.
  3. 时间选择器. 控制时区和时间范围。这里有一个中文/英文切换按钮,默认,UI使用浏览器语言设置

SkyWalking安装及入门

3.2 仪表板

指示板提供服务、服务实例和端点的指标。这里需要了解一些度量术语

吞吐量CPM,表示每分钟的调用 Apdex分数,参考Apdex in WIKI 响应时间百分比,包括 p99, p95, p90, p75, p50.参考percentile in WIKI SLA表示成功率。对于HTTP,表示响应为200的请求 服务、实例和仪表板选择器可以手动重新加载,而不是重新加载整个页面。注意,重载区域** 不会重载这些选择器

SkyWalking安装及入门

这里,我们会看到 SkyWalking 中非常重要的三个概念:

  • 服务(Service) :表示对请求提供相同行为的一系列或一组工作负载。在使用 Agent 或 SDK 的时候,你可以定义服务的名字。如果不定义的话,SkyWalking 将会使用你在平台(例如说 Istio)上定义的名字。 这里,我们可以看到 Spring Boot 应用的 服务 "demo-application" ,就是我们在环境变量 SW_AGENT_NAME 中所定义的。
  • 服务实例(Service Instance) :上述的一组工作负载中的每一个工作负载称为一个实例。就像 Kubernetes 中的 pods 一样, 服务实例未必就是操作系统上的一个进程。但当你在使用 Agent 的时候, 一个服务实例实际就是操作系统上的一个真实进程。 这里,我们可以看到 Spring Boot 应用的 服务 {agent_name}-pid:{pid}@{hostname} ,由 Agent 自动生成。
  • 端点(Endpoint) :对于特定服务所接收的请求路径, 如 HTTP 的 URI 路径和 gRPC 服务的类名 + 方法签名。 这里,我们可以看到 Spring Boot 应用的一个 端点 ,为 API 接口 /product/list

3.3 Global全局维度

SkyWalking安装及入门

SkyWalking安装及入门

  • Services load:服务每分钟请求数
  • Slow Services:慢响应服务,单位ms
  • Un-Health services(Apdex):Apdex性能指标,1为满分。
  • Global Response Latency:百分比响应延时,不同百分比的延时时间,单位ms
  • Global Heatmap:服务响应时间热力分布图,根据时间段内不同响应时间的数量显示颜色深度
  • 底部栏:展示数据的时间区间,点击可以调整。

3.4 service维度

SkyWalking安装及入门

SkyWalking安装及入门

  • Service Apdex(数字):当前服务的评分
  • Service Apdex(折线图):不同时间的Apdex评分
  • Successful Rate(数字):请求成功率
  • Successful Rate(折线图):不同时间的请求成功率
  • Servce Load(数字):每分钟请求数
  • Servce Load(折线图):不同时间的每分钟请求数
  • Service Avg Response Times:平均响应延时,单位ms
  • Global Response Time Percentile:百分比响应延时
  • Servce Instances Load:每个服务实例的每分钟请求数
  • Show Service Instance:每个服务实例的最大延时
  • Service Instance Successful Rate:每个服务实例的请求成功率

3.5 Instance维度

SkyWalking安装及入门

SkyWalking安装及入门

  • Service Instance Load:当前实例的每分钟请求数
  • Service Instance Thorughput:当前实例吞吐量
  • Service Instance Successful Rate:当前实例的请求成功率
  • Service Instance Latency:当前实例的响应延时
  • JVM CPU:jvm占用CPU的百分比
  • JVM Memory:JVM内存占用大小,单位m
  • JVM GC Time:JVM垃圾回收时间,包含YGC和OGC
  • JVM GC Count:JVM垃圾回收次数,包含YGC和OGC
  • JVM Thread Count :JVM线程数
  • JVM Thread state Count :JVM活动的线程数
  • JVM Thread Count :JVM线程数
  • CLR XX:类似JVM虚拟机

3.6 Endpoint端点(API)维度

SkyWalking安装及入门

SkyWalking安装及入门

  • Endpoint Load in Current Service:每个端点的每分钟请求数
  • Slow Endpoints in Current Service:每个端点的最慢请求时间,单位ms
  • Successful Rate in Current Service:每个端点的请求成功率
  • Endpoint Load:当前端点每个时间段的请求数据
  • Endpoint Avg Response Time:当前端点每个时间段的请求行响应时间
  • Endpoint Response Time Percentile:当前端点每个时间段的响应时间占比
  • Endpoint Successful Rate:当前端点每个时间段的请求成功率

3.7 拓扑图

SkyWalking安装及入门

Skywalking提供拓扑图,直观的查看服务之间的调用关系

3.8 追踪

在Skywalking中,每一次用户发起一条请求,就可以视为一条追踪数据,每条追踪数据携带有一个ID值。追踪数据在追踪页面中可以进行查询:

左侧:api接口列表,红色-异常请求,蓝色-正常请求 右侧:api追踪列表,api请求连接各端点的先后顺序和时间

SkyWalking安装及入门

3.9 数据库维度

SkyWalking安装及入门

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

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

3.10 性能剖析

  • 剖析端点的响应时间必须大于监控间隔时间

由于性能栈快照有一定的性能消耗,所以采集周期不宜过密, SkyWalking 目前不支持小于 10ms 的采集间隔。所以如果问题方法执行时间小于 10ms,此方法并不适用。同时剖析端点的响应速度如果小于监控时间间隔,也无法进行监控采集。

SkyWalking安装及入门

  • 左侧列表:任务及对应的采样请求

表格中从左到右分别展示了方法名、开始时间、执行时长、执行时间占比、API类型、服务名和跨度信息

  • 右侧:端点链路及每个端点的堆栈信息

从左右到右分别展示了栈帧名称、该栈帧总计耗时(包含其下面所有自栈帧)、当前栈帧自身耗时和监控次数

3.11 日志

  • pom中引入相关依赖,版本与SkyWalking一致
<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-logback-1.x</artifactId>
    <version>8.5.0</version>
</dependency>
  • 在logback.xml中加入配置
<appender name="msystem-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
    <!-- 日志输出编码 -->
    <encoder>
        <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
        </pattern>
    </encoder>
</appender>

<root level="info">
    <appender-ref ref="msystem-log"/>
</root>
  • 展示结果

SkyWalking安装及入门

3.12 告警

https://www.cnblogs.com/heihaozi/p/apache-skywalking-alarm.html