【springcloud】快速搭建一套分布式服务springcloudalibaba(四)

article/2025/6/29 10:00:12

在这里插入图片描述

第四篇 基于nacos搭建分布式项目 分布式系统日志(skywalking+es)
项目所需 maven + nacos + java8 + idea + git + mysql + redis + skywalking + es
本文主要从客户下单时扣减库存的操作,将链路日志模拟出来,网关系统/用户系统/商品系统/订单系统

基于nacos搭建分布式项目 分布式系统日志链路

  • 场景
  • 为什么使用skywalking
    • skywalking
      • apache-skywalking-apm
      • apache-skywalking-java-agent
      • 版本推荐
      • 启动成功的页面
      • 看几张部署后的图
    • 接下来安装部署es+ kibana
    • 项目中要加入的信息
    • 启动项目
  • 结尾

场景

当项目分布式部署之后,各个系统的日志会分布在不同的系统内部,排查线上问题很不方便,业务量大的场景日志更是难找。怎么把同一个请求链路的日志连接在一起呢。比如下单操作,进入网关后要查用户信息,确认用户信息之后,查看商品库存是否可用,之后下单,这一个操作四个系统都有调用,去排查问题难上加难。这个时候可以加入一个唯一id用来标识同一链路,日志id从进入网关开始创建,通过HTTP头、RPC协议等将链路id在服务间传递,把他们存储在db服务中就可以通过唯一id查询到。

为什么使用skywalking

楼主公司的方案是将链路日志通过队列写入es,然后自己写的一套日志系统去查es,通过响应时间去分析性能。楼主网上查阅下来觉得skywalking+ es也有挑战,并且skywalking默认支持性能监控等,易用性较好。

skywalking

SkyWalking 是一款开源的 应用性能监控(APM, Application Performance Management) 和 分布式追踪系统,专为微服务、云原生和容器化架构设计。它由Apache软件基金会孵化并毕业为顶级项目,主要用于帮助开发者监控、诊断分布式系统的性能问题。
SkyWalking通过Java Agent在运行时动态注入追踪代码,自动记录。是不是觉得和aop很像,但他比aop更强大,aop只对Spring容器管理的Bean有用,Agent是在类加载时修改字节码文件,对项目中的所有类都可以监控和增强。
核心插件放在下面了,8.9.0版本的Agent和apm是分开的。

在这里插入图片描述

apache-skywalking-apm

这个插件是SkyWalking 的核心后端服务(Observability Analysis Platform,OAP),负责接收、分析和存储来自各种探针(Agent)的监控数据。
下载执行目录下/bin/startup.sh ,如果启动之后http://127.0.0.1:8080/无法进入控制台 查看日志信息即可,基本上开封急用。楼主是因为版本选择有问题看logs里面的文件排查到的。

apache-skywalking-java-agent

这个插件是Java 应用的探针(Agent),通过字节码增强技术无侵入式地收集应用性能数据。
依赖 skywalking-apm(OAP 服务)接收和存储数据,本身不处理或展示数据。
下载之后修改目录下/config/agent.config里面的

agent.service_name=my-service
collector.backend_service=127.0.0.1:11800

版本推荐

SkyWalking的使用资料还很少,java8建议用这个版本,8.9.0 往上就不支持java8了。

https://archive.apache.org/dist/skywalking/8.9.0/apache-skywalking-apm-8.9.0.tar.gzhttps://archive.apache.org/dist/skywalking/java-agent/8.9.0/apache-skywalking-java-agent-8.9.0.tgz

启动成功的页面

在这里插入图片描述

看几张部署后的图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

接下来安装部署es+ kibana

java8建议使用6.8.23版本的,超过该版本不支持了。

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.23.tar.gzhttps://www.elastic.co/downloads/past-releases#kibana

之后在skywalking目录下的config/application.yml 修改storage.selector 为elasticsearch即可。默认配置 端口是9200.

配置完成后 重新启动SkyWalking。

项目中要加入的信息

pom版本

<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version>8.9.0</version></dependency><!-- SkyWalking Agent(可选,推荐通过启动参数指定) --><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-trace</artifactId><version>8.9.0</version></dependency>

/resources目录下加入logback-spring.xml

<configuration><!-- 注册自定义 Converter --><conversionRule conversionWord="tid" converterClass="org.apache.skywalking.apm.toolkit.log.logback.v1.x.LogbackPatternConverter" /><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><!-- 使用 %tid 直接引用 --><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout"><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern></layout></encoder></appender><root level="INFO"><appender-ref ref="STDOUT" /><appender-ref ref="GRPC_LOG" /></root>
</configuration>

启动项目

通过命令行启动

java -javaagent:你的地址/skywalking-agent/skywalking-agent.jar \-Dskywalking.agent.service_name=goods-service \-Dskywalking.collector.backend_service=localhost:11800 \-jar target/你的包.jar 

观察控制台会自动写入es,通过kibana页面检索。

结尾

第一篇快速部署一套分布式服务

第二篇 基于nacos搭建分布式项目 网关

第三篇 搭建分布式项目 分布式事务(分布式锁+事务)

希望本文可以帮到你。


http://www.hkcw.cn/article/AxJbCXYGdq.shtml

相关文章

设计模式(行为型)-中介者模式

目录 定义 类图结构展示 角色职责详解 模式的优缺点分析 优点 缺点 适用场景 应用实例 与其他模式的结合与拓展 总结 定义 中介者模式的核心思想可以概括为&#xff1a;用一个中介对象来封装一系列的对象交互。这个中介者就像一个通信枢纽&#xff0c;使各对象不需要…

PMOS以及电源转换电路设计

PMOS的使用 5V_EN5V时&#xff0c;PMOS截止&#xff1b; 5V_EN0V时&#xff0c;PMOS导通&#xff1b; 电源转换电路 当Vout0V时&#xff0c;Vg0V, Vgs>Vth, PMOS导通&#xff0c;只有电池供电&#xff1b; 当Vout5V时&#xff0c;Vg4.9V, Vs4.8V?, Vgs<Vth, PMOS截止&am…

本地部署 DeepSeek R1(最新)【从下载、安装、使用和调用一条龙服务】

文章目录 一、安装 Ollama1.1 下载1.2 安装 二、下载 DeepSeek 模型三、使用 DeepSeek3.1 在命令行环境中使用3.2 在第三方软件中使用 一、安装 Ollama 1.1 下载 官方网址&#xff1a;Ollama 官网下载很慢&#xff0c;甚至出现了下载完显示 无法下载&#xff0c;需要授权 目…

数据治理的演变与AI趋势

知识星球&#xff1a;数据书局。打算通过知识星球将这些年积累的知识分享出来&#xff0c;让各位在数据治理、数据分析的路上少走弯路&#xff0c;另外星球也方便动态更新最近的资料&#xff0c;提供各位一起讨论数据的小圈子 1.数据治理的演变 1.1.摘要 数据治理是指组织管…

Fullstack 面试复习笔记:操作系统 / 网络 / HTTP / 设计模式梳理

Fullstack 面试复习笔记&#xff1a;操作系统 / 网络 / HTTP / 设计模式梳理 面试周期就是要根据JD调整准备内容&#xff08;挠头&#xff09;&#xff0c;最近会混合复习针对全栈这块的内容&#xff0c;目前是根据受伤的JD&#xff0c;优先选择一些基础的操作系统、Java、Nod…

【MIMO稳定裕度】基于数据驱动的多输入多输出系统稳定裕度分析

最近一直在忙着写论文&#xff0c;只能说要写一篇高水平论文确实不容易&#xff0c;要一直反复来回修改调整&#xff0c;要求比较高&#xff0c;所以没太有时间和精力写博客&#xff0c;这两天结束了初稿&#xff0c;又正好是假期&#xff0c;出来冒个泡。 本次分享的主题是&am…

Python 训练营打卡 Day 33-神经网络

简单神经网络的流程 1.数据预处理&#xff08;归一化、转换成张量&#xff09; 2.模型的定义 继承nn.Module类 定义每一个层 定义前向传播流程 3.定义损失函数和优化器 4.定义训练过程 5.可视化loss过程 预处理补充&#xff1a; 分类任务中&#xff0c;若标签是整…

TDengine 的 AI 应用实战——电力需求预测

作者&#xff1a; derekchen Demo数据集准备 我们使用公开的UTSD数据集里面的电力需求数据&#xff0c;作为预测算法的数据来源&#xff0c;基于历史数据预测未来若干小时的电力需求。数据集的采集频次为30分钟&#xff0c;单位与时间戳未提供。为了方便演示&#xff0c;按…

【03】完整开发腾讯云播放器SDK的UniApp官方UTS插件——优雅草上架插件市场-卓伊凡

【03】完整开发腾讯云播放器SDK的UniApp官方UTS插件——优雅草上架插件市场-卓伊凡 一、项目背景与转型原因 1.1 原定计划的变更 本系列教程最初规划是开发即构美颜SDK的UTS插件&#xff0c;但由于甲方公司内部战略调整&#xff0c;原项目被迫中止。考虑到&#xff1a; 技术…

(aaai2024) Omni-Kernel Network for Image Restoration

代码&#xff1a;https://github.com/c-yn/OKNet 研究动机&#xff1a;作者认为Transformer模型计算复杂度太高&#xff0c;因此提出了 omni-kernel module &#xff08;OKM&#xff09;&#xff0c;可以有效的学习局部到全局的特征表示。该模块包括&#xff1a;全局、大分支、…

useMemo useCallback 自定义hook

useMemo & useCallback & 自定义hook useMemo 仅当依赖项发生变化的时候&#xff0c;才去重新计算&#xff1b;其他状态变化时则不去做不必要的计算。 useCallback 缓存函数。但是使用注意&#x1f4e2; &#xff0c;useCallback没有特别明显的优化。 *合适的场景——父…

android binder(二)应用层编程实例

一、binder驱动浅析 从上图看出&#xff0c;binder的通讯主要涉及三个步骤。 在 Binder Server 端定义好服务&#xff0c;然后向 ServiceManager 注册服务在 Binder Client 中向 ServiceManager 获取到服务发起远程调用&#xff0c;调用 Binder Server 中定义好的服务 整个流…

GESP2024年3月认证C++二级( 第三部分编程题(2)小杨的日字矩阵)

参考程序&#xff1a; #include <iostream> using namespace std;int main() {int n;cin >> n; // 读入奇数 n// 外层循环控制每一行for (int i 0; i < n; i) {// 内层循环控制每一列for (int j 0; j < n; j) {char ch;// 如果当前列是最左或最右&#x…

BUUCTF[ACTF2020 新生赛]Exec 1题解

BUUCTF[ACTF2020 新生赛]Exec 1题解 分析解题过程总结: 分析 先分析题目&#xff1a;exc()是一个内部调用shell命令的函数&#xff0c;同样的函数还有system(), 创建靶机&#xff0c;打开网址&#xff0c;是一个和PING相关的网页&#xff0c;查看源代码&#xff0c;没有提示&a…

NX869NX874美光固态颗粒NX877NX883

NX869NX874美光固态颗粒NX877NX883 美光固态硬盘颗粒技术解析与市场展望 近年来&#xff0c;固态硬盘&#xff08;SSD&#xff09;市场呈现出蓬勃发展的态势&#xff0c;而作为核心组件的存储颗粒&#xff0c;其技术进展与市场动态自然吸引了众多关注。在众多品牌中&#xff…

CodeTop100 Day20

58、翻转字符串中的数字 class Solution {public String reverseWords(String s) {s s.trim(); int j s.length() - 1, i j;StringBuilder res new StringBuilder();while (i > 0) {while (i > 0 && s.charAt(i) ! ) i--…

重温经典算法——快速排序

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 基本原理 快速排序基于分治思想&#xff0c;通过选取基准元素将数组划分为两个子数组&#xff08;小于基准和大于基准&#xff09;&#xff0c;递归排序子数组。平均时间复…

【机器学习】集成学习与梯度提升决策树

目录 一、引言 二、自举聚合与随机森林 三、集成学习器 四、提升算法 五、Python代码实现集成学习与梯度提升决策树的实验 六、总结 一、引言 在机器学习的广阔领域中,集成学习(Ensemble Learning)犹如一座闪耀的明星,它通过组合多个基本学习器的力量,创造出…

Python量化交易:K线形态识别与技术分析可视化

引言 在量化交易领域&#xff0c;K线形态识别是一种重要的技术分析方法&#xff0c;可以帮助投资者预测市场趋势并制定交易策略。本文将介绍如何使用Python实现K线形态的自动识别与可视化分析&#xff0c;无需依赖复杂的第三方库如TA-Lib&#xff0c;完全使用纯Python实现。通…

前端自动化测试利器:Playwright 全面介绍

目录 &#x1f9ea; 前端自动化测试利器&#xff1a;Playwright 全面介绍 ✨ 为什么选择 Playwright&#xff1f; 1. 跨浏览器支持 2. 多语言支持 3. 自动等待机制 4. 强大的页面交互能力 &#x1f527; Playwright 快速上手 &#x1f4f8; 更强的调试体验 &#x1f9…