深入解析 Spring AI 系列:分析 Spring AI 可观测性

news/2025/1/17 14:20:34/文章来源:https://www.cnblogs.com/guoxiaoyu/p/18669015

今天我们将讨论之前略过的可观测性部分的代码。在这里,我想简单说明一下,当时这部分代码属于必须编写的固定模板,因此在最初的讨论中我们直接跳过了它。虽然这部分代码乍看之下可能显得比较复杂,但实际上它的核心功能只是链路追踪的实现而已。既然如此,接下来我们就不再赘述,直接来看一下这部分关键代码,如图所示:

image

我们今天的目的也很明确,那就是不必过于纠结于其底层源码是如何运转和注入解析的。我们更关注的是这段代码在Spring AI框架中所发挥的实际作用。

micrometer

如果当时你点击了该引用,你是可以找到与之相关的包依赖信息的。如果你希望获取更多的详细信息,建议访问其官方文档,详细内容请见:https://docs.micrometer.io/micrometer/reference/observation.html

JMX观测

为了更清晰地理解micrometer的具体工作原理,今天我们将通过两个实际的例子带领大家快速了解其运作方式。第一个例子是关于许多Java编程开发者都非常熟悉的工具——jconsole。如果你不熟悉该工具,也不必担心,你可以直接前往jdk的bin目录进行查找,具体位置如图所示。

image

剩下的就需要在我们的demo聊天示例的项目依赖中添加相关依赖。代码如下:

<groupId>io.micrometer</groupId><artifactId>micrometer-observation</artifactId>
</dependency>
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-jmx</artifactId>
</dependency>

剩下的部分我们基本上不需要进行修改了。接下来,只需直接双击启动 jconsole 工具,并连接到我们的本地程序即可。然后,进入 MBean 标签页,我们就可以轻松地查看到相关的配置信息和监控数据。不过,需要注意的是,这些信息简洁明了并不够全面。具体情况可以参见下图所示:

image

在这里,我们并没有看到源码中所添加的那些特定 key 被纳入观测范围。如下所示:

image

所以目前,分布式链路追踪在系统监控和性能调优中得到了广泛应用。为了便于演示,我们简单地展示了轻量级的 Zipkin 进行链路追踪观测的基本功能。当然,除了 Zipkin,还可以选择使用其他工具,如 Prometheus 与 Grafana 的组合,或者更为全面的 SkyWalking 等方案

zipkin观测

在这里,我将直接在服务器上使用 Docker 容器进行运行。请确保在启动容器时,暴露出相关的端口,以便我们的 demo 程序能够通过这些端口与容器进行通信并上传信息。以下是具体的命令:

docker run --name zipkin -d -p 9411:9411 openzipkin/zipkin

然后需要添加部分依赖,如下所示:

<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-observation</artifactId>
</dependency>
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
<dependency><groupId>io.zipkin.reporter2</groupId><artifactId>zipkin-reporter-brave</artifactId>
</dependency>
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

由于 Zipkin 在使用过程中需要配置一些关键的项目信息,例如指定我们的 Zipkin 服务器地址,以及其他相关的服务端点和连接参数,因此需要在配置文件中加入这些必要的信息。具体的项目信息配置如下:

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=alwaysmanagement.zipkin.tracing.endpoint=http://ip:9411/api/v2/spans
management.tracing.sampling.probability=1.0

在正常启动我们的项目之后,可以执行一次接口调用,并直接访问 Zipkin 以查看当时的接口调用情况。通过这种方式,你将能够清晰地观察到与该接口调用相关的可观测性信息,包括所有的 key 和 value。具体的结果如图所示:

image

这部分看下即可,不做重要解析。

总结

通过今天的讨论,我们简单探讨了可观测性部分的代码及其在 Spring AI 框架中的实际作用。尽管底层实现可能显得复杂,但其核心功能无非是链路追踪的实现,帮助我们更好地理解和优化系统性能。通过实际示例,我们演示了如何利用工具如 jconsole 和 Zipkin 来观察系统的行为及性能指标。这些工具的使用能够提供清晰的监控数据,帮助开发者更有效地进行系统诊断和性能调优。在未来的工作中,合理运用这些工具将极大提升我们的可观测性实践。


我是努力的小雨,一个正经的 Java 东北服务端开发,整天琢磨着 AI 技术这块儿的奥秘。特爱跟人交流技术,喜欢把自己的心得和大家分享。还当上了腾讯云创作之星,阿里云专家博主,华为云云享专家,掘金优秀作者。各种征文、开源比赛的牌子也拿了。

💡 想把我在技术路上走过的弯路和经验全都分享出来,给你们的学习和成长带来点启发,帮一把。

🌟 欢迎关注努力的小雨,咱一块儿进步!🌟

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

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

相关文章

【Maldev】Early Bird 注入

一、介绍 QueueUserAPC 用于执行本地 APC 注入,APC 注入利用需要一个已挂起或可警报的线程才能成功执行 Payload。但是很难碰到处于这些状态的线程,尤其是以普通用户权限运行的线程,而Early Bird注入则是利用CreateProcess WinAPI 创建一个挂起的进程,并使用其挂起线程的句…

ThreadPool解析

Thread_Pool 项目解析 简介 ThreadPool 是一个轻量级的 C++ 线程池实现,旨在简化多线程编程。 项目分析 我们首先上github的项目地址:https://github.com/progschj/ThreadPool,然后克隆项目到本地。点开项目的ThrealPool.h文件,查看源码: #ifndef THREAD_POOL_H #define TH…

[docker逃逸] 使用DirtyPipe漏洞逃逸

本文作者CVE-柠檬i CSDN:https://blog.csdn.net/weixin_49125123 博客园:https://www.cnblogs.com/CVE-Lemon 微信公众号:Lemon安全 前言 本文使用代码下载链接:利用CVE-2022-0847 (Dirty Pipe) 实现容器逃逸 (github.com) 由于本人才疏学浅,本文不涉及漏洞原理,仅有复现…

RestAPI实现聚合

API语法 聚合条件与query条件同级别,因此需要使用request.source()来指定聚合条件。聚合的结果解析:@Override public Map<String, List<String>> filters(RequestParams params) {try {// 1.准备RequestSearchRequest request = new SearchRequest("hotel&…

elasticsearch之数据聚合

**聚合(aggregations)**可以让我们极其方便的实现对数据的统计、分析、运算。例如:什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何?实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实现近实时搜索效…

【通讯协议】OPC协议

OPC通讯协议 特点:支持多种数据结构和负责数据类型,需要多的硬件和软件资源,成本较高,安全性较高。 应用场景:连接多个不同工业自动化设备 什么是OPC通讯协议 OPC是英文“OLE for Process Control”的缩写,是工业自动化领域中的一种工业通信标准。它通过定义一些在不同平…

海外泼天流量|浅谈全球化技术架构

本文对海外泼天流量现状做了快速整理,旨在抛砖引玉,促进国内企业在出海过程中,交流如何构建全球化技术架构的落地经验,相信会有越来越多资深人士分享更深层次的实践。 登陆小红书,搜索 refugee,你就能看到一个不一样的小红书。随机点击几个,让大数据记住你,就能持续看到…

绿联网卡

目录1: 安装2:检查3:常见问题网络连接有网卡,状态为已禁用 1: 安装插入电脑 弹窗“Setup.exe”,安装驱动, 如果没有驱动,则找到 Ugreen Wireless进行驱动安装。驱动安装成功后效果2:检查驱动安装好后,u盘插拔一下,观察确定是哪个WLAN3:常见问题 网络连接有网卡,状态为…

kali安装教程

kali和GNOME桌面安装教程 kali下载 https://www.kali.org/get-kali/ 到kali官网,下载镜像安装下载完应该是:kali-linux-2024.4-installer-amd64.iso 然后新建虚拟机选择稍后安装操作系统:选择如图所示操作系统 后面的,我都给的挺多,主要不想它卡,哈哈哈网络选择NAT就行,…

车辆拥堵交通事故识别系统

车辆拥堵交通事故识别系统通过在关键路段部署监控摄像机,车辆拥堵交通事故识别系统借助 YOLOv8 算法的强大目标检测能力,能够精准识别出车辆、行人等交通参与者。一旦发生车相撞、车辆倾翻、骑车倾翻、路面有人摔倒或打架等异常事件,系统便迅速触发抓拍预警。系统还具备灵活…

[rustGUI][iced]基于rust的GUI库iced(0.13)的部件学习(04):实现窗口主题(颜色)变换(暨menu菜单的使用)

前言 本文是关于iced库的部件介绍,iced库是基于rust的GUI库,作者自述是受Elm启发。 iced目前的版本是0.13.1,相较于此前的0.12版本,有较大改动。 本合集是基于新版本的关于分部件(widget)的使用介绍,包括源代码介绍、实例使用等。 环境配置 系统:window10 平台:visual…