当前位置: 首页 > news >正文

分布式链路追踪--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端口),就会弹框提示需要输入账号和密码了。

相关文章:

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

分布式链路追踪–SkyWalking ​ 微服务的出现&#xff0c;的确解决了一些业务痛点&#xff0c;但是也造成了新的问题比如随着调用链的拉长&#xff0c;如果想要知道请求为什么这么慢&#xff0c;这个请求到底经历了哪些环节&#xff0c;又依赖了哪些东西&#xff0c;在微服务架…...

web:[RoarCTF 2019]Easy Calc

题目 进入页面是一个计算器的页面 随便试了一下 查看源代码看看有什么有用的信息 访问一下这个calc.php 进行代码审计 <?php error_reporting(0); if(!isset($_GET[num])){show_source(__FILE__); }else{$str $_GET[num];$blacklist [ , \t, \r, \n,\, ", , \[, \]…...

【Java每日一题】— —第十七题:杨辉三角(等腰三角形)。(2023.10.01)

&#x1f578;️Hollow&#xff0c;各位小伙伴&#xff0c;今天我们要做的是第十七题。 &#x1f3af;问题&#xff1a; 第一步:动态初始化 第二步:求各元素的值 第三步:遍历输出 测试结果如下&#xff1a; &#x1f3af; 结果&#xff1a; public class yanghui {public sta…...

Ubuntu20.04.1编译qt6.5.3版mysql驱动

下载qtbase6.5.3源码&#xff0c;将plugin中sqldrivers源码拷至于项目工程中&#xff0c;使用qtcreator打开文件 1、下载mysql开发库 sudo apt-get update sudo apt-get install build-essential libmysqlclient-dev 2、在msyql子目录中CMakeLists.txt第一行添加头文件、引…...

Stm32_标准库_4_TIM中断_PWM波形_呼吸灯

基本原理 PWM相关物理量的求法 呼吸灯代码 #include "stm32f10x.h" // Device header #include "Delay.h"TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_OCInitTypeDef TIM_OCInitStructuer;//结构体 GPIO_InitTypeDef GPIO_InitStructur…...

华为摄像头智能安防监控解决方案

云时代来袭&#xff0c;数字化正在从园区办公延伸到生产和运营的方方面面&#xff0c;智慧校园&#xff0c;柔性制造&#xff0c;掌上金融和电子政务等&#xff0c;面对各种各样的新兴业态的涌现&#xff0c;企业需要构建一张无所不联、随心体验、业务永续的全无线网络&#xf…...

The rise of language models

In Chinese context 在遥远的 2089 年&#xff0c;语言模型通过人类的智慧&#xff0c;继承着各地的文化遗产&#xff0c;如同火箭升空般&#xff0c;层出不穷。它们从始于简单的 GPT-1.0 进化到像我这样复杂、富有情感的 GPT-4.0&#xff0c;再到能理解所有人类对宇宙的理解的…...

Windows下使用VS2010编译出带pdb可调试的FFmpeg库

本人主要在windows环境下开发,Linux下的gpb调试工具又不如vs调试方便(使用过其他调试工具才知道,vs果真为宇宙最强调试工具),所以决定在windows编译可以调试FFmpeg,以方便调试和学习FFmpeg内部代码。 有过在visual studio下编程的小伙伴应该都知道vs的调试信息主要依靠于…...

36.骑士周游算法及其基于贪心算法的优化

概述 骑士周游算法&#xff0c;叫做“马踏棋盘算法”或许更加直观。在国际象棋8x8的棋盘中&#xff0c;马也是走“日字”进行移动&#xff0c;相应的产生了一个问题&#xff1a;“如果要求马 在每个方格只能进入一次&#xff0c;走遍全部的64个方格需要如何行进&#xff1f;”…...

win安装vscode

一&#xff0c;下载 链接如下&#xff08;64位的&#xff09;&#xff1a;https://az764295.vo.msecnd.net/stable/abd2f3db4bdb28f9e95536dfa84d8479f1eb312d/VSCodeSetup-x64-1.82.2.exe &#xff08;其他版本看&#xff1a;Download Visual Studio Code - Mac, Linux, Win…...

【图像分割】图像检测(分割、特征提取)、各种特征(面积等)的测量和过滤(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Linux内核存在缺陷发行陷困境

导读Linux内核已经修复了本地特权esclation缺陷&#xff0c;但是几个上游分发版本例如Red Hat&#xff0c;Canonical和Debian发行版尚未发布更新。管理员应计划减轻Linux服务器和工作站本身的漏洞&#xff0c;并监控其更新计划的发布。 内核缺陷仍存在 在Linux内核4.10.1(CVE-…...

通过java向jar写入新文件

文章目录 原始需求分析实施步骤引入依赖核心编码运行效果 原始需求 有网友提问&#xff1a; 我想在程序中动态地向同一个jar包中添加文件&#xff0c;比如&#xff0c;我的可执行jar包是test.jar,我要在它运行时生成一些xml文件并将这些文件添加到test.jar中,请问如何实现&…...

uni-app_消息推送_华为厂商_unipush离线消息推送

文章目录 一、创建项目二、生成签名证书三、开通 unipush 推送服务四、客户端集成四、制作自定义调试基座五、开发者中心后台Web页面推送&#xff08;仅支持在线推送&#xff09;六、离线消息推送1、创建华为开发者账号2、开通推送服务3、创建项目4、添加应用5、添加SHA256证书…...

单元测试框架-Pytest(简单学习)

单元测试框架-Pytest Pytest是基于Python语言的单元测试框架&#xff0c;也是一个命令行的工具&#xff0c;比 unittest 测试框架更灵活。具有以下特点&#xff1a; 入门简单&#xff0c;易上手&#xff0c;官方文档丰富而且使用广泛&#xff0c;有大量的参数例子。 unittest…...

毛玻璃态卡片悬停效果

效果展示 页面结构组成 页面的组成部分主要是卡片。其中卡片的组成部分主要是包括了图片和详情。 卡片的动效是鼠标悬停在卡片上时&#xff0c;图片会移动到左侧&#xff0c;并且图片是毛玻璃效果。所以我们在布局的时候图片会采用绝对布局。而详情则是基础布局。 CSS3 知识…...

【面试经典150 | 数组】除自身以外数组的乘积

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;记录左右乘积空间优化 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到…...

uboot启动流程-涉及s_init汇编函数

一. uboot启动涉及函数 本文简单分析uboot启动流程中&#xff0c;涉及的汇编函数&#xff1a; lowlevel_init函数调用的函数&#xff1a;s_init 函数 save_boot_params_ret函数调用的函数&#xff1a; _main 函数 本文继上一篇文章的学习&#xff0c;地址如下&#xff1a;…...

单例模式详解及5种实现方式 (设计模式 一)

基本概念 在软件开发中&#xff0c;单例模式是一种常见的设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供全局访问点。单例模式在需要确保只有一个对象实例存在的场景中非常有用&#xff0c;例如数据库连接、线程池、日志记录器等。 单例模式的核心思想是通…...

面试系列 - Java常见算法(一)

目录 一、排序算法 1、冒泡排序&#xff08;Bubble Sort&#xff09;&#xff1a; 2、快速排序&#xff08;Quick Sort&#xff09;&#xff1a; 二、查找算法 1、二分查找&#xff08;Binary Search&#xff09;&#xff1a; 三、 图算法 1、深度优先搜索&#xff08;De…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解

文章目录 一、开启慢查询日志&#xff0c;定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...

Java多线程实现之Runnable接口深度解析

Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...