skywalking安装教程

简介: skywalking安装教程

一、前言

本片文章主要讲解skywalking的安装教程,及其在微服务架构中的链路追踪功能。

本文中的演示项目运行环境如下:

  • springcloud:2020.0.6
  • springboot:2.5.14
  • jdk:1.8
  • skywalking:9.4.0
  • os:windows

二、介绍

skywalking是一个开源的应用性能管理系统可观测性分析平台。用于收集分析聚合可视化来自服务和云原生基础设施的数据。SkyWalking提供了一种简单的方法来保持我们的分布式系统的清晰视图,甚至跨云。这是一个现代的APM(应用性能管理和监控技术),专门为云本地的、基于容器的分布式系统而设计。

SkyWalking在许多不同的场景中为观察监控分布式系统提供了解决方案。首先,与传统方法一样,SkyWalking为服务提供了自动仪器代理,如Java、C#、Node.js、Go、PHP和Nginx LUA。

SkyWalking为服务服务实例端点流程提供了可观察性。

  • 服务:代表为传入请求提供相同行为的一组工作负载。使用仪器代理或SDK时,可以定义服务名
  • 服务实例服务组中的每个工作负载称为一个实例。像Kubernetes中的pods一样,它不需要是单个操作系统进程,但是,如果您使用的是工具代理,实例实际上是一个真正的操作系统进程
  • 端点:服务中用于传入请求的路径,例如HTTP URI路径gRPC服务类+方法签名
  • 流程:操作系统进程。在某些场景中,一个服务实例不是一个流程,比如一个pod Kubernetes可以包含多个流程。

1. 架构

SkyWalking在逻辑上分为四个部分:Probe(探针)backend(平台后端)storage(存储)UI

  • Probe(探针):探针收集遥测数据,包括各种格式的度量轨迹日志事件
  • backend(平台后端):支持数据聚合分析流式处理,包括跟踪、指标、日志和事件。充当聚合者角色、接收者角色或两者兼而有之。
  • storage(存储):通过开放/可插拔的接口存储数据。你可以选择一个现有的实现,比如ElasticSearch、H2、MySQL、TiDB、BanyanDB。
  • UI:一个高度可定制的基于web的界面,允许skywalk终端用户可视化管理skywalk数据

四大组件通信.png

三、安装skywalking服务端

进入skywalking下载页面,按照以下截图进行不同版本的下载

下载skywalking.png

下载成功后进行解压,解压后如下所示

解压后.png

重点关注以下文件夹

  • bin:包括用于后端服务前端UI的启动shell脚本cmd脚本
  • config:后端服务的配置文件,主要关注application.ymllog4j.xmlalarm-settings.yml
  • oap-libs:后端服务所需要的所有依赖
  • webapp:前端应用以及配置文件

四、启动skywalking服务端

进入bin文件夹,双击webappService.bat启动skywalking服务的后端与前端

启动服务的批处理文件.png

启动成功后如下所示

启动成功.png

既然服务启动成功,我们下一步就是通过浏览器打开skywalking的可视化界面了。

首先需要查看前端服务运行的端口,进入webapp文件夹,查看前端配置文件application.yml,发现前端服务的运行端口号是通过变量SW_SERVER_PORT设置的,其默认端口号为8081

前端配置文件默认端口号.png

在浏览器输入localhost:8081,进入控制台页面

控制台页面.png

五、微服务项目开发

本项目仅用于演示skywalking的集成过程,项目结构如下图所示

项目结构.png

  • skywalking-eureka-server:eureka服务注册中心
  • skywalking-gateway:网关
  • skywalking-goods:商品服务
  • skywalking-order:订单服务
  • skywalking-payment:支付服务

项目架构图如下所示

微服务项目架构图.png

注册中心

本项目的注册中心仅用于服务注册,其配置文件如下所示

注册中心配置文件.png

启动注册中心后,在浏览器打开注册中心页面,输入localhost:8080/eureka

eureka页面.png

从注册中心中可以看出,我们启动的实例如下

  • eureka注册中心:只有一个实例,端口号为8080,为单机模式
  • 网关:只有一个实例,端口号为8090,为单机模式
  • 商品服务:两个实例,端口号分别为8011和8012,为集群模式
  • 订单服务:两个实例,端口号分别为8021和8022,为集群模式
  • 支付服务:两个实例,端口号分别为8031和8032,为集群模式

网关服务

本项目的注册中心仅用于转发请求,其配置文件如下所示

网关配置文件.png

该配置中的三个路由分别用于转发请求到商品服务、订单服务和支付服务。

商品服务

商品服务中定义的接口如下:

商品服务接口.png

当用户调用该接口时,打印日志进行记录,然后通过feign接口调用订单服务的创建订单接口,最后返回结果,

订单服务

订单服务中定义了一个由商品服务调用的接口如下:

订单服务feign接口.png

该接口由商品服务调用,其返回值0代表成功1代表失败。当传入的商品id为2的倍数时,则订单创建失败,否则通过feign接口调用支付服务的支付接口,最后返回结果。

支付服务

支付服务中定义了一个由订单服务调用的接口如下:

支付服务feign接口.png

该接口由订单服务调用,其返回值0代表成功1代表失败。当传入的商品id为3的倍数时,则支付失败,当传入的商品id为5的倍数时,则抛出异常。否则返回成功的结果。

测试

当我们调用商品服务的接口并传入商品id为1

商品id为1的请求.png

得到的结果为0,即成功

查看日志如下:

商品id为1的日志.png

从日志中可以看出,此次请求的调用链如下所示

商品id为1的调用链.png

当我们调用商品服务的接口并传入商品id为2

商品id为2的请求.png

得到的结果为1,即失败

查看日志如下:

商品id为2的日志.png

从日志中可以看出,此次请求的调用链如下所示

商品id为2的调用链.png

当我们调用商品服务的接口并传入商品id为3

商品id为3的请求.png

得到的结果为1,即失败

查看日志如下:
商品id为3的日志.png

从日志中可以看出,此次请求的调用链如下所示

商品id为3的调用链.png

六、下载java客户端

skywalking使用java agent将客户端植入到微服务中,当项目启动时,会自动与skywalking服务端建立连接。

下面我们进入官网下载页面

下载skywalking客户端.png

下载成功后进行解压,解压后如下所示

skywalking客户端解压后.png

重点关注以下文件

  • config:客户端的配置
  • logs:日志
  • skywalking-agent.jar:skywalking的客户端

七、微服务集成skywalking客户端

skywalking要求我们通过-javaagent将skywalking客户端集成到微服务中,现在我们对上面演示项目的各个服务进行集成

1. idea启动

使用idea启动项目的情况下,我们进入项目的启动配置(Run/Debug Configuration)中。

以端口号为8011的商品服务为例,添加以下JVM启动参数

# skywalking客户端路径
-javaagent:E:\skywalking\skywalking-agent\skywalking-agent.jar
# 服务名称
-Dskywalking.agent.service_name=skywalking-goods

如下图所示

在idea中集成skywalking客户端.png

2. 命令行启动

同样以端口号为8011的商品服务为例,当我们使用命令行启动微服务的jar包时,只需要将上面的两个参数放在-jar参数的前面即可,如下所示

java \
-javaagent:/data/skywalking/skywalking-agent.jar \
-Dskywalking.agent.service_name=skywalking-goods \
-jar \
skywalking-goods.jar

3. 集成效果

启动参数添加完成后,重启项目,然后进入skywalking服务端的控制台页面

微服务集成skywalking效果图.png

不难发现,我们已经把项目中的eureka服务端网关商品服务订单服务支付服务集成到skywalking了。

该页面中包含四个标签页:ServiceTopologyTraceLog

  • Service:微服务列表。类比eureka服务端的服务列表。

    在该列表中,发现其表格中包含了以下几列

    • Service Groups:服务分组

      当我们启动服务时,在JVM启动参数中为其添加了skywalking的服务名称-Dskywalking.agent.service_name=skywalking-goods,如果需要为该服务指定分组,则需要以 分组名::服务名 配置服务名称。

      例如我们需要将商品服务的分组设置为sw-business,则将该参数修改为-Dskywalking.agent.service_name=sw-business::skywalking-goods

    • Service Names:服务名称。

    • Load(calls/min):平均每分钟调用次数

    • Success Rate(%):调用成功率

    • Latency(ms):延迟

    • apdex:应用性能指数

  • Topology:服务拓扑图

  • Trace:服务调用链路

  • Log:服务调用日志

4. 服务实例

点击服务名,可查看该服务详情,其中包含该服务的实例列表

  • 查看eureka服务实例

    通过以下截图看到eureka服务的实例数为1个,其实例名称为skywalking自动生成的,其规则为UUID + @ + IP

    eureka服务实例.png

  • 查看网关服务实例

    通过以下截图看到网关服务的实例数为1个,其实例名称为skywalking自动生成的,其规则为UUID + @ + IP

    网关服务实例.png

  • 查看商品服务实例

    通过以下截图看到商品服务的实例数为2个,其实例名称为skywalking自动生成的,其规则为UUID + @ + IP

    商品服务实例.png

  • 查看订单服务实例

    通过以下截图看到订单服务的实例数为2个,其实例名称为skywalking自动生成的,其规则为UUID + @ + IP

    订单服务实例.png

  • 查看支付服务实例

    通过以下截图看到支付服务的实例数为2个,其实例名称为skywalking自动生成的,其规则为UUID + @ + IP

    支付服务实例.png

5. 修改服务实例名称

由于skywalking生成的实例名称有默认规则,我们可以对其进行修改,以增加各个服务实例的辨识度。

在项目的JVM启动参数中添加配置:-Dskywalking.agent.instance_name=实例名称。以商品服务为例

  • 端口号为8011的商品服务
    商品服务添加实例名-1.png
  • 端口号为8012的商品服务
    商品服务添加实例名-2.png

重新启动商品服务的两个实例,可以看到对应的实例名称已被修改,且可以发现实例名称支持中文

修改实例名称后的商品服务实例列表.png

八、skywalking客户端配置

skywalking客户端提供了多种配置方式:配置文件jvm启动参数-javaagent选项操作系统环境变量

1. 配置文件

在skywalking客户端的配置文件config/agent.config中,包含了大量客户端配置,如下截图所示。

客户端配置.png

服务名的配置为例,配置项为agent.service_name,对应的值将从系统环境变量中获取SW_AGENT_NAME变量的值作为服务名,冒号:后面为默认配置,即如果系统环境变量中不存在该配置,则取默认值

2. jvm启动参数

使用 skywalking. + 配置项 实现对配置文件中对应配置项的覆盖,因此优先级更高

  • 为什么要给配置项添加前缀skywalking.

    前缀可以避免冲突

例如:配置命名空间

-Dskywalking.agent.namespace=my_namespace

3. javaagent选项

格式:

多个配置项之间以逗号","分隔

-javaagent:/path/to/skywalking-agent.jar=[option1]=[value1],[option2]=[value2]

例如配置服务名命名空间

-javaagent:/path/to/skywalking-agent.jar=agent.service_name=my_service_name,agent.namespace=my_namespace

如果配置项或配置值中包含特殊符号,则应当使用单引号''将其包含

-javaagent:/path/to/skywalking-agent.jar=agent.service_name=my_service_name,agent.ignore_suffix='.jpg,.jpeg'

4. 操作系统环境变量

服务名的配置为例,配置项为agent.service_name,对应的值将从系统环境变量中获取SW_AGENT_NAME变量的值作为服务名,冒号:后面为默认配置,即如果系统环境变量中不存在该配置,则取默认值。

以上就是skywalking的安装、以及如何与微服务项目进行集成的过程。




纸上得来终觉浅,绝知此事要躬行。

————————我是万万岁,我们下期再见————————

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3天前
|
并行计算 Ubuntu Docker
apollo快速入门之安装指南
apollo快速入门之安装指南
12 3
|
2月前
|
Java iOS开发 MacOS
Elasticsearch 6.5源码编译最新版
Elasticsearch 6.5源码编译最新版
17 0
Elasticsearch 6.5源码编译最新版
|
4月前
|
分布式计算 Java 网络安全
Ambari【部署 01】最新版本ambari-2.7.7下载编译打包安装使用(踩坑实录)
Ambari【部署 01】最新版本ambari-2.7.7下载编译打包安装使用(踩坑实录)
181 0
|
Prometheus Cloud Native
prometheus安装教程
prometheus安装教程
288 0
prometheus安装教程
|
10月前
|
关系型数据库 MySQL 数据库
skywalking02 - skywalking安装
skywalking02 - skywalking安装
114 0
|
监控 前端开发 数据可视化
Skywalking的安装与使用
Skywalking的安装与使用
546 0
Skywalking的安装与使用
|
监控 安全 Java
elasticsearch插件三—— Marvel插件安装详解
一、Marvel插件介绍 Marvel插件:在簇中从每个节点汇集数据。这个插件必须每个节点都得安装。
351 0
elasticsearch插件三—— Marvel插件安装详解
|
存储 数据可视化 前端开发
环境搭建-Skywalking 环境搭建 | 学习笔记
快速学习环境搭建-Skywalking 环境搭建
237 0
环境搭建-Skywalking 环境搭建 | 学习笔记
|
消息中间件 存储 监控
SpringBoot集成ElasticSearch 7.6【新版本】及安装使用操作
SpringBoot集成ElasticSearch 7.6【新版本】及安装使用操作
294 0
SpringBoot集成ElasticSearch 7.6【新版本】及安装使用操作
|
Java iOS开发 MacOS
Elasticsearch实战(三)-MacOS下载安装启动Elasticserch、Kibana
Elasticsearch实战(三)-MacOS下载安装启动Elasticserch、Kibana
372 0
Elasticsearch实战(三)-MacOS下载安装启动Elasticserch、Kibana