链路追踪组件Skywalking使用

news2024/11/25 2:40:22

前言

Skywalking是一个国产开源框架,2015年由吴晟开源 , 2017年加入Apache孵化器,其用于追踪多微服务模块调用之间日志的追踪,协助程序员进行排除问题

Skywalking架构

Skywalking架构图大概如下

SkyWalking OAP: SkyWalking分析监控平台

SkyWalking UI :展示数据

这也是监控平台的核心链路
收集数据->分析数据->保存数据->展示数据-> 监控报警

SkyWalking使用

下载

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

0.9.0版本的OAP

8.8.0的agent插件

OAP安装

首先,上传到linux服务器上,如下

解压
tar -zxvf apache-skywalking-apm-9.0.0.tar.gz

查看bin目录下的文件,如下

oapService.sh:只启动oap服务
webappService.sh:只启动ui服务
startup.sh:同时启动oap和ui

刚开始我们肯定是两个一起启动的

/opt/apache-skywalking-apm-bin/config/application.yml文件为oap的配置文件,默认使用的是h2的数据源进行存储数据,它是一个基于内存的数据库,我们先使用这个默认的,如下

/opt/apache-skywalking-apm-bin/webapp/webapp.yml为ui的配置文件,如下

接下来我们启动一下启动命令为./bin/startup.sh,启动日志在如下位置:

查看 cat logs/skywalking-oap-server.log日志,如下

11800端口用于接收来自Java应用数据采集的传输
12800端口用于给UI获取数据展示使用的

然后我们访问一下ui的接口,地址为:http://192.168.0.90:8080/, 看到以下内容就是成功了,如下

到这里oap和ui服务就弄好了,接下来我准备了一个springboot项目,用于测试接入情况,你可以使用我的,也可以自己写,我的项目地址如下

SkyWalking Agent追踪项目

应用接入oap

首先解压上面下面的apache-skywalking-java-agent-8.10.0.tgz,如下

配置方式启动

通过jar包方式接入

#!/bin/sh
# SkyWalking Agent配置
export SW_AGENT_NAME=zxc-skywalking #Agent名字,一般使用`spring.application.name`
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.0.90:11800 #配置 Collector 地址
export SW_AGENT_SPAN_LIMIT=2000 #配置链路的最大Span数量,默认为 300。
export JAVA_AGENT=-javaagent:E:\linuxSoft\skywalking-agent\skywalking-agent.jar
java $JAVA_AGENT -jar skywalking.jar #jar启动

通过jvm参数指定

java -javaagent:E:\linuxSoft\skywalking-agent\skywalking-agent.jar
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.0.90:11800 
-DSW_AGENT_NAME=zxc-skywalking -jar skywalking.jar

skywalking配置方式

java -javaagent:E:\linuxSoft\skywalking-agent\skywalking-agent.jar
-Dskywalking.agent.service_name=zxc-skywalking
-Dskywalking.collector.backend_service=192.168.90.0:11800

在IDEA中使用Skywalking

在本地打开项目中添加如下jvm参数

-javaagent:E:\linuxSoft\skywalking-agent\skywalking-agent.jar
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.0.90:11800 
-DSW_AGENT_NAME=zxc-skywalking

配置完如下,图片

然后启动程序,再到SkyWalking,如下

启动程序,如下出现了Skywalking相关的日志

这个时候再到oap上查看http://192.168.0.90:8080/general,如下

服务就已经出来

查看追踪日志

此时点击如下Trace模块,没有任何日志,如下

接下来我访问一下我本地的项目,http://localhost:8081/user/get/?id=1,访问完以后再看刷新,如下

整个链路就出来了,到此我们的配置就成功了,同时可以看到如下的访问层次

我的项目是先走了web,然后同时调用了redis和mysql,都能检测到

Skywalking告警通知

Skywalkingn默认提供了告警配置,在config/alarm-settings.yml文件中,内容如下

为了方便,skywalking发行版中提供了默认的alarm-setting.yml文件,包括一些规则,每个规则有英文注释,可以根据注释得知每个规则的作用:

  • 在最近10分钟的3分钟内服务平均响应时间超过1000ms

  • 最近10分钟内,服务成功率在2分钟内低于80%

那么我模拟一下在最近10分钟的3分钟内服务平均响应时间超过1000ms这种情况

模拟告警

我写了如下的方法

@GetMapping("/sleep")
public User sleep(@RequestParam("id") Integer id) throws Exception{
    //模拟超时
    Thread.sleep(2000);
    return userService.getUser(id);
}

同时我在alarm-setting.yml配置了告警回调接口,如下

但是我在windows里面请求是无效的,所以我要先把项目放到Linux中跑起来,然后在请求,同时javaagent也要上传上去,如下

启动命令为

java -javaagent:/opt/skywalking-agent/skywalking-agent.jar -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.0.90:11800 -DSW_AGENT_NAME=zxc-skywalking -jar skywalking-0.0.1-SNAPSHOT.jar

注意刚开始告警这里是空的

然后我们再访问休眠的那个方法,多访问几次,地址:http://192.168.0.90:8081/user/sleep/?id=1

然后你要等一定的时间才会触发这个规则,你可以先喝下水之类的,回头再回来看

看看他告警通知的回调数据,如下

这一串是skywalking通过我配置的接口返回给我的

[{
    scopeId = 2,
    scope = SERVICE_INSTANCE,
    name = 7958 f824172946fab9064e9a7947b24c @192 .168 .0 .90 of zxc - skywalking,
    id0 = enhjLXNreXdhbGtpbmc = .1 _Nzk1OGY4MjQxNzI5NDZmYWI5MDY0ZTlhNzk0N2IyNGNAMTkyLjE2OC4wLjkw,
    id1 = ,
    ruleName = service_instance_resp_time_rule,
    alarmMessage = Response time of service instance 7958 f824172946fab9064e9a7947b24c @192 .168 .0 .90 of zxc - skywalking is more than 1000 ms in 2 minutes of last 10 minutes,
    tags = [],
    startTime = 1673969358452
}, {
    scopeId = 1,
    scope = SERVICE,
    name = zxc - skywalking,
    id0 = enhjLXNreXdhbGtpbmc = .1,
    id1 = ,
    ruleName = service_sla_rule,
    alarmMessage = Successful rate of service zxc - skywalking is lower than 80 % in 2 minutes of last 10 minutes,
    tags = [],
    startTime = 1673969358452
}, {
    scopeId = 6,
    scope = ENDPOINT_RELATION,
    name = User in User to GET: /user/sleep in zxc - skywalking,
    id0 = VXNlcg == .0 _VXNlcg == ,
    id1 = enhjLXNreXdhbGtpbmc = .1 _R0VUOi91c2VyL3NsZWVw,
    ruleName = endpoint_relation_resp_time_rule,
    alarmMessage = Response time of endpoint relation User in User to GET: /user/sleep in zxc - skywalking is more than 1000 ms in 2 minutes of last 10 minutes,
    tags = [],
    startTime = 1673969358453
}]
zxc-skywalking is more than 1000ms in 2 minutes of last 10 minutes
name=User in User to GET:/user/sleep in zxc-skywalking

数据存储源修改

还记得上面说到的文件吗,也就是config/application.yml文件中可以配置多个存储源,我们上面配置的是h2,重启数据就丢失了,但是我们也可以配置到其他数据源中,如下

存储到ElastciSearch中

首先,要安装ElastciSearch,参考我之前的文章

https://blog.csdn.net/zxc_user/article/details/128666834

然后修改config/application.yml文件

storage:
  selector: ${SW_STORAGE:elasticsearch}  #指定使用elasticsearch存储数据
  elasticsearch:
    namespace: ${SW_NAMESPACE:"zxc-skywalking-"}  #生成zxc-skywalking-前缀的索引
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.0.90:9200} #elasticsearch服务器地址

注,如果你的es没有开启加密,那么这些要注释掉

#user: ${SW_ES_USER:""}
#password: ${SW_ES_PASSWORD:""}

然后,我又是在本地访问了路径,http://127.0.0.1:8081/user/get/?id=1

访问完查看SkyWalking日志,如下

我们再使用Kibana进行查看,如下

内存不足

因为我是在虚拟机测试的,所以elasticsearch只给了1g,所以skywalking在同步的时候出错了,如果你也是出这个错,可以试试把elasticsearch内存调大点...

flush data to ES failure:
java.util.concurrent.CompletionException: com.linecorp.armeria.client.ResponseTimeoutException
        at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:292) ~[?:1.8.0_281]

总结

到这里就结束了,搭建过程中遇到的一个问题就是elasticsearch内存不够引起skywalking写入不了,下次得注意了

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

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

相关文章

如何格式化U盘?以及优盘格式化的恢复方法

我们经常使用U盘来进行存储和传输数据,使用时间久了,可能需要我们进行优盘格式化。需要注意!优盘格式化之前,记得对里面的数据进行备份,防止数据清空造成不必要的损失。 如何进行U盘格式化?格式化优盘后&a…

“深度学习”学习日记。误差反向传播法--加法层、乘法层、激活函数层的实现

2023.1.16 1、加法层、乘法层: 前两篇文章都在讲述理论,今天实现代码操作:关于加法节点,乘法节点的内容在这篇文章。 https://blog.csdn.net/m0_72675651/article/details/128695488 在以后的学习中,将把构建神经网…

AHOcoder声码器

AHOcoder声码器 目前最常见的声码器有WORLD,STRAIGHT,Griffin_Lim等,AHocoder算是少见的,但也可以学习一下。 代码下载网址:AHOcoder 简介 AHOcoder 语音声码器由 Daniel Erro 在巴斯克大学的 AHOLAB 信…

若依配置教程(一)运行若依系统

一、下载源代码 若依的源代码是开源的,所以我们在若依的官方网站即可进行下载,若依的官网是:http://doc.ruoyi.vip/ruoyi-vue/,进入官网后,会显示代码下载的地址:https://gitee.com/y_project/RuoYi-Vue&a…

【进阶】Bean作用域和生命周期

努力经营当下,直至未来明朗! 文章目录一、通过⼀个案例来看 Bean 作⽤域的问题1. 被修改的Bean案例2. 原因分析二、作用域Scope定义1. Bean的六种作用域(重点)1)singleton2)prototype3)request4…

JVM——类加载与字节码技术(2)

三、编译期处理 所谓的 语法糖 ,其实就是指 java 编译器把* .java 源码编译为* .class 字节码的过程中,自动生成和转换的一些代码,主要是为了减轻程序员的负担,算是 java 编译器给我们的一个额外福利 【注意】以下代码的分析&am…

Python爬虫之基于 selenium 实现文献信息获取

目录初识 selenium网页分析代码实现踩过的坑最近有小伙伴后台跟我说,临近毕业,写毕业论文需要上知网查找大量的文献,但是一篇一篇看文献信息以及文献摘要又有点麻烦,能不能让我写一个爬虫去批量获取文献相关信息 我一听好家伙&am…

【算法】二叉树遍历

目录1.概述2.代码实现2.1.二叉树定义2.2.前序遍历2.3.中序遍历2.4.后序遍历2.5.层序遍历3.应用本文参考: LABULADONG 的算法网站 1.概述 (1)所谓遍历 (Traversal) 是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问…

《从零开始编写一个直播服务器》 C++ 实现一个最简单的HTTP-FLV流媒体服务器

流媒体服务系列文章 文章目录流媒体服务系列文章前言一、http flv?二、使用步骤服务器代码总结前言 HTTP FLV通过http传输,时延可控制在2秒以内,浏览器可基于bilibili开源的flv.js(采用h5 mse技术)开发,比起rtsp、rtmp等免插件播…

Spring BeanPostProcessor

BeanPostProcessor,是bean的增强器,在bean初始化前后调用,常用的方法有postProcessBeforeInitialization和postProcessAfterInitialization,在Spring启动并初始化bean前后通过它们做一些扩展操作。 1、BeanPostProcessor 接口说明…

【信管9.1】​项目沟通及过程

项目沟通及过程沟通这个东西,可以说是整个项目成功失败最关键的因素。9成以上失败的项目在最后总结的时候,沟通不畅或者信息对接问题都会占据前三甲。其实只要是做项目,那么必须有团队,有团队有人,那么沟通就是不可避免…

03 技术太卷我学APEX-关于blob数据类型的使用

03 技术太卷我学APEX-关于blob数据类型的使用 0 Oracle 的blob类型 BLOB BLOB全称为二进制大型对象(Binary Large Object)。它用于存储数据库中的大型二进制对象。可存储的最大大小为4G字节。 通常像图片、文件、音乐等信息就用BLOB字段来存储,先将文件…

外贸软件成本核算丨采购出入库有磅差怎么办

在液化天然气油料等行业,在与供应商之间的进出口贸易过程中,总是少不了会出现磅差的情况,因此就需要有磅差的约定。那什么是磅差呢?磅差指的是,供应方在发货时提供的磅单与购买方实际验收过磅数量之间的差额。一般磅差…

C++设计模式(1)——单例模式

亦称:单件模式、Singleton 意图 单例模式是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。 问题 单例模式同时解决了两个问题, 所以违反了单一职责原则: 1、保证一个类只…

CSS给元素添加边框(样式、颜色、宽度)

给元素添加边框 CSS边框属性允许你指定一个元素边框的样式和颜色, 和边框宽度。 可以使用 border 属性将边框样式,颜色,和宽度 一起设置。 如果不设置其中的某个值,也不会出问题,比如 border: solid #ff0000; 也是允许的。 使用border-style属性设置边…

ORA-39002: 操作无效 ORA-39070: 无法打开日志文件

今天在oracle12c上导数据,出现了错误。导库脚本久经考验,不应该有什么问题,但就是报错了。错误开头2句是: ORA-39002: 操作无效 ORA-39070: 无法打开日志文件 网上搜来的结果,是存放导出文件的路径不对,就…

常用API(String、ArrayList)

API(应用程序接口) Java写好的技术(功能代码),可以直接调用String概述java.lang.String类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串Java程序中的所有字符串文字&a…

JavaEE进阶第三课:Spring更简单的对象存储和取出(上)

上篇文章介绍了Spring的创建和使用,讲解3了Bean对象的基本存储和取出,这篇文章我们将会介绍Spring更简单的对象存储 目录1.Bean的存储1.0准备工作1.1五大类注解1.1.2为什么要有这么多注解1.2方法注解1.1.1方法注解需要搭配类注解一起使用1.2.2方法重载怎…

详细实例说明+典型案例实现 对迭代法进行全面分析 | C++

第四章 迭代法 目录 ●第四章 迭代法 ●前言 ●一、迭代法是什么? 1.简要介绍 2.代码示例(简单理解) 3.生活实例 ●二、迭代法的典型案例——开平方&帕斯卡三角形 1.开平方 2.帕斯卡三角形 ●总结 前言 简单的来…

游戏服务器如何维护

随着游戏的不断发展,游戏服务器的维护的重要性日益提升。对于玩家而言,他们需要得到更好的体验和更快的速度来享受这个娱乐项目。而对于运营者来说,则是确保安全运行、避免中断或者延迟的工作。本文就将介绍游戏服务器如何维护。如果你的游戏…