使用skywalking,grafana实现从请求跟踪、 指标收集和日志记录的完整信息记录

  Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的开源项目, 2017年12月SkyWalking成为Apache国内首个个人孵化项目, 2019年4月17日SkyWalking从Apache基金会的孵化器毕业成为顶级项目, 目前SkyWalking支持Java、 .Net、 Node.js、 go、 python等探针, 数据存储支持MySQL、 ElasticSearch等, SkyWalking与Pinpoint相同, 对业务代码无侵入, 不过探针采集数据粒度相较于Pinpoint来说略粗, 但性能表现优秀, 目前SkyWalking增长势头强劲, 社区活跃, 中文文档齐全, 没有语言障碍, 支持多语言探针, 这些都是 SkyWalking的优势所在, 还有就是SkyWalking支持很多框架, 包括很多国产框架, 例如, Dubbo、 gRPC、 SOFARPC 等等, 同时也有很多开发者正在不断向社区提供更多插件以支持更多组件无缝接入SkyWalking。

官网地址:https://skywalking.apache.org/

这个是官网的架构设计图:

SkyWalking有两中版本,ES版本和非ES版。如果我们决定采用ElasticSearch作为存储,那么就下载es版本。  SkyWalking 支持 ES、MySQL 等等作为存储器,实现链路等信息的读写。

一般情况下,我们推荐使用 ES 存储器。

下面我们来安装一下。

es 安装这个之前有说明,可以自行去看文章安装。

skywalking安装可以参考官网,下载源码包,在linux或者windows环境安装。

解压后如下:

  • agent目录将来要拷贝到各服务所在机器上用作探针
  • bin目录是服务启动脚本
  • config目录是配置文件
  • oap-libs目录是oap服务运行所需的jar包
  • webapp目录是web服务运行所需的jar包

接下来,要选择存储了,支持的存储有:

  • H2
  • ElasticSearch 6, 7
  • MySQL
  • TiDB
  • InfluxDB

作为监控系统,首先排除H2和MySQL,这里推荐InfluxDB,它本身就是时序数据库,非常适合这种场景

这里要注意,最新的安装包jdk1.8以上才可以。我这里是11:

接下来,我们选择es作为存储数据源,在 config/application.yml ,设置storage中的es地址即可,如果是集群,就写集群的地址

 ​​​​​​

2.2. 安装Agent

https://github.com/apache/skywalking/blob/v8.2.0/docs/en/setup/service-agent/java-agent/README.md

将agent目录拷贝至各服务所在的机器上

这里,我将它拷贝至某个服务目录下:

SkyWalking插件都是即插即用的,可以把optional-plugins中的插件放到plugins中

修改 agent/config/agent.config 配置文件,也可以通过命令行参数指定
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800} ip改为自己服务的地址即可。

 这个包的位置可以随便放,可以在你的启动参数里面加上,也可以使用jar的方式指定路径:

-javaagent:D:\work\gitwork\mavendemo\skywalking-agent\skywalking-agent.jar -Dskywalking.agent.service_name=skywalking-jsbc-service -Dskywalking.collector.backend_service=127.0.0.1:11800

接着修改监控web端口地址:

当然也可以不用修改,使用默认的地址和端口。 

 启动skywalking服务:

 现在打开

 

 我现在比如向数据库中插数据,

 

 模拟100次插入:

通过postman请求:

打开监控可以看到下面的链路日志和执行时间:

 服务执行响应时间,成功率等等指标,可以去官网上看文档

 服务拓扑结构

 链路log和执行时间,这样可以看出链路消耗时间和性能

除来这个我们可以Grafana 来监控性能,比如redis,mysql之类的性能。

Grafana安装也很简单,下载源码包,解压后直接启动即可:

 然后启动:

 账号密码admin/admin

添加redis数据源

 

如果是集群的,填写集群地址即可,保存后,我们可以自定义redis性能,也可以使用官方的模版导入json文件模版即可:

Redis Dashboard | Grafana Labs

下面我们写个程序读写redis,下面是pom文件:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.58</version></dependency><!-- redis分布式锁 --><dependency><groupId>org.springframework.integration</groupId><artifactId>spring-integration-redis</artifactId></dependency><!-- redis 连接池--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.2.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
    @Testpublic void shouldUse3DbConcurrent(){final String key3="dm:3:cr:string:key";final String key0="dm:0:cr:string:key";List<String> keys=Arrays.asList(key0, key3);stringRedisManager.deleteKeyBatch(keys);string3RedisManager.deleteKeyBatch(keys);stringRedisManager.set(key0, "0");string3RedisManager.set(key3, "0");int threadCount=500;int addTotal=50000;RedisAddManager addManager0=new RedisAddManager(stringRedisManager, key0, threadCount, addTotal);RedisAddManager addManager3=new RedisAddManager(string3RedisManager, key3, threadCount, addTotal);addManager0.startThreads();addManager3.startThreads();addManager0.countDown();addManager3.countDown();//等待线程执行完毕addManager0.joins();addManager3.joins();int expectedTotal=threadCount*addTotal;String expectedTotalStr=String.valueOf(expectedTotal);String result0=stringRedisManager.get(key0);Assert.assertEquals(expectedTotalStr, result0);String result0_=stringRedisManager.get(key3);Assert.assertNull(result0_);String result3=string3RedisManager.get(key3);Assert.assertEquals(expectedTotalStr, result3);String result3_=string3RedisManager.get(key0);Assert.assertNull(result3_);}private class RedisAddManager{private CountDownLatch countDownLatch=new CountDownLatch(1);private RedisManager<String,String> stringRedisManager;private String key;private int threadCount;private int addTotal;private List<Thread> threads=new ArrayList<>();public RedisAddManager(RedisManager<String, String> stringRedisManager, String key, int threadCount, int addTotal) {this.stringRedisManager = stringRedisManager;this.key = key;this.threadCount=threadCount;this.addTotal = addTotal;}

启动执行后,可以看到仪表盘redis的读写性能:

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

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

相关文章

纯CSS实现文本或表格特效(连续滚动与首尾相连)

纯CSS实现文本连续向左滚动首尾相连 1.效果图&#xff1a; 2.实现代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, init…

【LeetCode刷题之路】622.设计循环队列

LeetCode刷题记录 &#x1f310; 我的博客主页&#xff1a;iiiiiankor&#x1f3af; 如果你觉得我的内容对你有帮助&#xff0c;不妨点个赞&#x1f44d;、留个评论✍&#xff0c;或者收藏⭐&#xff0c;让我们一起进步&#xff01;&#x1f4dd; 专栏系列&#xff1a;LeetCode…

Node.js基础入门

1.Node.js 简介 Node 是一个让 JavaScript (独立)运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。 发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。 简单的说 Node.js 就是运行在服务端的…

#思科模拟器通过服务配置保障无线网络安全Radius

演示拓扑图&#xff1a; 搭建拓扑时要注意&#xff1a; 只能连接它的Ethernet接口&#xff0c;不然会不通 MAC地址绑定 要求 &#xff1a;通过配置MAC地址过滤禁止非内部员工连接WiFi 打开无线路由器GUI界面&#xff0c;点开下图页面&#xff0c;配置路由器无线网络MAC地址过…

Qt-chart 画折线图(以时间为x轴)

上图 代码 #include <iostream> #include <random> #include <qcategoryaxis.h>void MainWindow::testLine() {//1、创建图表视图QChartView* view new QChartView(this);//2.创建图表QChart* chart new QChart();//3.将图表设置给图表视图view->setCh…

up主亲测,ToDesk/青椒云/顺网云这三款云电脑玩转AIGC场景

文章目录 1. 前言2. 云电脑性能分析3. 基础硬件数据3.1 硬件配置3.2 AI 评测跑分 4. 云电脑 AIGC 上手实测4.1 ToDesk4.1.1 AIGC 技术集成情况4.1.2 界面及功能4.1.3 项目部署4.1.4 黑神话悟空 AI 换脸4.1.6 AIGC 文生图体验 4.2 青椒云4.2.1 AIGC 技术集成情况4.2.2 界面及功能…

C++(十八)

前言&#xff1a; 本文依据上一篇&#xff0c;继续对C中的函数进行学习。 一&#xff0c;内联函数。 再执行函数代码时&#xff0c;比不使用函数花费了更多时间&#xff0c;因为总结步骤&#xff0c;传递参数和返回值都很花费时间。 因此&#xff0c;在调试小型函数时&…

数独游戏app制作拆解(之一)——功能介绍

android studio版本&#xff1a;2023.3.1 例程名称&#xff1a;shudu666 前阵子作了一个EXCEL版的数独&#xff0c;再早之前就想作这个数独app,但一直没动手&#xff0c;一方面懒&#xff0c;另一方面我把自己绕到坑里了&#xff0c;之前做的是一解数独的app,那个是有点难&am…

Python随机抽取Excel数据并在处理后整合为一个文件

本文介绍基于Python语言&#xff0c;针对一个文件夹下大量的Excel表格文件&#xff0c;基于其中每一个文件&#xff0c;随机从其中选取一部分数据&#xff0c;并将全部文件中随机获取的数据合并为一个新的Excel表格文件的方法。 首先&#xff0c;我们来明确一下本文的具体需求。…

构建树莓派温湿度监测系统:从硬件到软件的完整指南

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

28. Three.js案例-创建圆角矩形并进行拉伸

28. Three.js案例-创建圆角矩形并进行拉伸 实现效果 知识点 WebGLRenderer (WebGL渲染器) WebGLRenderer 是 Three.js 中用于渲染 3D 场景的主要渲染器。 构造器 WebGLRenderer( parameters : Object ) 参数类型描述parametersObject渲染器的配置参数&#xff0c;可选。 …

开源Java快速自测工具,可以调用系统内任意一个方法

java快速测试框架&#xff0c;可以调到系统内任意一个方法&#xff0c;告别写单测和controller的困扰。 开源地址&#xff1a;https://gitee.com/missyouch/Easy-JTest 我们在开发时很多时候想要测试下自己的代码&#xff0c;特别是service层或者是更底层的代码&#xff0c;就…

004 QT常用控件Qwidget_上

文章目录 前言控件概述QWidgetenable属性geometry属性windowTitle属性windowlcon属性 小结 前言 本文将会向你介绍常用的Qwidget属性 控件概述 Widget 是 Qt 中的核心概念. 英文原义是 “⼩部件”, 我们此处把它翻译为 “控件” . 控件是构成⼀个图形化界面的基本要素. QWi…

Flash语音芯片相比OTP语音芯片的优势

Flash语音芯片和OTP语音芯片是两种常见的语音解决方案&#xff0c;在各自的应用领域中发挥着重要作用。本文‌将介绍Flash语音芯片相比OTP(One-Time Programmable)语音芯片的显著优势‌。 1‌.可重复擦写‌&#xff1a;Flash语音芯片的最大特点是支持多次编程和擦除&#xff0c…

【深度学习】深刻理解Swin Transformer

Swin Transformer 是一种基于 Transformer 的视觉模型&#xff0c;由 Microsoft 研究团队提出&#xff0c;旨在解决传统 Transformer 模型在计算机视觉任务中的高计算复杂度问题。其全称是 Shifted Window Transformer&#xff0c;通过引入分层架构和滑动窗口机制&#xff0c;S…

mysql客户端命令

目录 结束符 ; \g \G 中断输入 ctrl c 查看命令列表 help ? (\?) connect (\r) status (\s) delimiter (\d) exit (\q) quit (\q) tee (\T) ​编辑 notee (\t) prompt (\R) source (\.) system (\!) ​编辑 use (\u) help contents 结束符 ; \g \G 当我…

Tomcat原理(4)——尝试手动Servlet的实现

目录 一、什么是Servlet 1.servlet的定义 2.servlet的结构 二、实现servlet的流程图 三、具体实现代码 1、server 2.实体类request&response 3.HttpServlet抽象类 4.再定义三个servlet进行测试 Tomcat原理&#xff08;3&#xff09;——静&动态资源以及运行项…

D3 基础1

D3 D3.js (Data-Driven Documents) 是一个基于 JavaScript 的库&#xff0c;用于生成动态、交互式数据可视化。它通过操作文档对象模型 (DOM) 来生成数据驱动的图形。官方网站是 https://d3js.org/ <!DOCTYPE html> <html lang"en"><head><me…

基线检查:Windows安全基线.【手动 || 自动】

基线定义 基线通常指配置和管理系统的详细描述&#xff0c;或者说是最低的安全要求&#xff0c;它包括服务和应用程序设置、操作系统组件的配置、权限和权利分配、管理规则等。 基线检查内容 主要包括账号配置安全、口令配置安全、授权配置、日志配置、IP通信配置等方面内容&…

Python -- Linux中的Matplotlib图中无法显示中文 (中文为方框)

目的 用matplotlib生成的图中文无法正常显示 方法 主要原因: 没找到字体 进入windows系统的C:\Windows\Fonts目录, 复制自己想要的字体 粘贴到Linux服务器中对应python文件所处的文件夹内 设置字体: 设置好字体文件的路径在需要对字体设置的地方设置字体 效果 中文正常显…