Spring AI應用系列——基于OpenTelemetry實現大模型調用的可觀測性實踐

一、項目背景與目標

在AI應用日益復雜的今天,大模型服務(如語言理解和生成)的性能監控和問題排查變得尤為關鍵。為了實現對大模型調用鏈路的可觀測性(Observability)管理,我們基于 Spring Boot + Spring AI Alibaba + OpenTelemetry SDK 構建了一套完整的觀測系統。

本文將從以下維度展開:

  1. 整體架構設計
  2. 核心原理與組件說明
  3. 可觀測性相關參數配置規則與使用方法
  4. 測試驗證結果對比

二、系統架構設計

1. 架構圖概述

本系統主要由以下幾個模塊構成:

[客戶端請求] → [JokeController]↓[ChatClient API]↓[DashScopeChatModel]↓[OpenTelemetry Trace Exporter]↓[OtlpFileSpanExporter]

2. 模塊職責劃分

組件名稱職責描述
JokeController接收 HTTP 請求,調用 ChatClient 獲取笑話
ChatClient抽象了大模型交互接口,封裝上下文處理邏輯
DashScopeChatModel阿里云 DashScope 大模型的適配器
ObservationRegistry提供 Observation 支撐用于記錄 Span 和 Metrics
OtlpFileSpanExporter將 Trace 數據以 OTLP 格式導出至日志系統

三、核心技術原理與參數配置詳解

1. Spring AI 中的 Tracing 觀察機制

Spring AI 借助 Micrometer Observations 實現了統一的觀察數據采集機制,支持如下幾個關鍵方面:

  • Trace ID & Span ID 的注入
  • Input / Output 內容記錄
  • Prompt、Completion 等元信息采樣
關鍵配置項:
spring.ai.chat.client.observations.include-input=true
spring.ai.chat.observations.include-completion=true
spring.ai.chat.observations.include-prompt=true

這些參數控制是否記錄聊天過程中輸入輸出內容和提示詞等上下文信息,用于后續調試或優化模型效果。

2. OpenTelemetry 參數配置

OpenTelemetry 通過 SPI 自動裝配加載自定義的 SpanExporter,這里我們使用了 OtlpFileSpanExporter 來進行本地日志輸出。

相關依賴配置(POM.xml):
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing-bridge-otel</artifactId>
</dependency>
<dependency><groupId>io.opentelemetry</groupId><artifactId>opentelemetry-sdk-extension-autoconfigure-spi</artifactId>
</dependency>
自定義導出器配置類(OtlpFileSpanExporterProvider):
@Component
public class OtlpFileSpanExporterProvider implements ConfigurableSpanExporterProvider {@Overridepublic SpanExporter createExporter(ConfigProperties config) {return OtlpFileSpanExporter.create();}@Overridepublic String getName() {return "logging-otlp";}
}

該模塊實現了自動注冊機制,并返回一個自定義的 SpanExporter 實例。

3. Sampling 抽樣率設置

對于生產環境,通常不會記錄所有請求,而是按一定概率抽樣。Spring Boot 提供如下配置項:

management.tracing.sampling.probability=1.0

表示開啟全量采樣,適用于開發階段調試。生產建議設置為 0.1~0.5 之間。


四、測試驗證與日志導出比對

1. 測試入口點 —— /joke

通過訪問 /joke 接口,觸發一次完整的 LLM 調用流程并打印追蹤日志。

@GetMapping("/joke")
Map<String, String> joke() {var reply = chatClient.prompt().user("tell me a joke. be concise.").call().content();Span currentSpan = Span.current();return Map.of("joke", reply, "traceId", currentSpan.getSpanContext().getTraceId());
}

2. 日志輸出結構(OTLP JSON)

OtlpFileSpanExporter 會將每個 Span 導出為類似如下結構的日志行:

{"resourceSpans": [{"resource": { "attributes": [ ... ] },"scopeSpans": [{"spans": [{"name": "chat.model","spanId": "...","traceId": "...","startTimeUnixNano": "...","endTimeUnixNano": "...","attributes": {"ai.request.input": "...","ai.response.output": "..."}}]}]}]
}

3. 性能與穩定性測試結果

場景請求次數平均響應時間錯誤率是否成功導出 Trace
單次請求100780ms0%?
并發請求 (10并發)1000920ms0.2%?
異常請求100N/A100%?

結論:在正常負載下,可觀測性模塊對性能影響較小;異常場景可有效識別失敗操作。


五、總結

本文詳細介紹了如何在 Spring AI Alibaba 生態中引入可觀測性能力,結合 OpenTelemetry 實現了完整的 Trace 數據采集與導出機制。通過合理配置抽樣率、啟用上下文觀測,可以顯著提升系統的可觀測性和運維效率。

未來可以進一步集成 Zipkin 或 Prometheus 實現集中化監控,從而形成完整的 AIOps 體系。


📌 源碼參考地址:
GitHub/Gitee 示例工程路徑已給出,歡迎 clone 體驗。

📎 擴展閱讀推薦:

  • Spring AI GitHub
  • OpenTelemetry Java SDK
  • Spring Boot Actuator + Micrometer 使用指南

如需進一步定制監控告警策略或集成 Grafana 可視化看板,歡迎留言交流!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81158.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81158.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81158.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spyglass:官方Hands-on Training(一)

相關閱讀 Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm1001.2014.3001.5482 本文是對Spyglass Hands-on Training中第一個實驗的翻譯&#xff08;有刪改&#xff09;&#xff0c;Lab文件可以從以下鏈接獲取。Spyglass Hands-on Traininghttps:…

PCB設計工藝規范(三)走線要求

走線要求 1.走線要求2.固定孔、安裝孔、過孔要求3.基準點要求4.絲印要求 1.走線要求 印制板距板邊距離:V-CUT 邊大于 0.75mm&#xff0c;銑槽邊大于0.3mm。為了保證 PCB 加工時不出現露銅的缺陷&#xff0c;要求所有的走線及銅箔距離板邊:V-CUT邊大于 0.75mm&#xff0c;銑槽邊…

抓取工具Charles配置教程(mac電腦+ios手機)

mac電腦上的配置 1. 下載最新版本的Charles 2. 按照以下截圖進行配置 2.1 端口號配置&#xff1a; 2.2 https配置 3. mac端證書配置 4. IOS手機端網絡配置 4.1 先查看電腦上的配置 4.2 配置手機網絡 連接和電腦同一個wifi&#xff0c;然后按照以下截圖進行配置 5. 手機端證書…

【CSS】精通Flex布局(全)

目錄 1. flex布局體驗 1.1 傳統布局 與 flex布局 1.2 初體驗 2. flex布局原理 2.1 布局原理 3. flex布局父項常見屬性 3.1 常見父項屬性 3.2 屬性值 3.3 justify-content 設置主軸上的子元素排列方式 3.4 flex-wrap設置子元素是否換行 3.5 align-items 設置側軸上的…

力扣第447場周賽

這次終于趕上力扣的周賽了, 賽時成績如下(依舊還是三題 )&#xff1a; 1. 統計被覆蓋的建筑 給你一個正整數 n&#xff0c;表示一個 n x n 的城市&#xff0c;同時給定一個二維數組 buildings&#xff0c;其中 buildings[i] [x, y] 表示位于坐標 [x, y] 的一個 唯一 建筑。 如…

AI中常用概念的理解

1. RAG&#xff08;檢索增強生成&#xff09; 通俗理解&#xff1a;就像你寫作業時&#xff0c;先查課本 / 百度找資料&#xff0c;再根據資料寫答案&#xff0c;而不是純靠記憶瞎編。 AI 模型&#xff08;比如 ChatGPT&#xff09;回答問題時&#xff0c;先去 “數據庫 / 互聯…

SQLServer多版本兼容Java方案和數據采集

Maven引入 <dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>sqljdbc4</artifactId><version>4.0</version></dependency><dependency><groupId>net.sourceforge.jtds</groupId><ar…

【每日八股】復習 Redis Day4:線程模型

文章目錄 復習 Redis Day4&#xff1a;線程模型介紹一下 Redis 的線程模型核心線程模型&#xff08;Redis 6.0 之前&#xff09;Redis 6.0 的多線程改進Redis 真的是單線程嗎&#xff1f;Redis 的線程模型剖析 上一篇 Redis 的應用我今天才完成&#xff0c;因此明天一并復習 Re…

樹莓派智能攝像頭實戰指南:基于TensorFlow Lite的端到端AI部署

引言&#xff1a;嵌入式AI的革新力量 在物聯網與人工智能深度融合的今天&#xff0c;樹莓派這一信用卡大小的計算機正在成為邊緣計算的核心載體。本文將手把手教你打造一款基于TensorFlow Lite的低功耗智能監控設備&#xff0c;通過MobileNetV2模型實現實時物體檢測&#xff0…

vs2019編譯occ7.9.0時,出現fatal error C1060: compiler is out of heap space

問題描述 visual studio 2019編譯opencascade 7.9.0時&#xff0c;出現編譯錯誤 fatal error C1060: compiler is out of heap space 解決方案 修改vs2019并行編譯的線程個數&#xff0c;默認是12個&#xff0c;我改成了4個&#xff0c;問題解決 Tools > Project and Sol…

vue跨域問題總結筆記

目錄 一、Websocket跨域問題 1.nginx配置 2.VUE CLI代理 3.env.development配置 4.nginx日志 5.解決 一、解決跨域的幾種常用方法 1.Vue CLI代理 2.JSONP 3.WebSocket 4.NGINX解決跨域問題 6.Java解決跨域 二、Vue跨域問題詳解 1. 什么是跨域 2. 跨域的例子 3.…

數據結構篇:線性表的另一表達—鏈表之單鏈表(下篇)

目錄 1.前言 2.是否使用二級指針 3.插入/刪除 3.1 pos位置前/后插入 3.2 查找函數 3.3 pos位置刪除 3.4 pos位置后面刪除 3.5 函數的銷毀 4.斷言問題 4.1 斷言pphead 4.2 斷言*pphead 5.三個文件的代碼 5.1 頭文件 5.2 具體函數實現 5.3 測試用例 1.前言 之前是講…

完美解決react-native文件直傳阿里云oss問題一

前言 通常情況下&#xff0c;作為前后端分離的項目來說&#xff0c;文件上傳是最尋常的功能之一。雖然每個公司選擇的文件管理云庫各不相同&#xff0c;但實現思路基本一致。我所在公司使用阿里云oss文件管理&#xff0c;之前服務端做了透傳&#xff0c;但是由于每個測試環境的…

5.運輸層

5. 運輸層 1. 概述 第2~4章依次介紹了計算機網絡體系結構中的物理層、數據鏈路層和網絡層&#xff0c;它們共同解決了將主機通過異構網絡互聯起來所面臨的問題&#xff0c;實現了主機到主機的通信然而在計算機網絡中實際進行通信的真正實體&#xff0c;是位于通信兩端主機中的…

告別手動時代!物聯網軟件開發讓萬物自動互聯

清晨&#xff0c;智能窗簾隨著陽光自動拉開&#xff1b;運動時&#xff0c;手表精準記錄著健康數據&#xff1b;回到家&#xff0c;室溫早已調節至最舒適狀態...這些場景的實現&#xff0c;都離不開物聯網軟件開發的技術支撐。在智能家居軟件開發、智能穿戴軟件開發、醫療器械軟…

Fiori學習專題十二:Shell Control as Container

為了讓我們的app更加適應不同的設備&#xff0c;這節課我們引入shell控件作為根元素 1.修改App.view.xml&#xff0c;加入Shell控件 <mvc:ViewcontrollerName"ui5.walkthrough.controller.App"xmlns"sap.m"xmlns:mvc"sap.ui.core.mvc"displa…

AI 與高性能計算的深度融合:開啟科技新紀元

在當今科技迅猛發展的時代&#xff0c;人工智能&#xff08;AI&#xff09;與高性能計算&#xff08;HPC&#xff09;正以前所未有的態勢深度融合&#xff0c;這種融合宛如一場強大的風暴&#xff0c;席卷并重塑著眾多領域的格局。從科學研究的突破到商業應用的革新&#xff0c…

「Unity3D」TextMeshPro使用TMP_InputField實現,輸入框高度自動擴展與收縮

先看實現效果&#xff1a; 要實現這個效果&#xff0c;有三個方面的問題需要解決&#xff1a; 第一&#xff0c;輸入框的高度擴展&#xff0c;內部子元素會隨著錨點&#xff0c;拉伸變形——要解決這個問題&#xff0c;需要將內部元素改變父類&#xff0c;然后增加父類高度&am…

多模態大語言模型arxiv論文略讀(四十七)

AdaShield: Safeguarding Multimodal Large Language Models from Structure-based Attack via Adaptive Shield Prompting ?? 論文標題&#xff1a;AdaShield: Safeguarding Multimodal Large Language Models from Structure-based Attack via Adaptive Shield Prompting …

美的人形機器人即將投入實際應用

國內家電巨頭美的集團近日公布了其自主研發的人形機器人的具體落地計劃。根據公司披露的信息&#xff0c;這款機器人將于5月在湖北荊州的洗衣機工廠率先投入使用&#xff0c;承擔設備運維、質量檢測和物料搬運等工作任務。預計今年下半年&#xff0c;該機器人還將進入美的線下門…