微服务系列:分布式链路追踪之 SkyWalking

这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战

一、基本介绍

  • 什么是链路追踪

随着微服务分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如分布式服务、分布式数据库、分布式缓存等,使得后台服务构成了一种复杂的分布式网络。在服务能力提升的同时,复杂的网络结构也使问题定位更加困难。在一个请求在经过诸多服务过程中,出现了某一个调用失败的情况,查询具体的异常由哪一个服务引起的就变得十分抓狂,问题定位和处理效率是也会非常低。

分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。

  • 为什么要使用链路追踪

链路追踪为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等工具,可以帮助开发者快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率。

  • skywalking 链路追踪

Skywalking 是一个优秀的国产开源框架2015年由个人吴晟(华为开发者)开源 , 2017年加入Apache孵化器。短短两年就被Apache收入麾下,实力可见一斑。

SkyWalking是一个可观测性分析平台(Observability Analysis Platform 简称OAP)和应用性能管理系统(Application Performance Management 简称 APM)。

提供分布式链路追踪,服务网格(Service Mesh)遥测分析,度量(Metric)聚合和可视化一体化解决方案。

SkyWalking 特点

  • 多语言自动探针,java,.Net Code ,Node.Js
  • 多监控手段,语言探针和Service Mesh
  • 轻量高效,不需要额外搭建大数据平台
  • 模块化架构,UI ,存储《集群管理多种机制可选
  • 支持警告
  • 优秀的可视化效果。

下面是SkyWalking的架构图: skywalking

SkyWalking 逻辑上分为四部分: 探针, 平台后端, 存储和用户界面。

  • 探针 主要负责从客户端收集数据,将数据转换成SkyWalking适用的格式,探针对客户端程序没有任何代码侵入,使用起来简单方便,使用如下命令即可完成对应用的监控 java -javaagent:/path/skywalking-agent.jar -jar youApp.jar
  • 平台后端(OAP Server) 主要用于数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程。通过 gRPC/Http 收集客户端Agent的采集信息 ,Http默认端口 12800,gRPC默认端口 11800。
  • 存储 SkyWalking支持很多存储:H2(用作演示环境)、MySQL(当数据量大时检索性能下降很厉害)、ES(主流生产级别的存储)
  • 用户界面 炫酷的界面,调用请求监控一目了然。

Skywalking相比于zipkin还是有很大的优势的,如下:

  • skywalking采用字节码增强的技术实现代码无侵入,zipKin代码侵入性比较高
  • skywalking功能比较丰富,报表统计,UI界面更加人性化

二、安装配置

1. 安装

正常情况下,我们的微服务项目都是跑在 linux 系统中的,本次只是为了测试学习,所以本文在 windows 系统下安装使用。linux 系统下的安装配置也贴了一下,如果在学习阶段可以只看 windows 平台相关的安装配置。

1.1、windows 平台

下载地址:Downloads | Apache SkyWalking

image-20220205112458389

将下载下来的 apache-skywalking-apm-es7-8.7.0.tar.gz 解压缩,解压之后的目录如下:

image-20220205113015452

1.2、linux 平台

linux平台(CentOS 7) 安装包下载

wget https://archive.apache.org/dist/skywalking/8.2.0/apache-skywalking-apm-es7-8.2.0.tar.gz
复制代码

解压

tar -zxvf apache-skywalking-apm-es7-8.2.0.tar.gz
复制代码

解压之后的文件内容如下:

image.png

  • agent:代理模块(探针)
  • bin:启动脚本(包括 UI 和 OAP SERVER)
  • config:后端相关配置
  • webapp:UI界面

注意: 需要提前准备好 JAVA(1.8) 和 ES(6.x) 的环境

这里就 elasticsearch 的安装就不写了,关于 elasticsearch 准备后面单独写几篇文章去研究。

2. 配置

接下来我们对配置文件做一些修改

2.1、windows 平台

①、 /config/application.yml

本次我们使用 Nacos 注册中心,所以要修改 oap 服务的配置文件

image-20220205113559804

因为 Nacos 也安装在我本地,所以下面的 Nacos 配置我没什么要改动的。

②、webapp/webapp.yml

这个里面可以修改 UI 服务启动的端口号,默认是 8080 ,小伙伴们可以酌情修改,避免端口冲突

image-20220205113948353

2.2、linux 平台

不使用 Elasticsearch 也可以, SkyWalking 默认使用 H2

如果使用 Elasticsearch 就要做一些配置 修改 config/application.yml

vim config/application.yml
复制代码
storage:
  selector: elasticsearch
  elasticsearch:
    nameSpace: ${SW_NAMESPACE:"与elasticsearch的配置名字一致"}
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
    protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
​
复制代码

修改端口号,当然如果没有端口号冲突的话不改也行

vim webapp/webapp.yml
复制代码
server:
  port: 8080
复制代码

修改 agent 配置

vim agent\config\agent.config
复制代码
agent.service_name=${SW_AGENT_NAME:cloud-ytb}
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}
复制代码
  • agent.service_name修改成你应用名称:cloud-ytb
  • collector.backend_service修改成 OAP Server 地址:192.168.136.129:11800

三、启动访问

3.1、windows 平台

配置完成之后,先启动我们本地的 Nacos ,然后双击 bin 目录下的 startup.bat 文件

image-20220205114404724

会出现两个 cmd 窗口,没有日志应该是少了 log4j-web 的 jar ,我们先不去管他

访问地址:http://localhost:8080/ (端口号和 webapp.yml 中修改的一致)

image.png

此时我们访问 localhost:8848/nacos Nacos 控制台,在服务列表里我们会发现注册进去了一个 SkyWalking 服务

image.png

启动成功,接下来我们看看如何让 SkyWalking 去监控我们的项目。

3.2、linux 平台

./bin/startup.sh
复制代码

如果配置了 Elasticsearch ,请保证已成功启动 Elasticsearch

出现以下日志表示启动成功。

SkyWalking OAP started successfully! SkyWalking Web Application started successfully!

然后,我们访问地址 localhost:8080 (注意 ip 和端口号改为你自己的)

image.png

四、项目集成

这里我们直接在 windows 系统的 idea 中演示,这次我们依旧使用之前 微服务系列:服务调用 Spring Cloud 之 OpenFeign 详细入门 中的测试项目,相关源码地址也在 OpenFeign 这篇文章中。

其中,cloud-system 服务提供者,提供了一个远程调用接口,cloud-auth 是服务消费者。

idea 中配置两个服务的启动参数,两个服务只有 -Dskywalking.agent.service_name 不同

-javaagent:D:\Software\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=cloud-system
-Dskywalking.collector.backend_service=127.0.0.1:11800
复制代码

image-20220205115502169

我们只需要修改 D:\Software\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jarcloud-system ,当然都改成你自己的。

参数说明:

  • javaagent agent 包路径

指定 agent 包路径时,只需要 agent 包内文件即可,skywalking 其它包文件不需要

-javaagent:D:\Software\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
复制代码
  • skywalking 注册服务名称,一般是微服务的spring.application.name
-Dskywalking.agent.service_name=cloud-system
复制代码
  • 采集信息的服务地址,即 skywalking 服务连接信息
-Dskywalking.collector.backend_service=127.0.0.1:11800
复制代码

启动成功后,浏览器访问:

image-20220205120017758

刷新我们的 skywalking 控制台地址:

image-20220205120219399

可以看到两个个服务已经监控成功了。

看一下拓扑图,服务之间的依赖关系也很清楚了。

image-20220205120309607

包括请求链路详情

image-20220205120414535

至此,本文结束!

PS:都看到这里了,点个赞吧,彦祖

Supongo que te gusta

Origin juejin.im/post/7060885005932691493
Recomendado
Clasificación