分布式链路追踪--SkyWalking7.0.0+es7.0.0

分布式链路追踪–SkyWalking

​ 微服务的出现,的确解决了一些业务痛点,但是也造成了新的问题比如随着调用链的拉长,如果想要知道请求为什么这么慢,这个请求到底经历了哪些环节,又依赖了哪些东西,在微服务架构中定位这些问题并且解决是比较麻烦的。

​ 什么是调用链呢?

​ A服务调用B服务也可以说是一个调用链,即使是同一个服务中的一个方法调用到另一个方法,也可以说是一个调用链。

​ 以前单体应用中,排查问题往往只需要到这台应用的服务,查看日志基本就能把问题解决了。但是在微服务系统中,一般是分布式部署的,这也就给排查增加了难度,如果把一台台服务器登录上找问题,既麻烦又耗时。

​ 为了解决这些问题,业内已经有了分布式链路追踪的解决方案,比如使用ZipKin、SkyWalking等。

SkyWalking介绍

​ SkyWalking是基于OpenTracing实现的开源项目,2017年12月8日已进入Apache孵化器。

​ 是一个APM(应用性能监控)系统,专为微服务、云原生架构和基于容器(Docker、k8s、Mesos)架构而设计。通过探针收集应用的指针,并进行分布式链路追踪。SkyWalking会感知服务之间的调用链路关系,形成相应的统计数据。它的特性如下:

  • 支持警告
  • 采用探针技术,对业务代码零侵入
  • 支持自动及手动探针
  • 轻量高效,不需要大数据平台
  • 多种监控手段,多语言自动探针
  • 可视化后台
  • 模块化

SkyWalking的整体架构:

  • 探针(agent):负责数据收集,包含了Tracing和Metrics的数据
  • 可观测性能分析平台(OAP):接收探针发送的数据,并使用分析引擎进行数据整合、运算,然后把数据存储到对应的存储介质(可用H2或Elasticsearch等)上,还为UI后台提供接口
  • UI:调用OAP的接口,提供可视化界面展示

Elasticsearch下载安装

那么SkyWalking的存储介质,笔者这s选择使用Elasticsearch,先到Elasticsearch的官网下载。

windows版本下载地址,选择下载了一个7.0.0版本的。

这里笔者就使用windows版本了,需要linux版本或其他可以自行查阅资料。

下载解压后,到config/elasticsearch.yml中修改下集群名:

cluster.name: my-application

后直接到bin目录下,执行elasticsearch.bat即可执行es服务,默认端口9200

在这里插入图片描述

启动完毕后,访问下localhost:9200,得到如下信息即是安装成功

在这里插入图片描述

完成后,再去安装SkyWalking。注意这里cluster.name是my-application。后面skywalking需要用。

SkyWalking下载安装

下载地址:https://skywalking.apache.org/downloads/

在这里插入图片描述

下载过慢或者下载无反应的,可以尝试使用国内镜像地址去下载,https://mirrors.cloud.tencent.com/apache/skywalking

在这里插入图片描述

笔者使用7.0.0版本的,地址在这里:https://www.apache.org/dyn/closer.cgi/skywalking/7.0.0/apache-skywalking-apm-es7-7.0.0.tar.gz

这里提供下网盘资源:

链接:https://pan.baidu.com/s/1lQoMDFIH3PYGCla3PtIIRg
提取码:2a96

下载解压后,得到如下目录:

在这里插入图片描述

  • agent:探针相关,代理模块
  • bin:oapService和webappService的启动脚本,也有两个脚本合并的脚本start.bat,linux系统启动.sh的文件
  • config:数据收集器、存储、告警等配置信息
  • logs:collector和web-ui的日志
  • webapp:SkyWalking展示的UIjar文件和配置文件

config/application.yml中修改配置

storage:selector: ${SW_STORAGE:elasticsearch7}

修改elsticsearch的nameSpace和ClusterNodes,这里nameSpace是前面配置的es的集群名称

storage:selector: ${SW_STORAGE:elasticsearch7}elasticsearch7:nameSpace: ${SW_NAMESPACE:"my-application"}clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}

注意:SkyWalking默认使用的端口是8080、11800、12800,如有占有,可去config/application.ymlwebapp/application.yml中修改

启动

执行startup.bat启动

访问localhost:8080即可进入skywalking的可视化界面

在这里插入图片描述

IDEA使用agent

IDEA使用agent主要使用于本地开发环境,需要又agent文件夹,然后加上启动参数即可。

找到两个springboot微服务项目,然后在它们的IDEA启动配置中,增加参数:

transaction的

-javaagent:D:\env\envir\skywalking7\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=transaction-distribution
-Dskywalking.collector.backend_service=localhost:11800

order的

-javaagent:D:\env\envir\skywalking7\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=transaction-order
-Dskywalking.collector.backend_service=localhost:11800
  • D:\env\envir\skywalking7\agent\skywalking-agent.jar`是agent的目录路径
  • service_name:服务名称
  • backend_service:skywalking的服务地址(端口是11800)

完事儿后,启动它们。

调用一个接口,执行它们。

拓扑图

到skywalking的拓扑图页面

在这里插入图片描述

可以看到真题的技术架构及调用关系。

追踪

到skywalking的追踪页面

在这里插入图片描述

可以看到所有的执行记录,并且将这些详细到:发生在哪个类哪个方法中,如执行sql查询的那条,点击后,我们甚至可以看到sql的执行信息。

在这里插入图片描述

还可知接口的执行时间分布,以及采用的技术

在这里插入图片描述

如上图:/createOrder接口总执行2.4s,/distribution是使用feign调用的,且执行了1s左右。

忽略端点

有时可能不需要采集某个端点的数据,如心跳之类的请求,不是那么重要。可以设置忽略它们,意味着包含这些路径的追踪信息不会被agent发送到collector中。

  1. 将skywalking中的agent/optional-pluginsapm-trace-ignore-plugin-7.0.0.jar拷贝至我们的agent/plugins

  2. 在IDEA中做启动配置,我们模拟将/createOrder/distribution接口忽略

    -javaagent:D:\env\envir\skywalking7\agent\skywalking-agent.jar
    -Dskywalking.agent.service_name=transaction-distribution
    -Dskywalking.collector.backend_service=localhost:11800
    -Dskywalking.trace.ignore_path=/createOrder
    
    -javaagent:D:\env\envir\skywalking7\agent\skywalking-agent.jar
    -Dskywalking.agent.service_name=transaction-order
    -Dskywalking.collector.backend_service=localhost:11800
    -Dskywalking.trace.ignore_path=/distribution
    

ignore_path这个参数可以支持表达式:

/path/*path/**/path/?

?表示匹配任意单字符,*表示匹配0个或任意数量字符,**表示匹配0或更多的目录

配置后,在调用匹配规则的接口路径时,agent就不会再采集这些接口的数据了。

除此外还有另一种方式

同样是需要先将skywalking中的agent/optional-pluginsapm-trace-ignore-plugin-7.0.0.jar拷贝至我们的agent/plugins

然后去配置agent/config/agent.config文件忽略端点,服务每次启动都会去读取这个配置文件。

trace.ignore_path==${SW_AGENT_TRACE_IGNORE_PATH:/createOrder, /distribution}

告警

告警功能是skywalking的一大特色。Skywalking会定时把采集到的数据和配置的告警规则进行对比,如果满足阈值条件,则会出发警告。

Skywalking允许用户基于webhook(网络钩子)的规范,自定义触发告警之后的逻辑,如发短信、发邮件、电话、公众号通知等。

Skywalking程序路径下的config/alarm-settings.yml文件就是告警的规则。

rules:service_resp_time_rule: # 服务响应时间规则metrics-name: endpoint_percent # 名称threshold: 75	# 阈值op: <		# 小于period: 10	# 间隔时间count: 3	# 次数silence-period: 10 # 告警发送多少分钟内警告不会重复发送message: Successful rate of endpoint {name} is lower than 75%
#webhooks:
#  - http://127.0.0.1/notify/
#  - http://127.0.0.1/go-wechat/

webhooks中就是触发警告后,需要执行的操作。

我们可以自己做个触发钩子后的执行操作接口

  • 来个告警信息类
public class AlarmMessage {private Integer scopeId;    // 作用域private String name;        // 目标作用域下的实体名称private Integer id0;        // 作用域下的实体ID,与名称相匹配private Integer id1;private String ruleName;    // alarm-setting.yml中的配置规则private String alarmMessage;   // 告警信息private Long startTime;     // 告警产生时间// get.set.toString()方法省略}
  • 做个接口
@RequestMapping("/notify")
public void alarm(@RequestBody List<AlarmMessage> alarmMessages) {alarmMessages.forEach(value -> System.out.println(value.toString()));
}
  • 修改config/alarm-settings.yml配置文件,增加钩子的后续执行。
webhooks:- http://127.0.0.1:9002/notify

重启skywalking及两个微服务项目,多次调用/createOrder接口(模拟的超时报错),这里记得把忽略的端点给放开,否则skywalking是发不了告警的。

可看到告警一栏中的

在这里插入图片描述

看到控制台打印的数据:

在这里插入图片描述

性能分析

Skywalking的性能分析能帮助用户很容易找到性能问题,并且不需要代码埋点等操作。Skywalking的性能分析是对业务周期性保存快照操作,资源消耗小。

到Skywalking UI的性能剖析窗口,点击新建任务,如创建/createOrder接口的任务。

在这里插入图片描述

然后可以调用几次/createOrder接口,刷新页面,选中刚刚创建的任务,右侧出现createOrder的信息,选中,点击分析按钮。

在这里插入图片描述

调用/createOrder的流程,使用的技术,服务名,耗时,栈信息等一览无余。

点击查看能看到这个步骤的详细信息,执行的具体操作,抛出的异常。

Tomcat或Jar包使用agent

IDEA中使用agent一般用于本地开发环境,若正式环境,一般使用Tomcat或jar包的方式启动应用。

Linux系统Tomcat使用agent

linux系统中修改tomcat的bin/catalina.sh文件,加入代码

CATALINA_OPTS="$CATALINA_OPTS -javaagent:/root/agent/skywalking-agent.jar -Dskywalking.agent.service_name=transaction-distribution -Dskywalking.collector.backend_service=localhost:11800";
export CATALINA_OPTS

Windows系统Tomcat使用agent

windows系统中修改tomcat的bin/catalina.bat文件setlocal下,加入代码

set CATALINA_OPTS="-javaagent:D:\env\envir\skywalking7\agent\skywalking-agent.jar -Dskywalking.agent.service_name=transaction-distribution -Dskywalking.collector.backend_service=localhost:11800";

jar包使用agent

启动时的命令

java -javaagent:D:\env\envir\skywalking7\agent\skywalking-agent.jar -Dskywalking.agent.service_name=transaction-distribution -Dskywalking.collector.backend_service=localhost:11800 -jar transaction-distribution.jar

配置账号密码登录

Skywalking的功能很强大,能看到项目中的很多隐私信息(项目架构、调用链路、sql语句等),自然不希望其他无关人员能看到。那么通常设置账号密码的方式。

在skywalking6.x版本中能配置,但是在7.x版本中被移除了,作者提出可以使用nginx配置账号和密码:

使用nginx配置账号密码登录主要是依靠ngx_http_auth_basic_module模块。

下面是用nginx的增强版,OpenResty配置账号和密码登录。OpenResty的安装可以自行查阅资料。

安装和配置

  • 安装hptpasswd工具
yum install -y httpd-tools
  • 使用htpasswd生成用户名和密码
htpasswd -b -c /usr/local/openresty/passwd wlh wlh

-b参数:用户创建passwdfile,如果passwdfile存在,那么它会重写

-c参数:允许命令行中一起输入账号和密码

  • 到OpenResty的安装目录,修改nginx/conf/nginx.conf配置文件,修改server中的内容就行了
server{listen	80;server_name	localhost;location / {auth_basic "Please input password";	# 提示信息auth_basic_user_file	/user/local/openrestry/passwd;	# 存放账号密码的文件proxy_pass	http://localhost:8080;	# 代理到8080端口}}

最后linux系统记得放开需要的端口。重启OpenResty然后访问主机http://192.168.1.41(默认80端口),就会弹框提示需要输入账号和密码了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/92398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亲测可用国产GPT人工智能

分享一些靠谱、可用、可以白嫖的GPT大模型。配合大模型&#xff0c;工作效率都会极大提升。 清华大学ChatGLM 官网&#xff1a; 智谱清言中国版对话语言模型&#xff0c;与GLM大模型进行对话。https://chatglm.cn/开源的、支持中英双语的1300亿参数的对话语言模型&#xff0…

【MATLAB】字体美化和乱码

文章目录 前言首先说说说字体美化乱码到底是怎么导致的&#xff1f;1 字体导致的乱码2 编码导致的乱码总结 前言 最近打开MATLAB&#xff0c;又发现了一个问题&#xff1a;编辑器中的中文输入在命令行或者说终端输出竟然是乱码&#xff0c;然后赶紧翻阅了一下此前的博客以及未发…

使用VBA实现快速模糊查询数据

实例需求&#xff1a;基础数据保存在Database工作表中&#xff0c;如下图所示。 基础数据有37个字段&#xff0c;上图仅展示部分字段内容&#xff0c;下图中黄色字段为需要提取的数据字段。 在Search工作表B1单元格输入查询关键字Title和Genre字段中搜索关键字&#xff0c;包…

【数据结构--八大排序】之归并排序

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

Armv9 Cortex-A720的L2 memory system 和 L2 Cache

9 L2 memory system Cortex-A720核心的L2内存系统通过CPU bridge连接core与DynamIQ Shared Unit-120,其中包括私有的L2缓存。 L2缓存是统一的,每个Cortex-A720核心在一个集群中都有私有的L2缓存。 L2内存系统包括使用虚拟地址(VA)和程序计数器(PC)的数据预取引擎。不同…

【2023研电赛】华东赛区一等奖:电动叉车永磁同步电机MTPA及弱磁控制研究

本文为2023年第十八届中国研究生电子设计华东赛区一等奖竞赛作品分享&#xff0c;参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&#xff01;&#xff0c;分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&a…

Kakfa高效读写数据

1.概述 无论 kafka 作为 MQ 也好&#xff0c;作为存储层也罢&#xff0c;无非就是两个功能&#xff1a;一是 Producer 生产的数据存到 broker&#xff0c;二是 Consumer 从 broker 读取数据。那 Kafka 的快也就体现在读写两个方面了&#xff0c;本文也是从这两个方面去剖析Kafk…

nodejs+vue健身服务应用elementui

第三章 系统分析 10 3.1需求分析 10 3.2可行性分析 10 3.2.1技术可行性&#xff1a;技术背景 10 3.2.2经济可行性 11 3.2.3操作可行性&#xff1a; 11 3.3性能分析 11 3.4系统操作流程 12 3.4.1管理员登录流程 12 3.4.2信息添加流程 12 3.4.3信息删除流程 13 第四章 系统设计与…

数据结构与算法-(7)---栈的应用-(3)表达式转换

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

华为云云耀云服务器 L 实例评测:快速建站的新选择,初创企业和开发者的理想之选

华为云云耀云服务器 L 实例评测&#xff1a;快速建站的新选择&#xff0c;初创企业和开发者的理想之选 文章目录 华为云云耀云服务器 L 实例评测&#xff1a;快速建站的新选择&#xff0c;初创企业和开发者的理想之选导语&#xff1a;摘要&#xff1a; 正文产品概述部署简易性步…

在Windows11家庭中文版中启用Copilot(预览版)

1、下载ViveTool-vx.x.x.zip 2、解压下载的压缩包ViveTool-vx.x.x.zip 3、复制ViveTool文件夹的路径 4、按下wins&#xff0c;打开搜索 5、输入cmd&#xff0c;并选择“以管理员身份运行” 6、在cmd中输入以下命令&#xff0c;进入ViveTool文件夹&#xff1a; cd ViveTool…

BI神器Power Query(26)-- 使用PQ实现表格多列转换(2/3)

实例需求&#xff1a;原始表格包含多列属性数据,现在需要将不同属性分列展示在不同的行中&#xff0c;att1、att3、att5为一组&#xff0c;att2、att3、att6为另一组&#xff0c;数据如下所示。 更新表格数据 原始数据表&#xff1a; Col1Col2Att1Att2Att3Att4Att5Att6AAADD…

接雨水问题

接雨水问题 问题背景 LeetCode 42. 接雨水 接雨水问题是一个经典的计算雨水滞留量的问题&#xff0c;通常使用柱状图来表示不同高度的柱子。在下雨的情况下&#xff0c;柱子之间的凹陷部分能够存储雨水&#xff0c;问题的目标是计算这些柱子所能接收的雨水总量。 相关知识 …

windows系统利用powershell查看系统支持那些Windows功能选项

在PowerShell中&#xff0c;我们可以使用Get-WindowsOptionalFeature cmdlet命令来查看Windows功能选项。 打开PowerShell 输入以下命令&#xff1a;将结果输出到1.log Get-WindowsOptionalFeature -Online >1.log 可以看到在指定路径下看到生成了文件 打开查看内容&…

BI神器Power Query(27)-- 使用PQ实现表格多列转换(3/3)

实例需求&#xff1a;原始表格包含多列属性数据,现在需要将不同属性分列展示在不同的行中&#xff0c;att1、att3、att5为一组&#xff0c;att2、att3、att6为另一组&#xff0c;数据如下所示。 更新表格数据 原始数据表&#xff1a; Col1Col2Att1Att2Att3Att4Att5Att6AAADD…

Halcon中灰度直方图的使用与学习

目录 第一步:当前打开窗口的显示灰度图或者mono图片第二步:激活后,我们可以去调整调整右边直方图灰阶值的中蓝色和红色竖线,获取左边图上的灰阶值的范围内的特征显示。第三步:插入代码:总结:它的直观目的,就是查看灰度的分布情况!灰度直方图,是我们经常使用,抓取不同…

算法的时间复杂度分析习题专题

之前写了一篇重点是讲理论&#xff0c;今天重点在于对于题目的分析 题目难度不分先后&#xff0c;有题目来源会直接给出链接或者位置 第一题&#xff1a;消失的数字 题目来源&#xff1a;LeetCode消失的数字 分析 第一种思路分析&#xff1a; 参考代码&#xff1a; #include …

Git与Repo:开源开发的得力工具组合

Git与Repo&#xff1a;开源开发的得力工具组合 1. 引言 开源开发在当今的软件行业中扮演着至关重要的角色。它不仅推动了技术的创新和进步&#xff0c;也促进了开发者之间的合作与共享。随着越来越多的开源项目的涌现&#xff0c;有效的代码管理和版本控制成为了必不可少的工…

Elasticsearch基础篇(三):Elasticsearch7.x的集群部署

Elasticsearch的集群部署 1. Elasticsearch集群架构主节点数据节点客户端节点分片节点间通信集群状态 2. Elasticsearch集群部署2.1 系统配置修改2.1.1 修改文件句柄数和线程数2.1.2 修改虚拟内存2.1.3 关闭交换空间&#xff08;Swap&#xff09; 2.2 下载es数据库并上传到服务…

STM32 定时器介绍--通用、高级定时器

目录 高级定时器 1.功能框图 1-时钟源 2-时基单元 3-输入捕获 4-输出比较 2.输入捕获的应用 3.输出比较的应用 4.初始化结构体 1-时基初始化结构体 2-输出比较结构体 3-PWM信号 周期和占空比的计算--以通用定时器为例 4-输入捕获结构体 5-断路和死区初始化结构体…