芋道 SkyWalking 9.X 极简入门(新版本)
1. 概述
1.1 概念
SkyWalking 是什么?
Application performance monitor tool for distributed systems, especially designed for microservices, cloud native and container-based (Kubernetes) architectures.
应用性能监控平台,可用于分布式系统,支持微服务、云原生、Docker、Kubernetes 等多种架构场景。
1.2 功能列表
SkyWalking 有哪些功能?
- 多种监控手段:通过语言探针和 Service Mesh 等手段,获得链路、日志、指标等监控数据
- 多个语言探针:Java、.Net Core、PHP、NodeJS、Golang、LUA、Rust、C++ 等
- 轻量级高性能:无需大数据组件,无需大量的硬件资源,且对应用实例的负载消耗极低
- 模块化架构:数据传输、数据存储,注册发现等模块,可替换不同的基础设施实现
- 端到端的监控:Vue、React 等前端,Java、.Net Core、PHP、NodeJS、Golang、Istio 等后端
- 告警机制:内置 Webhooks 发送事件通知,支持通过 HTTP、gRPC、Slack 等方式
- 可视化界面:好用的监控后台,可支持自定义配置,或是集成你自己的
1.3 整体架构
SkyWalking 整体架构如何?
整个架构,分成上、下、左、右四部分:
- 【左】 Agent :在应用中,收集 Trace、Log、Metrics 等监控数据,使用 RPC、RESTful API、Kafka 等 Transport 传输方式,发送给 OAP 服务
- 【下】 OAP :首先 Receiver 接收 Agent 发送的监控数据,然后 Aggregator 进行聚合计算,之后存储到 Storage 外部存储器,最终提供给 GUI 查询数据
- 【右】 Storage :存储监控数据,支持 Elasticsearch、MySQL、TiDB、H2 等多种数据库
- 【上】 GUI :UI 可视化界面,提供监控数据的查询后台
1.4 官方文档
在 https://skywalking.apache.org/docs/main/latest/readme/ 地址下,提供了 SkyWalking 的英文文档。
考虑到大多数胖友的英语水平和艿艿不相伯仲,再加上胖友一开始对 SkyWalking 比较陌生,所以比较推荐先阅读 https://github.com/SkyAPM/document-cn-translation-of-skywalking 地址,提供了 SkyWalking 的中文文档。
考虑到胖友使用 SkyWalking 的目的,是实现分布式链路追踪的功能,所以最好去了解下相关的知识。这里推荐阅读两篇文章:
2. 搭建 SkyWalking 单机环境
考虑到让胖友更快的入门,我们来搭建一个 SkyWalking 单机环境,步骤如下:
- 第一步,搭建一个 Elasticsearch 服务
- 第二步,下载 SkyWalking 软件包
- 第三步,搭建一个 SkyWalking OAP 服务
- 第四步,启动一个 Spring Boot 应用,并配置 SkyWalking Agent 探针
- 第五步,搭建一个 SkyWalking UI 服务
仅仅五步,按照艿艿标题党的性格,应该给本文取个《10 分钟快速搭建 SkyWalking 服务》标题才对,哈哈哈。
|
友情提示:推荐使用 Elasticsearch 存储数据,因为 SkyWalking 开发团队所在公司,生产环境都是使用它。
| |
| -- |
2.1 搭建 Elasticsearch
FROM https://www.elastic.co/cn/products/elasticsearch
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。
参考 《Elasticsearch 极简入门》 的「1. 单机部署」小节,搭建一个 Elasticsearch 单机服务。
本文使用的 Elasticsearch 版本是 8.1.2 。
2.2 下载 SkyWalking 发布版
在 http://skywalking.apache.org/downloads/ 下,我们下载 SkyWalking 发布版。
2.2.1 下载 SkyWalking OAP
|
# 创建目录
mkdir -p /Users/yunai/skywalking
cd /Users/yunai/skywalking
# 下载
wget https://dlcdn.apache.org/skywalking/9.0.0/apache-skywalking-apm-9.0.0.tar.gz
# 解压
tar -zxvf apache-skywalking-apm-9.0.0.tar.gz
# 查看目录
cd apache-skywalking-apm-bin
ls -ls
# 查看目录(结果)
56 -rw-r--r--@ 1 yunai staff 27987 Feb 18 06:08 LICENSE
64 -rw-r--r--@ 1 yunai staff 30503 Feb 18 06:08 NOTICE
8 -rw-r--r--@ 1 yunai staff 1951 Feb 18 06:08 README.txt
0 drwxr-xr-x 12 yunai staff 384 Apr 16 23:53 bin # 执行脚本
0 drwxr-xr-x 21 yunai staff 672 Apr 16 23:53 config # SkyWalking OAP Server 配置文件
0 drwxr-xr-x 5 yunai staff 160 Apr 16 23:53 config-examples
0 drwxr-xr-x@ 29 yunai staff 928 Feb 18 06:08 licenses
0 drwxr-xr-x@ 221 yunai staff 7072 Feb 18 06:08 oap-libs # SkyWalking OAP Server
0 drwxr-xr-x 3 yunai staff 96 Apr 16 23:53 tools
0 drwxr-xr-x 4 yunai staff 128 Apr 16 23:53 webapp # SkyWalking UI
| |
| -- |
2.2.2 下载 SkyWalking Java Agent
|
# 创建目录
mkdir -p /Users/yunai/skywalking
cd /Users/yunai/skywalking
# 下载
wget https://dlcdn.apache.org/skywalking/java-agent/8.10.0/apache-skywalking-java-agent-8.10.0.tgz
# 解压
tar -zxvf apache-skywalking-java-agent-8.10.0.tgz
# 查看目录
cd skywalking-agent
ls -ls
# 查看目录(结果)
32 -rw-r--r--@ 1 yunai staff 12911 Apr 12 23:51 LICENSE
24 -rw-r--r--@ 1 yunai staff 10003 Apr 12 23:51 NOTICE
0 drwxr-xr-x@ 10 yunai staff 320 Apr 12 23:52 activations
0 drwxr-xr-x@ 5 yunai staff 160 Apr 12 23:52 bootstrap-plugins
0 drwxr-xr-x@ 3 yunai staff 96 Apr 12 23:51 config # SkyWalking Java Agent 配置文件
0 drwxr-xr-x@ 3 yunai staff 96 Apr 12 23:51 licenses
0 drwxr-xr-x@ 2 yunai staff 64 Apr 12 23:51 logs # SkyWalking Java Agent 日志文件
0 drwxr-xr-x@ 21 yunai staff 672 Apr 12 23:52 optional-plugins # SkyWalking Java Agent 的可选插件
0 drwxr-xr-x@ 6 yunai staff 192 Apr 12 23:52 optional-reporter-plugins
0 drwxr-xr-x@ 118 yunai staff 3776 Apr 12 23:52 plugins # SkyWalking Java Agent 的开启插件
39808 -rw-r--r--@ 1 yunai staff 20378894 Apr 12 23:51 skywalking-agent.jar # SkyWalking Java Agent
| |
| -- |
- 关于 SkyWalking Agent 提供的插件列表,可以看看《SkyWalking 文档 —— 插件支持列表》
2.3 搭建 SkyWalking OAP Server
① 修改 OAP 配置文件 apache-skywalking-apm-bin/config/application.yml
- 通过
storage.selector
配置项来设置具体使用的存储器。
② 启动 SkyWalking OAP 服务
|
bin/oapService.sh
SkyWalking OAP started successfully!
| |
| -- |
是否真正启动成功,胖友打开 logs/skywalking-oap-server.log
日志文件,查看是否有错误日志。 首次启动时,因为 SkyWalking OAP 会创建 Elasticsearch 的索引,所以会“疯狂”的打印日志。
友情提示:因为首次启动会创建 Elasticsearch 索引,所以可能会比较慢。
最终,我们看到如下日志,基本可以代表 SkyWalking OAP 服务启动成功:
|
2022-04-17 00:41:53,692 - org.apache.skywalking.oap.server.starter.OAPServerBootstrap - 53 [main] INFO [] - Version of OAP: 9.0.0-89644fe (20220217220813)
| |
| -- |
2.4 SkyWalking UI 搭建
① 启动 SkyWalking UI 服务
|
bin/webappService.sh
SkyWalking Web Application started successfully!
| |
| -- |
【可选】如果想要修改 SkyWalking UI 服务的参数,可以编辑 webapp/webapp.yml
配置文件。例如说:
server.port
:SkyWalking UI 服务端口。spring.cloud.discovery.client.simple.instances.oap-service
:SkyWalking OAP 服务地址数组。因为 SkyWalking UI 界面的数据,是通过请求 SkyWalking OAP 服务来获得的。
② 访问 UI 界面:
浏览器打开 http://127.0.0.1:8080 地址,界面如下图:
2.5 SkyWalking Java Agent【Shell】
在启动项目的 Shell 脚本上,可以通过 -javaagent
参数进行配置 SkyWalking Java Agent。
2.5.1 上传 Agent 软件包
我们需要将 skywalking-agent
目录,拷贝到 Java 应用所在的服务器上。这样,Java 应用才可以配置使用该 SkyWalking Agent。
因为本文是在本机测试,所以无需拷贝,SkyWalking Agent 目录是 /Users/yunai/skywalking/skywalking-agent
。
考虑到方便胖友,艿艿这里提供了一个最简的 Spring Boot 应用 lab-39-demo-2.2.2.RELEASE.jar。对应 Github 仓库是 lab-39-demo。
2.5.2 配置 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/skywalking-agent/skywalking-agent.jar # SkyWalking Agent jar 地址。
# Jar 启动
java -jar $JAVA_AGENT -jar lab-39-demo-2.2.2.RELEASE.jar
| |
| -- |
- 通过环境变量,进行配置。
- 更多的变量,可以在
/Users/yunai/skywalking/skywalking-agent/config/agent.config
查看。要注意,可能有些变量是被注释掉的,例如说SW_AGENT_SPAN_LIMIT
对应的agent.span_limit_per_segment
。
2.5.3 启动 Spring Boot 项目
直接执行上述的 Shell 脚本,启动 Java 项目。在启动日志中,我们可以看到 SkyWalking Agent 被加载的日志。日志示例如下:
|
DEBUG 2022-04-17 01:14:14:250 main AgentPackagePath : The beacon class location is jar:file:/Users/yunai/skywalking/skywalking-agent/skywalking-agent.jar!/org/apache/skywalking/apm/agent/core/boot/AgentPackagePath.class.
INFO 2022-04-17 01:14:14:252 main SnifferConfigInitializer : Config file found in /Users/yunai/skywalking/skywalking-agent/config/agent.config.
| |
| -- |
同时,也可以在 /Users/yunai/skywalking/skywalking-agent/logs/skywalking-api.log
查看对应的 SkyWalking Agent 日志。
2.5.4 简单测试
启动完成后,可以去 SkyWalking UI 查看是否链路收集成功。
① 访问下 http://127.0.0.1:8079/demo/echo 地址,请求下 Spring Boot 应用提供的 API。因为,我们要追踪下该链路。
② 打开 http://127.0.0.1:8080/ 地址,进入 SkyWalking UI 界面。
这里,我们可以看到 Spring Boot 应用的服务为 "demo-application"
,就是我们在环境变量 SW_AGENT_NAME
中所定义的。
服务(Service) :表示对请求提供相同行为的一系列或一组工作负载。在使用 Agent 或 SDK 的时候,你可以定义服务的名字。如果不定义的话,SkyWalking 将会使用你在平台(例如说 Istio)上定义的名字。
③ 点击 demo-application
这个服务名,可以看到该服务的【整体监控信息】。
④ 点击 [Instance] 选项卡,可以查到该服务的【实例列表】。
服务实例(Service Instance) :上述的一组工作负载中的每一个工作负载称为一个实例。就像 Kubernetes 中的 pods 一样, 服务实例未必就是操作系统上的一个进程。但当你在使用 Agent 的时候, 一个服务实例实际就是操作系统上的一个真实进程。
④ 点击 [Endpoint] 选项卡,可以查看到该服务的【端点列表】。
端点(Endpoint) :对于特定服务所接收的请求路径, 如 HTTP 的 URI 路径和 gRPC 服务的类名 + 方法签名。 这里,我们可以看到 Spring Boot 应用的一个 端点 ,为 API 接口
/demo/echo
。
⑤ 点击 [Topology] 选项卡,可以查看到该服务的【拓扑图】。
⑥ 点击 [Trace] 选项卡,可以查看到该服务的【链路】。
⑦ 点击 [Log] 选项卡,可以查看到该服务的【日志】。
SkyWalking 的日志使用,可见 《SkyWalking Java agent’s toolkits》 文档。
2.6 SkyWalking Java Agent【IDEA】
考虑到偶尔我们需要在 IDE 中,也希望使用 SkyWalking Agent,可参考下图配置:
3. 搭建 SkyWalking 集群环境
在生产环境下,我们一般推荐搭建 SkyWalking 集群环境。😈 当然,如果公司比较抠门,也可以在生产环境下使用 SkyWalking 单机环境,毕竟 SkyWalking 挂了之后,不影响业务的正常运行。
搭建一个 SkyWalking 集群环境,步骤如下:
- 第一步,搭建一个 Elasticsearch 服务的集群
- 第二步,搭建一个注册中心的 集群 。目前 SkyWalking 支持 Zookeeper、Kubernetes、Consul、Nacos 作为注册中心。
- 第三步,搭建一个 SkyWalking OAP 服务的 集群 ,同时参考 《SkyWalking 文档 —— 集群管理》 ,将 SkyWalking OAP 服务注册到注册中心上
- 第四步,启动一个 Spring Boot 应用,并配置 SkyWalking Agent。另外,在设置 SkyWaling Agent 的
SW_AGENT_COLLECTOR_BACKEND_SERVICES
地址时,需要设置多个 SkyWalking OAP 服务的地址数组 - 第五步,搭建一个 SkyWalking UI 服务的 集群 ,同时使用 Nginx 进行负载均衡。另外,在设置 SkyWalking UI 的
spring.cloud.discovery.client.simple.instances.oap-service
地址时,也需要设置多个 SkyWalking OAP 服务的地址数组
😈 具体的搭建过程,并不复杂,胖友自己去尝试下。
4. Spring Boot 使用示例
在 《芋道 Spring Boot 链路追踪 SkyWalking 入门》 中,我们来详细学习如何在 Spring Boot 中,整合并使用 SkyWalking 收集链路数据。😈 相比「2.5 SkyWaling Agent」来说,我们会提供更加丰富的示例哟。
5. Spring Cloud 使用示例
在 《芋道 Spring Cloud 链路追踪 SkyWalking 入门》 中,我们来详细学习如何在 Spring Cloud 中,整合并使用 SkyWalking 收集链路数据。😈 相比「2.5 SkyWaling Agent」来说,我们会提供更加丰富的示例哟。
666. 彩蛋
本文仅仅是简单的 SkyWalking 入门文章,如果胖友想要更好的使用 SkyWalking,推荐通读下《SkyWalking 文档》 。
想要进一步深入的胖友,也可以阅读如下资料:
😈 最后弱弱的问一句,上完 SkyWaling 之后,有没发现自己系统各种地方慢慢慢!嘻嘻。
标题:芋道 SkyWalking 9.X 极简入门(新版本)
作者:michael
地址:https://blog.junxworks.cn/articles/2023/11/24/1700824897511.html