芋道 SkyWalking 9.X 极简入门(新版本)

  |   0 评论   |   0 浏览

1. 概述

Service Mesh

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 单机环境,步骤如下:

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 发布版。

下载 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

| |
| -- |

2.3 搭建 SkyWalking OAP Server

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

修改 OAP 配置文件

  • 通过 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 地址,界面如下图:

SkyWalking UI

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

| |
| -- |

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 界面。

SkyWalking UI 界面 —— 首页

这里,我们可以看到 Spring Boot 应用的服务"demo-application",就是我们在环境变量 SW_AGENT_NAME 中所定义的。

服务(Service) :表示对请求提供相同行为的一系列或一组工作负载。在使用 Agent 或 SDK 的时候,你可以定义服务的名字。如果不定义的话,SkyWalking 将会使用你在平台(例如说 Istio)上定义的名字。

③ 点击 demo-application 这个服务名,可以看到该服务的【整体监控信息】。

SkyWalking UI 界面 —— Override

④ 点击 [Instance] 选项卡,可以查到该服务的【实例列表】。

SkyWalking UI 界面 —— Instance

服务实例(Service Instance) :上述的一组工作负载中的每一个工作负载称为一个实例。就像 Kubernetes 中的 pods 一样, 服务实例未必就是操作系统上的一个进程。但当你在使用 Agent 的时候, 一个服务实例实际就是操作系统上的一个真实进程。

④ 点击 [Endpoint] 选项卡,可以查看到该服务的【端点列表】。

SkyWalking UI 界面 —— Endpoint

端点(Endpoint) :对于特定服务所接收的请求路径, 如 HTTP 的 URI 路径和 gRPC 服务的类名 + 方法签名。 这里,我们可以看到 Spring Boot 应用的一个 端点 ,为 API 接口 /demo/echo

⑤ 点击 [Topology] 选项卡,可以查看到该服务的【拓扑图】。

SkyWalking UI 界面 —— Topology

⑥ 点击 [Trace] 选项卡,可以查看到该服务的【链路】。

SkyWalking UI 界面 —— Trace

⑦ 点击 [Log] 选项卡,可以查看到该服务的【日志】。

SkyWalking UI 界面 —— Log

SkyWalking 的日志使用,可见 《SkyWalking Java agent’s toolkits》 文档。

2.6 SkyWalking Java Agent【IDEA】

考虑到偶尔我们需要在 IDE 中,也希望使用 SkyWalking Agent,可参考下图配置:

IDEA 界面

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