微服务链路追踪——skywalking

2023-10-30

前言

        skywalking是分布式系统的应用程序性能监视、分布式链路追踪工具,跟听云、博瑞等一系列服务器监控组件服务类似,开源的相关类似组件有zipkin、pinpoint等,由于笔者所在项目组准备升级springcloud,缺少相关链路监控组件,而zipkin属于springcloud1.0相关,因此暂时选择调研skywalking并对其进行搭建。
        当前skywalking最新版本为6.4,本博客示例中使用nacos作为注册中心,springcloudgateway作为网关进行服务请求转发。

正文

skywalking架构

        如下图所示,整体主要分为三个部分:

  1. skywalking-agent:在被监控的服务启动时添加的探针,用来收集和推送数据到归集器,将数据通过gRPC方式发送给collector组件;
  2. skywalking-collector:链路数据归集器,接收agent发送的数据并做处理,数据可以保存在H2、ElasticSearch、mysql等;
  3. skywalking-web:web的可视化管理后台,对已经持久化的数据做回显,显示收集后的数据;
    在这里插入图片描述

搭建skywalking

        搭建使用的各种服务版本如下:

nacos elasticsearch skywalking springcloudgateway
1.1.3 6.4.2 6.4.0 Greenwich.SR1

        搭建之前下载各个对应版本的包,并且需要保证对应端口不被占用,8848(nacos)、9200(es)、8080(skywalking-web)、11800、12800。

搭建共分为以下几步:1.nacos配置启动;2.es配置启动;3.skywalking-collector及skywalking-web配置启动;4.skywalking-agent与服务启动。

        1. 首先启动nacos,详见 https://nacos.io/zh-cn/docs/quick-start.html ,本地访问 http://localhost:8848/nacos 可以看到管理页面。

        2. 其次配置和启动es,首先修改es配置,在下载的es目录 config/elasticsearch.yml,配置相应的节点名称及host地址、端口,如下:

cluster.name: CollectorDBCluster
node.name: CollectorDBCluster
network.host: 127.0.0.1
http.port: 9200

        ./elasticsearch -d 后台运行,本地访问 http://localhost:9200/ 出现下述数据表明es服务基本正常。

{
name: "CollectorDBCluster",
cluster_name: "CollectorDBCluster",
cluster_uuid: "NuJtMyOnShun26UWoXCQXw",
version: {
number: "6.4.2",
build_flavor: "default",
build_type: "tar",
build_hash: "04711c2",
build_date: "2018-09-26T13:34:09.098244Z",
build_snapshot: false,
lucene_version: "7.4.0",
minimum_wire_compatibility_version: "5.6.0",
minimum_index_compatibility_version: "5.0.0"
},
tagline: "You Know, for Search"
}

        3.接着准备启动skywalking,首先修改skywalking配置,config/application.yml 如下:

#注册到nacos配置
cluster:
  nacos:
    serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
    # Nacos cluster nodes, example: 10.0.0.1:8848,10.0.0.2:8848,10.0.0.3:8848
    hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:localhost:8848}

#存储选择es,注意nameSpace配置要一致,注释掉h2;如果选择使用h2,则不需要修改
storage:
  elasticsearch:
    nameSpace: CollectorDBCluster
    clusterNodes: 127.0.0.1:9200
    indexShardsNumber: 2

        如果需要修改skywalking-web的端口号,需要修改webapp/webapp.yml。

        接着启动skywalking,linux在skywalking bin目录下执行./startup.sh,windows则执行startup.bat。此时我们应该能看到nacos控制台(http://localhost:8848/nacos) 的服务列表中有skywalking注册如列表中SkyWalking_OAP_Cluster,且能访问skywalking控制台(http://localhost:8080/) 。
image
image
        如果未能正常注册、或者skywalking后台无法正常访问,就去skywalking/log/目录下看一下日志是否有异常。

        4.将skywalking目录下agent附带到相应的项目服务中启动,如 java -javaagent:/software/skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=demo -Dskywalking.collector.backend_service=127.0.0.1:11800 demo.jar 如果是在idea或eclipse中启动项目,则在项目启动的VM OPTIONS中增加参数 -javaagent:/software/skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=demo -Dskywalking.collector.backend_service=127.0.0.1:11800

        上面的-Dskywalking.agent.service_name是指注册到skywalking的服务名称,而-Dskywalking.collector.backend_service指的是skywalking接收agent发送采集数据的服务及端口。
在启动了两个服务后,可以在后台、拓扑图中看到注册的两个服务及调用链,如下图所示。
image

结语

        以上就是skywalking+nacos+elasticsearch+demo-service的搭建整个过程,我在这其中也遇到不少问题,如版本契合问题、skywalking现有bug问题、粗心配置写错问题等,一开始没怎么注意官方文档,后续对照官方文档改过之后才完成,希望与大家多多交流。

参考文档:
https://www.cnblogs.com/jackion5/p/10604189.html
https://blog.csdn.net/dpnice/article/details/95499394
https://github.com/apache/skywalking/blob/master/docs/en/setup/backend/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微服务链路追踪——skywalking 的相关文章

  • Java中有没有一种方法可以通过名称实例化一个类?

    我正在寻找问题 从字符串名称实例化一个类 https stackoverflow com questions 9854900 instantiate an class from its string name它描述了如何在有名称的情况下实例
  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • Spring应用中Eureka健康检查的问题

    我正在开发一个基于 Spring 的应用程序 其中包含多个微服务 我的一个微服务充当尤里卡服务器 到目前为止一切正常 在我所有其他微服务中 用 EnableEurekaClient 我想启用这样的健康检查 应用程序 yml eureka c
  • Mockito:如何通过模拟测试我的服务?

    我是模拟测试新手 我想测试我的服务方法CorrectionService correctPerson Long personId 实现尚未编写 但这就是它将执行的操作 CorrectionService将调用一个方法AddressDAO这将
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐

  • 搭建myexam考试系统服务器,myExam

    myExam classpath myExam cvsignore myExam project myExam tomcatplugin myExam build xml myExam jsp exam jsp myExam jsp exa
  • JAVA-输出一个三角形(详解)

    public class Demo 注意 编程时不可以使用汉语和拼音 要用英文单词或者英文单词缩写 如图 想要输出一个四行的三角形 第1行 第2行 第3行 第4行 思路 1 将这个图形看成四个直角三角形 2 需要两层for循环 第一层的作用
  • Unity编辑器扩展——通用树形结构绘制工具

    我们在使用Unity进行工具开发时 有时需要绘制一些树形的目录结构 例如这样的 提供一个通用的树形目录绘制的通用类 效果如下 设计图为 TreeNodeGUIBase为树的叶子结点结构 所以必须包含它的子节点的列表 TreeGUIBase为
  • (实用)Python模块打包

    目录 前言 一 什么是setuptools 二 编写setup py文件 1 创建一个setup py文件 2 调用setuptools的setup 方法 参数如下 3 代码示例 三 执行打包 3 1 执行打包语句 3 1 1 打包成 wh
  • moment中时间为12小时制,dayjs中时间为12小时制

    前言 在使用dayjs moment 他两用法一致 时 出现 后端数据给我们的是下午 4点 但是我们转换以后是4点 不是16点的情况 问题解析 yyyy MM dd HH mm ss 后面的时分秒是24小时制 yyyy MM dd hh m
  • 13天带你了解C++ ---DAY7 c++的 模板

    目录 1 泛型 2 函数模板 3 函数模板和重载的区别 4 函数模板实例化 5 类模板 6 模板特化 1 泛型 泛型是编写与类型无关的类型代码 是代码复用的一种手段 泛型是对面向对象的一种补充 极大的提高了代码复用率 在c 中 泛型的实现方
  • 【数据分析入门】第二周 EXCEL数据透视表笔记

    第二周 Excel数据透视表笔记 一 数据透视表 数据透视表的主要功能是将数据聚合 按照各子段进行sum count 的运算 操作 选择想要的数据区域 选择插入 创建透视表 此时会新建一个Sheet 将原始数据和汇总计算数据分离 数据透视表
  • 【c语言】利用指针求三个数的最大数和最小数

    比较费空间的笨方法 include
  • xtu 1397 Patchouli的金字塔

    题目描述 Patchouli想要绘制一个金字塔 金字塔的图案由n个正三角形和倒三角形堆叠而成 具体的绘制方法如下 每个三角形由 和 组成 分别代表三角形的顶点和三条边 第一行只包含一个正三角形 其余各行的三角形按照 正三角形 倒三角形 正三
  • STM32----ADC模数转换与DAC数模转换

    目录 ADC模数转换 DAC数模转换 ADC模数转换 指模 数转换器或者模拟 数字转换器 将连续变量的模拟信号转换为离散的数字信号的器件 典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号 特点 STM32通道组 1 规则通道
  • 采用 Nacos 和 Apollo 作为配置中心时@ConfigurationProperties、@RefreshScope的正确用法

    心中剑 手中剑 剑起 剑来 剑魂 剑起 众所周知 当前各个互联网企业采用的配置中心中 无外乎 Nacos 和 Apollo 最为知名 今天不去比较优劣 因为适合自己的才是最好的 而是在两个框架出现过渡时 有些用法或者编码习惯需要调整 否则配
  • 配置MATLAB环境

    配置MATLAB环境 MATLAB是一种强大的数值计算和科学编程环境 它提供了许多功能和工具 用于数据分析 算法开发和模型仿真 在本文中 我将详细介绍如何配置MATLAB环境 步骤1 下载和安装MATLAB 首先 您需要从MathWorks
  • 哈希表(散列表)的平均查找成功/失败长度

    计算哈希地址的方法 称之为哈希函数 常见的计算哈希地址方法有 1 直接定址法 2 除留余数法 3 数字分析法 4 平方取中法 本文所分析的是使用除留余数法计算哈希地址这类 的平均查找成功长度和查找失败长度 对于除留余数法的哈希函数 散列函数
  • GB 9706.1-2020医疗设备爬电距离和电气间隙计算实例

    GB 9706 1 2020医疗设备爬电距离和电气间隙计算实例 本文只就所示路径的爬电距离 电气间隙的计算按照GB 9706 1 2020标准进行验证 路径的符合性或在文字中加以修改 不作判定 我们先来看案例背景 有上文可知 污染等级PD2
  • linux怎吗卸载openssh,卸载并重装openssh(解决ssh -1问题)

    在集群测试过程中 有一个节点的openssh装的有问题 需要ssh 1 才能登录 导致多节点的mpi无法使用 修改配置文件什么的也没有用 也许是我改的不对 最后决定直接重装openssh 1 卸载 先查看openssh的相关包 root n
  • 内存管理单元MMU简介(只有具有MMU才支持真正的操作系统,微软,linux,unix等)

    引言 MMU Memory Management Unit 即内存管理单元 是现代CPU架构中不可或缺的一部分 MMU主要包含以下几个功能 虚实地址翻译 在用户访问内存时 将用户访问的虚拟地址翻译为实际的物理地址 以便CPU对实际的物理地址
  • socket inet_pton

    inet pton Linux下这2个IP地址转换函数 可以在将IP地址在 点分十进制 和 整数 之间转换 而且 inet pton和inet ntop这2个函数能够处理ipv4和ipv6 算是比较新的函数了 inet pton函数原型如下
  • vue 打开一个新页面_vue如何打开新窗口

    项目中需要点击打开新页面另外展示数据 在vue中如何进行的 目前我能解决的就是只有一种方案 网上说的方案没有一种成功 为何呢 最主要原因是 app中只能有路由跳转 不能再有其他内容时才会打开时是全新的一个页面 否则就会新开页面内容与APP中
  • 《Roller: Fast and Efficient Tensor Compilation for Deep Learning》

    Roller Fast and Efficient Tensor Compilation for Deep Learning 用于深度学习 快速高效的张量编译器 作者 微软亚洲研究院以及多伦多大学等多所高校 摘要 当前编译为了产生高效的ke
  • 微服务链路追踪——skywalking

    前言 skywalking是分布式系统的应用程序性能监视 分布式链路追踪工具 跟听云 博瑞等一系列服务器监控组件服务类似 开源的相关类似组件有zipkin pinpoint等 由于笔者所在项目组准备升级springcloud 缺少相关链路监