1.1 概念
SkyWalking 是什么?
FROM http://skywalking.apache.org/
分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
1.2 功能列表
SkyWalking 有哪些功能?
FROM http://skywalking.apache.org/
- 多种监控手段。可以通过语言探针和 service mesh 获得监控是数据。
- 多个语言自动探针。包括 Java,.NET Core 和 Node.JS。
- 轻量高效。无需大数据平台,和大量的服务器资源。
- 模块化。UI、存储、集群管理都有多种机制可选。
- 支持告警。
- 优秀的可视化解决方案。
1.3 整体架构
SkyWalking 整体架构如何?
整个架构,分成上、下、左、右四部分:
考虑到让描述更简单,我们舍弃掉 Metric 指标相关,而着重在 Tracing 链路相关功能。
- 上部分 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 搭建
FROM https://www.elastic.co/cn/products/elasticsearch
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。
参考《Elasticsearch 极简入门》的「1. 单机部署」小节,搭建一个 Elasticsearch 单机服务。
不过要注意,本文使用的是 Elasticsearch 7.5.1
版本。因为 SkyWalking 6.6.0
版本,增加了对 Elasticsearch 7.X 版本的支持。当然,如果胖友使用 Elasticsearch 6.X 版本也是可以的。
2.2 下载 SkyWalking 软件包
对于 SkyWalking 的软件包,有两种方式获取,各自选择一种:
- 官方包
- 手动编译
一般情况下,我们建议使用官方包。手动编译,更多是尝鲜或者等着急修复的 BUG 的版本。
2.2.1 官方包
在 http://skywalking.apache.org/downloads/ 下,我们下载操作系统对应的发布版。
这里,我们选择 Binary Distribution for ElasticSearch 7 (Linux) 版本,如果是 Mac 环境,再加上想使用 Elasticsearch 7.X 版本作为存储。如果想用 Elasticsearch 6.X 版本作为存储,记得下载 Binary Distribution (Linux) 版本。
① 下载:
# 创建目录
$ mkdir -p /Users/yunai/skywalking
$ cd /Users/yunai/skywalking
# 下载
$ wget http://mirror.bit.edu.cn/apache/skywalking/6.6.0/apache-skywalking-apm-es7-6.6.0.tar.gz
② 解压:
# 解压
$ 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
2.2.2 手动编译
友情提示:如果没有编译 SkyWalking 源码的诉求,可以跳过本小节。
需要前置安装如下:
- GIT
- JDK 8+
- Maven
① 克隆代码:
$ git clone https://github.com/apache/skywalking.git
- 因为网络问题,可能克隆会有点久。
② 初始化子模块:
$ cd skywalking
$ git submodule init
$ git submodule update
③ 编译
$ ./mvnw clean package -DskipTests
- 编译过程,如果机子比较差,花费时间会比较久。
④ 查看编译结果
$ cd apm-dist # 编译结果目录
$ cd target
$ tar -zxvf apache-skywalking-apm-bin.tar.gz # 解压 Linux 包
$ cd apache-skywalking-apm-bin
$ 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
2.3 SkyWalking OAP 搭建
① 修改 OAP 配置文件
友情提示:如果配置文件,适合 SkyWalking 6.X 版本。
$ vi config/application.ymlstorage:elasticsearch7:nameSpace:${SW_NAMESPACE:"elasticsearch"}clusterNodes:${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}protocol:${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}# trustStorePath: ${SW_SW_STORAGE_ES_SSL_JKS_PATH:"../es_keystore.jks"}# trustStorePass: ${SW_SW_STORAGE_ES_SSL_JKS_PASS:""}user:${SW_ES_USER:""}password:${SW_ES_PASSWORD:""}indexShardsNumber:${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}indexReplicasNumber:${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}# Those data TTL settings will override the same settings in core module.recordDataTTL:${SW_STORAGE_ES_RECORD_DATA_TTL:7}# Unit is dayotherMetricsDataTTL:${SW_STORAGE_ES_OTHER_METRIC_DATA_TTL:45}# Unit is daymonthMetricsDataTTL:${SW_STORAGE_ES_MONTH_METRIC_DATA_TTL:18}# Unit is month# Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.htmlbulkActions:${SW_STORAGE_ES_BULK_ACTIONS:1000}# Execute the bulk every 1000 requestsflushInterval:${SW_STORAGE_ES_FLUSH_INTERVAL:10}# flush the bulk every 10 seconds whatever the number of requestsconcurrentRequests:${SW_STORAGE_ES_CONCURRENT_REQUESTS:2}# the number of concurrent requestsresultWindowMaxSize:${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000}metadataQueryMaxSize:${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}segmentQueryMaxSize:${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}# h2:# driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}# url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}# user: ${SW_STORAGE_H2_USER:sa}# metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
-
storage.elasticsearch7
配置项,设置使用 Elasticsearch 7.X 版本作为存储器。- 这里,我们打开注释,并记得通过
nameSpace
设置 Elasticsearch 集群名。
- 这里,我们打开注释,并记得通过
-
storage.elasticsearch
配置项,设置使用 Elasticsearch 6.X 版本作为存储器。- 这里,我们无需做任何改动。
- 如果胖友使用 Elasticsearch 6.X 版本作为存储器,记得设置这个配置项,而不是
storage.elasticsearch7
配置项。
-
storage.h2
配置项,设置使用 H2 作为存储器。- 这里,我们需要手动注释掉,因为 H2 是默认配置的存储器。
友情提示:如果配置文件,适合 SkyWalking 7.X 版本。
- 重点修改
storage
配置项,通过storage.selector
配置项来设置具体使用的存储器。 -
storage.elasticsearch
配置项,设置使用 Elasticsearch 6.X 版本作为存储器。胖友可以主要修改nameSpace
、clusterNodes
两个配置项即可,设置使用的 Elasticsearch 的集群和命名空间。 -
storage.elasticsearch7
配置项,设置使用 Elasticsearch 7.X 版本作为存储器。 - 还有 MySQL、H2、InfluxDB 等等存储器的配置可以选择。
② 启动 SkyWalking OAP 服务
$ bin/oapService.sh
SkyWalking OAP started successfully!
是否真正启动成功,胖友打开 logs/skywalking-oap-server.log
日志文件,查看是否有错误日志。首次启动时,因为 SkyWalking OAP 会创建 Elasticsearch 的索引,所以会“疯狂”的打印日志。最终,我们看到如下日志,基本可以代表 SkyWalking OAP 服务启动成功:
友情提示:因为首次启动会创建 Elasticsearch 索引,所以可能会比较慢。
2020-01-02 18:22:53,635 - org.eclipse.jetty.server.Server - 444 [main] INFO [] - Started @35249ms
2.4 SkyWalking UI 搭建
建议增强版图标化UI:https://github.com/apache/skywalking-booster-ui
① 启动 SkyWalking UI 服务
bin/webappService.sh
SkyWalking Web Application started successfully!
是否真正启动成功,胖友打开 logs/logs/webapp.log
日志文件,查看是否有错误日志。最终,我们看到如下日志,基本可以代表 SkyWalking UI 服务启动成功:
2020-01-02 18:27:02.824 INFO 48250 --- [main] o.a.s.apm.webapp.ApplicationStartUp : Started ApplicationStartUp in 7.774 seconds (JVM running for 8.316)
如果想要修改 SkyWalking UI 服务的参数,可以编辑 webapp/webapp.yml
配置文件。例如说:
-
server.port
:SkyWalking UI 服务端口。 -
collector.ribbon.listOfServers
:SkyWalking OAP 服务地址数组。因为 SkyWalking UI 界面的数据,是通过请求 SkyWalking OAP 服务来获得的。
② 访问 UI 界面:
浏览器打开 http://127.0.0.1:8080
。界面如下图:
2.5 SkyWalking Agent
大多数情况下,我们在启动项目的 Shell 脚本上,通过 -javaagent
参数进行配置 SkyWalking Agent 。
2.3.1 Shell
① 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
- 关于 SkyWalking Agent 提供的插件列表,可以看看《SkyWalking 文档 —— 插件支持列表》。
在本机测试,所以无需拷贝,SkyWalking Agent 目录是 /Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/
。
这里提供了一个最简的 Spring Boot 应用 lab-39-demo-2.2.2.RELEASE.jar。对应 Github 仓库是 lab-39-demo。
② 配置 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
- 通过环境变量,进行配置。
- 更多的变量,可以在
/work/programs/skywalking/apache-skywalking-apm-bin/agent/config/agent.config
查看。要注意,可能有些变量是被注释掉的,例如说SW_AGENT_SPAN_LIMIT
对应的agent.span_limit_per_segment
。
③ 执行脚本:
直接执行上述的 Shell 脚本,启动 Java 项目。在启动日志中,我们可以看到 SkyWalking Agent 被加载的日志。日志示例如下:
DEBUG 2020-01-02 19:29:29: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 2020-01-02 19:29:29: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 2020-01-02 19:37:22:539 SkywalkingAgent-5-ServiceAndEndpointRegisterClient-0 ServiceAndEndpointRegisterClient : ServiceAndEndpointRegisterClient running, status:CONNECTED.
- 这里,我们看到
status:CONNECTED
,表示 SkyWalking Agent 连接 SkyWalking OAP 服务成功。
④ 简单测试
完事,可以去 SkyWalking UI 查看是否链路收集成功。
1、首先,使用浏览器,访问下 http://127.0.0.1:8079/demo/echo 地址,请求下 Spring Boot 应用提供的 API。因为,我们要追踪下该链路。
2、然后,继续使用浏览器,打开 http://127.0.0.1:8080/ 地址,进入 SkyWalking UI 界面。如下图所示:
这里,我们会看到 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 自动生成。关于它,我们在「5.1 hostname」小节中,有进一步的讲解,胖友可以瞅瞅。 -
端点(Endpoint) :对于特定服务所接收的请求路径, 如 HTTP 的 URI 路径和 gRPC 服务的类名 + 方法签名。
这里,我们可以看到 Spring Boot 应用的一个端点,为 API 接口
/demo/echo
。
3、之后,点击「拓扑图」菜单,进入查看拓扑图的界面。如下图所示:
4、再之后,点击「追踪」菜单,进入查看链路数据的界面。如下图所示:
2.3.2 IDEA
我们统一使用 IDEA 作为开发 IDE ,所以忽略 Eclipse 的配置方式。
具体参考下图,比较简单:
3. 搭建 SkyWalking 集群环境
在生产环境下,我们一般推荐搭建 SkyWalking 集群环境。
相关推荐
skywalking-oap-server-9.4离线镜像可安装版本
skywalking-oap-server-8.7-es离线镜像安装包
skywalking-ui-9.4离线镜像安装版本
skywalking-client-js运行时库位于 。 npm install skywalking-client-js --save 快速开始 skywalking-client-js需要SkyWalking 8.2+ 用户可以使用register方法自动加载和报告数据。 import ClientMonitor from '...
skywalking-ui-8.6-ui离线镜像安装包
在这个"apache-skywalking-java-agent-8.9.0"版本中,我们将探讨这个Java代理如何监控JVM服务,并深入理解其相关知识点。 1. **SkyWalking Java Agent**:SkyWalking的Java代理是一个自动探针,可以无侵入地附加到...
apache-skywalking-java-agent-8.13.0 apache-skywalking-apm-9.0.0 目前市面上开源的APM系统主要有CAT、Zipkin、Pinpoint、SkyWalking,大都是参考Google的Dapper实现的. Skywalking是本土开源的基于字节码注入的...
- 将`skywalking-agent.zip`解压缩,并将其放置在Java应用的启动目录下 - 修改`agent.config`,根据实际情况配置服务名、Collector地址等信息 - 在Java应用启动命令中加入 `-javaagent` 参数,指向SkyWalking ...
SkyWalking-Python :Apache SkyWalking的Python代理,它为Python项目提供了本机跟踪功能。 SkyWalking :一个APM(应用程序性能监视器)系统,专门为微服务,云原生和基于容器(Docker,Kubernetes,Mesos)的...
SkyWalking适用于分布式系统的应用程序性能监控工具,专为微服务、云原生和基于容器 (Kubernetes) 的架构而设计。 SkyWalking在8.8.0版本以后将agent进行了单独拆分,因此...apache-skywalking-java-agent-8.15.0.tgz
在这个"skywalking-es7-8.7.0"安装包中,SkyWalking 与 Elasticsearch 7 版本进行了集成,提供了一个高效的数据存储和分析平台。 1. **SkyWalking 的核心功能**: - **分布式追踪**:SkyWalking 可以收集服务间的...
2. 安装 Apache SkyWalking 的 `apache-skywalking-apm-es7-8.4.0`,确保其与 Elasticsearch 版本兼容。 3. 配置 SkyWalking 的 `application.yml` 或相关配置,连接到 Elasticsearch 实例。 4. 启动 Elasticsearch ...
skywalking的如下版本apache-skywalking-apm-bin-es7.rar skywalking的如下版本apache-skywalking-apm-bin-es7.rar skywalking的如下版本apache-skywalking-apm-bin-es7.rar skywalking的如下版本apache-skywalking-...
在“apache-skywalking-apm-es7-8.7.0”这个版本中,它支持Elasticsearch 7.x版本,是针对SpringCloud应用进行链路追踪的理想工具。 **SkyWalking 的核心功能** 1. **链路追踪**:SkyWalking 提供了强大的分布式...
此压缩包 "apache-skywalking-apm-es7-8.7.0.tar.gz" 包含了针对 Elasticsearch 7.x 版本的 SkyWalking 平台的安装文件,版本为 8.7.0。Apache 标签表明了这是 Apache 软件基金会的一个项目。 SkyWalking 的核心...
# 分布式链路追踪_skywalking_学习(3) skywalking_plugins.jar skywalking-alarm.jar
`apache-skywalking-java-agent-8.14.0`是SkyWalking的Java代理,它是一个动态库,可以在不修改应用程序源代码的情况下,为Java应用程序提供监控功能。Java Agent的主要作用是拦截和分析应用程序的调用链,收集性能...
skywalking-agent-java-8.3.0
在本例中,你已经下载了 Apache SkyWalking 的 8.4.0 版本的压缩包 "apache-skywalking-apm-8.4.0.tar.gz",接下来我们将详细介绍如何安装、配置和使用这个工具。 1. **下载与解压**: 首先,你需要将下载的 `.tar...
Linux 上安装 Skywalking .../skywalking-agent/skywalking-agent.jar -jar yourApp.jar ``` 这样,Skywalking 就安装完成了。在 Linux 环境中,Skywalking 可以轻松地监控应用程序的性能和行为。