SpringAI指标监控
文章目录
- 1 观测性
- 2 价值
- 3 监控属性
- 1_环境搭建
- 2_测试
- 3_监控
- 4 补充
1 观测性
为什么 Spring AI 应用需要可观测性?
AI 服务成本失控的痛点:
在企业级 AI 应用中,使用 DeepSeek、OpenAI、Google Gemini 或 Azure OpenAI 等服务时,成本是一个严峻的挑战:
- Token 消耗不透明:无法精确了解每次 AI 调用的成本。
- 费用增长失控:大规模应用中,AI 服务费用可能呈指数增长。
- 性能瓶颈难定位:AI 调用链路复杂,问题排查困难
- 资源使用不合理:缺乏数据支撑的优化决策。
2 价值
Spring AI 的可观测性功能为这些痛点提供了完美解决方案:
- 精准 Token 监控:实时追踪输入/输出Token消耗,精确到每次调用。
- 智能成本控制:基于使用统计制定成本优化策略。
- 深度性能分析:识别 AI 调用瓶颈,优化响应时间。
- 完整链路追踪:端到端记录请求在 Spring AI 应用中的完整流转
3 监控属性
构建可观测的 Spring AI 翻译应用。
1_环境搭建
集成核心依赖:
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
配置监控环境
management:endpoints:web:exposure:include: "*" # 暴露所有断点(不建议)endpoint:health:show-details: always
配置聊天对话模型并创建接口
package com.duration.ai_act.controller;import jakarta.annotation.Resource;
import lombok.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;/*** @author shenyang* @version 1.0* @since 2025-10-01*/
@Slf4j
@Configuration
@RestController
public class AITranslationController {@Lazy@Resourceprivate ChatClient chatClient;@Beanpublic ChatClient chatClient(OpenAiChatModel model) {//模型也可以是 openAIreturn ChatClient.builder(model)// 创建ChatClient工厂.build();// 构建ChatClient实例}@PostMapping("/translate")public TranslationResponse translate(@RequestBody TranslationRequest request) {log.info("AI 翻译请求: {} -> {}", request.sourceLang, request.targetLang);String prompt = String.format("""作为专业的翻译助手,请将以下{%s} 文本翻译成 {%s},保持原文的语气,原文如下:'''{%s}'''直接输出翻译后的文本即可。""",request.getSourceLang(),request.getTargetLang(),request.getText());long currentTimeMillis = System.currentTimeMillis();String translatedText = chatClient.prompt().user(prompt).advisors(SimpleLoggerAdvisor.builder().build()).call().content();long durationMs = System.currentTimeMillis() - currentTimeMillis;return TranslationResponse.builder().originalText(request.text).translatedText(translatedText).durationMs(durationMs).build();}@Data@Builderpublic static class TranslationRequest {/*** 待翻译文本*/private String text;/*** 源语言(可选,例如 "en", "zh", "auto")* 若为 auto 表示自动检测语言*/private String sourceLang;/*** 目标语言(例如 "en", "zh", "fr")*/private String targetLang;}@Data@Builderpublic static class TranslationResponse {/*** 原始文本*/private String originalText;/*** 翻译后的文本*/private String translatedText;/*** 请求耗时(毫秒)*/private Long durationMs;/*** 可选的错误信息(仅在失败时有值)*/private String errorMessage;}}
2_测试
发送请求后查看响应结果:
3_监控
在 metrics
中查看 AI 相关信息
随便查看监控 AI 下某一指标的具体信息
可以看到调用次数,总耗时和模型等具体信息。
4 补充
具体暴露端点信息可以参考官网:https://docs.spring.io/spring-ai/reference/observability/index.html。
如果想要可视化监控平台,可以参考这篇:https://shenyang.blog.csdn.net/article/details/143510787,目前依赖最新版本为 3.5.5。