基于Java日志平台的访问链路追踪实战

详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等 详解最新springcloudalibaba链路追踪skywalking框架使用(skywalking介绍、架构、环境本地部署&配置、日志收集、自定义链路追踪、告警) 阅读详情

语雀完整版:

https://www.yuque.com/g/mingrun/embiys/ch6d86/collaborator/join?token=vyXkXgZ7PHOQhTI5&source=doc_collaborator# 《基于Java日志平台的访问链路追踪实战》

基于Java日志平台的访问链路追踪实战

一、Java日志体系

  1. 概述

    • 日志接口
    • JCL(Jakarta Commons Logging,Commons Logging  ),Java Apache的项目
    • SLF4J: Simple Logging Facade for Java,缩写Slf4j,是⼀一套简易易Java日志门面,只提供相关接口,和其他日志⼯工具之间需要桥接
  1. 发展历程
    • sout、e.printstack()
    • Log4j
    • Log4j2:性能好,但是完全不兼容一代
    • Jul(性能不行,jdk自带的)
    • JCL(为了抽象一层接口,解决混乱问题)
      • jcl接口下的默认实现是 log4j,没有引入就会使用 jul
      • jcl推荐下面这种写法,来避免参数拼接造成的浪费
if (logger.isDebugEnabled()) {
    logger.debug("this is a debug info , message :" + msg);
}

    • slf4j
      • 他的实现是logback
      • 他能桥接到 JCL那边去

  1. 配置详解
    • 概述
      • 日志级别
        • trace: 路径跟踪
        • debug: -般用于日常调式
        • info: 打印重要信息
        • warn:给出警告
        • error: 出现错误或问题
          而每个日志组件的具体级别划分稍有不同
      • 日志组件
        • appender: 日志输出目的地,负责日志的输出(输出到什么 地方,  文件、socket、kafka)
        • logger:日志记录器,负责收集处理日志记录(如何处理日志)
        • layout: 日志格式化,负责对输出的日志格式化(以什么形式展现)
  1. 日志建议
    • 门面约束:使用 Log Facade 可以方便的切换具体的日志实现 ,实战中可以把pom中 日志实现框架依赖 scope设置为 runtime
    • 单一原则,一个项目中只使用一个日志实现
    • 依赖约束:pom中的optional选项设置为 true,这样别人继承你项目的时候 就不会继承你得依赖
    • 避免传递
<exclusion>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
</exclusion>

    • 写法注意
    • 减少分析
    • 精简至上

二、中间件

  1. 概述:
    • 日志的⽣生命周期一般分为采集,传输,存储和分析四个环节,选⽤用中间件时所关注的⻆角度:性能、可靠性、插件⽀支持程度、配置复杂度
    • 总结:elk成熟,logstatch性能弱于filebeat,kafka做存储性能高
  1. 安装 Es、分词器、es-head、log_statsh、Kibana、kafka、kafka-manager、filebeat
  1. 流程与配置
    fileBeat的速度比logStatsh要快,所以日志文件是由 fileBeat来采集的,然后给kafka,然后logstatsh从kafka获取,然后输出给 es
    • fileBeat
filebeat.inputs:
- type: log
	enabled: true
	paths:
		- /root/logs/*.log
	fields:
		from: filebeat
output.kafka:
	enabled: true
	hosts: ["39.98.133.153:9103"]
	topic: filebeat
	compression: gzip

    • kafka补充知识
      • 基本概念

      • offset管理
        kafka允许consumer将当前消费的消息的offset提交到kafka中,这样如果consumer因异常退出后,下次启动仍然可以从上次记录的offset开始向后继续消费消息。
    • logstash 配置
input {
    kafka {
        bootstrap_servers => ["39.98.133.153:9103"]
            group_id => "logstash"
            topics => ["filebeat"]
            consumer_threads => 1
            decorate_events => true
            add_field => {"from" => "filebeat"}
        codec => "json"
    }
}
filter {
    mutate {
        rename => { "[host][name]" => "host" }
    }
}
output {
    elasticsearch {
        hosts => "localhost:9200"
            index => "mylog"
    }
    stdout {
    }
}

三、项目搭建

  1. 设计目标
    • 日志的内容应该包括 某次请求id(requestId )、某个用户会话id(sessionId)、某个终端请求id(terminalId),来做到快速检索
    • 要能 满足集群、微服的使用
    • 低侵入、低耦合,延时不能太高
    • 日志的 缓存与防丢失
  1. 系统拓扑

  1. 具体搭建
    • 创建项目 划分模块
    • 引入依赖 logback-kafka-appender 和 kafka-clients
    • 加入logback配置文件,主要配置了 kafkaAppender
    • 自定义一个 kafkaAppender

三、项目实施

  1. 前端请求:前端一般请求到nginx,这一层有如下两个方案
    • 第一种是使用 filebeat采集日志文件
    • 第二种是使用,lua脚本方式,直接输出到kafka,其中,rid和tid在这一步生成
      • rid:一个随机数
      • tid:可以使用 user-agent
  1. 微服务层
    • 在拦截器中,向logbean放入 ip地址、sid(登陆的时候 可以放入用户名),rid(随机数 ,请求Id), tid(ip、user-agent)
    • 定义一个 注解@logInfo,定义切面 对加上这个注解的方法,方法执行前后 打印执行日志,方法中可以对日志进行封装,如下所示
public class LogUtil {
    private final static Logger logger = LoggerFactory.getLogger("kafka");
    
    public static void printInfo(String msg) {
        LogBean logBean = LogBean.logBeanThreadLocal.get();
        logBean.setMessage(msg);
        logger.info(logBean.toString());
    }
}

  1. 跨服务调用
  1. 项目实现总结
    • 引入依赖 logback-kafka-appender 和 kafka-clients,然后就创建一个自定义的KafkaAppender(统一定义这个一个),其中制定了kafka的配置,然后每个服务项目 都添加自己的logback.xml配置文件,并在其中配置上面自定义的 appender
    • 定义一个实体类来存放日志信息(这条日志的信息、时间、IP地址、用户名之类的),同时这个实体类是在构造函数中 给其中一个threadLocal变量赋值
    • 定义一个拦截器,将初始化上面这个实体类,并放入初始信息,IP地址、用户名等,再把他自己放到threadlocal变量中去,并打印下接收到了这个请求
    • 然后自定义一个 logInfo注解,写个切面,对加了这个注解的方法做环绕通知,在方法之前前后打印日志,并标上方法名
    • 要自己打印日志,就要先从上面这个 threadLocal中获取一个实体类对象,然后再把自己的msg放进去
  1. 日志内容
    • rid(requestId):一次请求的唯一标示,⽣生成后一直传递到调⽤用结束
      • 项目中使用随机字符,就是定义一个数组,里面放了字母和数字,然后随机去取,拼接成一个长度为10的字符串9
    • sid(sessionId):⽤用户会话相关,涉及登陆时存在,不不登陆的操作为空
      • 用户名-租户-用户Id
    • tid(terminalId):同一个终端的请求标示,可以理理解为同一个设备。可能对应多个⽤用户的多次请求
      • 从请求头中取出UserAgent(可以区分安卓、IOS、不同的浏览器)
    • 另外还有Ip地址
分布式链路追踪-SkyWalking SkyWalking是开源的可观测平台,主要用于收集,分析,聚合和可 视化服务和云原生基础设施的数据。Skywalking提供了一种简单得 方式来维护分布式系统得视图关系。在开发过程中,开发人员经常会使用IDEA的Debug功能(包含本地 和远程)调试应用,在JVM进程期间获取应用运行的JVM信息,变量 信息等。这些个技术通过Java Agent来实现的,那么Java Agent到 底是啥,为啥这么吊?idea得Debug功能热部署 JRebel各种线上诊断工具代码覆盖率工具性能分析。 阅读详情

相关推荐

神领物流-day12-分布式日志与链路追踪

GrayLog是一个轻量型的分布式日志管理平台,一个开源的日志聚合、分析、审计、展示和预警工具。在功能上来说,和 ELK类似,但又比 ELK要简单轻量许多。依靠着更加简洁,高效,部署使用简单的优势很快受到许多公司的青睐。其基本框架如图:微服务中的GrayLog客户端发送日志到GrayLog服务端GrayLog把日志信息格式化,存储到Elasticsearch客户端通过浏览器访问GrayLog,GrayLog访问Elasticsearch。

心飞为你飞 912

【Java开发】Spring Cloud 08 :链路追踪

任何一个架构难免会出现bug,微服务相比于单体架构日志查询更为困难,因此spring cloud推出了Sleuth等组件的链路追踪技术来实现报错信息的定位及查询。

尹煜的博客 3751

Docker安装Jaeger链路追踪平台

Jaeger 是一个开源的分布式追踪系统,最初由 Uber 开发并开源,现已成为云原生计算基金会(CNCF)的项目之一,它已经有 9 年的成功历史。它主要用于监控和诊断微服务架构中的请求链路,帮助开发者和运维人员理解系统中各个服务的调用关系。Jaeger 通过为每个请求生成唯一的追踪 ID,记录请求在系统中的完整路径,包括经过的每个服务、调用的方法以及每个步骤的耗时。可以帮助分析系统中每个服务的性能,识别瓶颈和慢请求。通过可视化展示每个 Span 的耗时,开发人员可以快速定位问题所在。

不会飞的小龙人的博客 1596

Java实现日志全链路追踪.精确到一次请求的全部流程

广大程序员在排除线上问题时,会经常遇见各种BUG.处理这些BUG的时候日志就格外的重要.只有完善的日志才能快速有效的定位问题.为了提高BUG处理效率.我决定在日志上面优化.实现每次请求有统一的id.通过id能获取当前接口的全链路流程走向.实现效果如下: 一次查询即可找到所有关键信息.不再被多线程日志进行困扰了.

wang5701071的博客 1903

基于ELK与链路追踪构建可观测性系统:从日志采集到证据保全实战

在分布式系统与微服务架构中,可观测性已成为保障系统稳定性和快速故障排查的核心能力。其原理在于通过日志、指标和追踪三大支柱,全面采集系统运行时状态数据,形成完整的数据链路。这一技术价值在于将传统的经验式运维转变为数据驱动的决策模式,显著提升问题定位效率和系统透明度。在实际应用场景中,可观测性系统广泛用于业务监控、性能分析、安全审计和合规性保障。本文聚焦于如何利用ELK技术栈和链路追踪工具,构建一个具备实时监控、日志聚合和可视化能力的可观测性平台,并深入探讨了数据驱动决策和证据保全机制在其中的关键作用,为高并发

weixin_34332905的博客 434

基于Java日志平台的访问链路追踪实战(1.01G)

01-日志专题-java日志体系基础 ---01-课程简介及学习目标.mp4 ---02-java日志体系概述.mp4 ---03-系统日志与log4j日志简介.mp4 ---04-log4j实例代码展示.mp4 ---05-jul的诞生与代码展示.mp4 ---06-jcl的历史背景与简介.mp4 ---07-jcl面向接口代码风格展示.mp4 ---08-jcl的优缺点与解决方案.mp4 ---09-logback的历史和编码风格.mp4 ---10-slf4j与其他日志的配合与总结.mp4 ---11-log4j2的配置与日志发展历程总结.mp4 ---12-日志组件配置概述.mp4 ---13-jul配置文件与级别.mp4 ---14-jul打印级别与其他配置项.mp4 ---15-log4j配置文件与配置项.mp4 ---16-log4j的appender及pattern格式.mp4 ---17-logback配置及官方文档使用.mp4 ---18-logback配置自动刷新.mp4 ---19-jcl配置及实现类优先级.mp4 ---20-commons-logging配置

Java应用层数据链路追踪(附优雅打印日志姿势)

Java应用层数据链路追踪(附优雅打印日志姿势) 今天来聊些大家都用得上的东西:数据链路追踪。之前引入了系统的监控来快速定位应用操作系统上的问题,而业务问题呢?在这篇文章中你可以看到用注解的方式打印日志,也能看到简易版的全链路追踪是怎么实现的。 不多BB,开始吧 01、注解日志打印 日志的搭建我在austin最开始的前几篇已经有提及了,之前一直在等我的基友**@蛮三刀酱**他的日志组件库上传到Maven库,好让我使用使用下。在最近,他已经更新了两个版本,然后传到了Maven库了,所以我就来接入了 这个组件库

muli526的博客 1065

华中科技大学计算机组成原理-单总线CPU设计(全部通关)

【计算机组成原理】 单总线CPU实验 华中科技大学-计算机组成原理 实验三 单总线CPU设计 第1关 MIPS指令译码器设计 第2关 单总线CPU微程序入口查找逻辑 第3关 单总线CPU微程序条件判别测试逻辑 第4关 单总线CPU微程序控制器设计 第5关 采用微程序的单总线CPU设计 第6关 现代时序硬布线控制器状态机设计 第7关 现代时序硬布线控制器设计

紫荆鱼的博客 4万+

Java实战:Spring Boot 实现日志链路追踪

本文将详细介绍如何在Spring Boot项目中实现日志链路追踪,包括日志链路追踪的基本概念、设计原则、具体实现方式等。通过阅读本文,你将了解到如何追踪和管理日志链路,并能够将这些知识应用到实际项目中。

oandy0的博客 4136

AI辅助专利撰写实战:用Codex 30分钟生成发明专利初稿

这次我们来看一个用 Codex 从零开始撰写发明专利的实战项目。对于技术研发人员、产品经理或初创团队来说,专利申请是保护创新成果、构建技术壁垒的关键一步。然而,撰写一份高质量的专利申请书,尤其是权利要求书和说明书,往往需要专业的法律和技术语言,耗时耗力。这个项目演示了如何利用 AI 工具 Codex,在短时间内生成一份结构完整、逻辑清晰、具备授权潜力的专利申请文件初稿。 整个过程的核心不是让 AI 完全替代专利代理人,而是将其作为强大的“技术翻译”和“内容生成”助手。它能将你的技术构思、流程图、核心算法或产

weixin_32181267的博客 414

超详细YOLOv8目标检测全程概述:环境、训练、验证与预测详解

这篇博文提供了一个关于使用YOLOv8进行目标检测的全面指南,包括环境搭建、模型训练、验证和预测的详细步骤,以及如何解释训练过程中生成的各种图表和数据。整篇文章为读者提供了一个关于如何利用YOLOv8进行目标检测的实践指南,从环境搭建到模型部署,再到结果分析,每一部分都给出了详细的步骤和解释。此外,还有对于模型输出的解释,帮助读者更好地理解和使用YOLOv8模型。

CDBmax的博客 10万+

Java中的链路追踪技术应用

在 Java 环境中,链路追踪技术通过记录和分析请求在系统中的流转路径,帮助开发人员定位性能瓶颈和故障点。选择合适的追踪框架、配置数据收集和存储、并遵循最佳实践,可以构建一个强大的链路追踪系统,确保系统的稳定性和性能优化。在现代微服务架构中,链路追踪技术是确保系统性能和稳定性的关键工具。OpenTelemetry 是一个开源的链路追踪标准,它提供了多种语言的 SDK 和工具,用于收集、处理和导出追踪数据。链路追踪技术用于记录和分析一个请求在系统中流转的全过程,包括其经过的每个服务和组件。

微赚淘客系统开发者博客 2306

发票OFD格式转换成PDF

发票OFD格式转换成PDF

Be_insighted的博客 931

day11-分布式日志与链路追踪

GrayLog是一个轻量型的分布式日志管理平台其基本框架如图:微服务中的GrayLog客户端发送日志到GrayLog服务端GrayLog把日志信息格式化,存储到Elasticsearch或MongoDB可视化:客户端通过浏览器访问GrayLog,GrayLog访问Elasticsearch这里MongoDB是用来存储GrayLog的配置信息的,这样搭建集群时,GrayLog的各节点可以共享配置。效果如下:面试点:linux查看日志使用命令面试:elk中怎么看日志,都显示的什么内容。

ddd_dhm的博客 836

【拼多多笔试题汇总】2024-03-24-拼多多春招笔试题

A 小镇上有个奇特的游戏。游戏开始时,A 先生准备了一排 nnn 个物品。K 小姐和卢小姐则轮流进行操作。首先,K 小姐可以选择移除至多 xxx 个物品。接着,卢小姐也可以选择移除剩余物品中的至多 yyy 个。游戏的目标是,K 小姐想尽量让剩余物品的价值之和最大化,而卢小姐则想将剩余物品的价值之和最小化。假设两人都采取最优策略,请问最后剩余物品的价值之和是多少?第一行包含五个正整数 n,m,k,x,yn, m, k, x, yn,m,k,x,y,分别表示物品的总数、K 小姐最多可移除的物品数、卢小姐最多可移

春秋招笔试突围 1万+

教程: 将 SolidWorks 设计导出为 ROS 的 URDF

请按照以下步骤应用自定义徽标纹理:创建徽标材质文件:techniquepass材质名称:测试/材质颜色属性:环境、漫反射、镜面和发射都设置为白色(1 1 1 1),这意味着该材质看起来完全是白色的。纹理 在表面应用纹理图像 logo.png。将材质文件复制到 gazebo matrial:复制徽标图像:将 “徽标 ”替换为机器人上徽标所在位置的适当参考值。按照以上步骤,您就可以在 Gazebo 中为机器人添加自定义材质和纹理,包括徽标。

机器人控制与仿真应用 2457

微服务日志追踪革命:Pig平台ELK日志分析实战指南

在微服务架构中,日志追踪是保障系统稳定性和排查问题的关键环节。Pig平台作为一款强大的微服务开发框架,集成了全面的日志管理方案,帮助开发者轻松实现分布式系统的日志收集、分析与追踪。本文将带你深入了解Pig平台如何通过ELK(Elasticsearch、Logstash、Kibana) stack构建高效的日志分析系统,解决微服务环境下的日志难题。 ## 一、为什么需要ELK日志分析系统? 微服

gitblog_01111的博客 1087

UE5接入在线直播视频源,如hls(m3u8)格式

UE5接入在线直播视频源

专注GIS开发 9499

SpringCloud Alibaba 05(链路追踪)

在微服务系统中,一个来自用户的请求,请求先达到前端A(如前端界面)然后通过远程调用,到达系统中间件B,C(负载均衡,网关等),最后达到后端服务D,E,后端经过一系列的业务逻辑计算最后将数据返回给用户,对于这样一个请求,经历了这么多个服务,怎么样将它的请求过程的数据记录下来呢?微服务跟踪(sleuth)其实是一个工具,它在整个分布式系统中能跟踪一个用户请求的过程(包括数据采集,数据传输,数据存储,数据分析,数据可视化),捕获这些跟踪数据,就能构建微服务的整个调用链的视图,这是调试和监控微服务的关键工具。

Fuck1269185654的博客 1059

【ComfyUI】Flux + ControlNet 边缘搭配深度、瓷砖、姿态引导图生图

本文介绍了一个基于 Wan 2.1 的 ComfyUI 文生视频工作流,通过 UNet、CLIP 和 VAE 三个核心模型,将文本提示转化为动态视频。工作流包含模型加载、提示词解析、潜空间采样等7个环节,支持分辨率、帧数等参数设置,最终输出高质量视频文件。该方案适用于创意设计、教育培训和多媒体制作等场景,能快速生成符合语义的动态内容。文章还提供了相关开发资源和学习链接,适合AI视频生成领域的研究者和实践者参考。

Mr数据杨 1632

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

阿里云可观测性平台实战:从日志采集到全链路追踪的完整指南

可观测性(Observability)是现代分布式系统运维的核心能力,它通过日志(Logs)、指标(Metrics)和链路追踪(Traces)三大支柱数据,帮助工程师从系统外部输出理解内部状态,实现从“监控异常”到“定位根因”的跨越。其技术原理在于对多源异构数据进行统一采集、关联分析和智能洞察,从而在复杂的微服务架构中快速诊断问题。这一能力的工程价值在于显著提升故障排查效率、降低平均恢复时间(MTTR),并推动团队建立数据驱动的运维文化。在实际应用场景中,可观测性平台需要与云原生环境深度集成,例如通过阿里云

weixin_30435261的博客 411

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spring Boot全链路追踪实战:从日志孤岛到精准排查

在微服务架构中,服务间调用关系复杂,传统的日志排查方式面临‘日志孤岛’的挑战,难以快速定位跨服务问题。全链路追踪技术通过为每次请求分配全局唯一的Trace ID,并记录其在各服务节点(Span)的流转与耗时,构建出完整的调用链路视图。其核心价值在于将离散的日志关联成有序的轨迹,极大提升了分布式系统的问题排查效率、性能瓶颈定位和服务依赖梳理能力。基于Spring Boot技术栈,通过集成Micrometer Tracing与Zipkin等成熟组件,可以低侵入地实现追踪数据的自动采集、传递与可视化,并结合日志框

weixin_34294649的博客 423

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

链路追踪工具skywalking

当用户的请求进入系统后,处在RPC调用网络的第一层A时spanId初始值是0,进入下一层RPC调用B的时候spanId是0.1,继续进入下一层RPC调用C时spanId是0.1.1,而与B处在同一层的RPC调用E的spanId是0.2,这样的话通过spanId就可以定位某一次RPC请求在系统调用中所处的位置,以及它的上下游依赖分别是谁。·随着分布式系统和微服务架构的出现,一次用户的请求会经过多个系统,不同服务之间的调用关系十分复杂,任何一个系统出错都可能影响整个请求的处理结果。

qq_38331730的博客 2959

SpringCloudAlibaba基础九-1 微服务链路追踪SkyWalking

skywalking基于mysql持久化 skywalking记录项目日志

东风麦芽糖 1897

java中实现一个接口访问日志统一记录组件的切面类(结合MongoDB)

/ 自定义注解:不需要记录日志的接口// 切入点表达式修改(排除带 @NoLog 的方法)

2201_75355172的博客 2055

阿里云可观测性平台实战:从零构建微服务监控与链路追踪体系

在云原生与微服务架构成为主流的今天,系统的可观测性已成为保障应用稳定性的核心能力。其核心原理在于通过整合日志、指标与链路追踪三大支柱数据,从外部输出了解系统内部状态,从而实现对“未知的未知”问题的快速定位与根因分析。这项技术的核心价值在于,它超越了传统监控对预设阈值的依赖,使运维与开发团队能够主动探索和诊断复杂分布式系统中的问题。典型的应用场景包括微服务性能瓶颈定位、故障快速恢复以及业务健康度洞察。本文以阿里云可观测性平台为例,详细演示了如何将ARMS应用实时监控服务与SLS日志服务相结合,为Spring

weixin_34239592的博客 353
上一篇: 设置线程池参数
下一篇: Kubernetes 笔记
金心靖晨
博客等级 码龄9年 460粉丝 211原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值