ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

ChatGPT 微服务应用监控实战:SpringBoot Actuator + Prometheus + Grafana 三件套配置指南

ChatGPT 微服务应用监控实战:SpringBoot Actuator + Prometheus + Grafana 三件套配置指南 文档教程后端【免费下载链接】CodeGuide:books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总旨在为大家提供一个清晰详细的学习教程侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助请给予支持(关注、点赞、分享)项目地址https://gitcode.com/gh_mirrors/code/CodeGuide点击查看免费下载本文围绕《ChatGPT 微服务应用体系构建》课程的 dev-ops 环节讲解如何给已开发完成的 OpenAI 微服务应用接入系统监控通过 SpringBoot Actuator 上报指标、Prometheus 采集指标、Grafana 展示指标让应用摆脱裸奔状态。读完本文你将掌握监控三组件的分工与安装部署、应用侧指标暴露配置、Tomcat 关键指标开启方式以及监控面板的导入与压测验证流程并能将其复用到任意 SpringBoot 服务的上线运维中。一、本章诉求为什么应用需要监控OpenAIChatGPT、ChatGLM微服务应用开发完成后接下来最重要的一件事就是应用系统监控配置。有了监控的应用才不是裸奔的——你可以随时看到CPU 负载、磁盘空间占用量、接口请求量、接口响应时间等各项参数数据。从面试角度讲现在的面试问题越来越多地逐步向实际靠拢面试官更喜欢问一些实际问题。这些问题不同于八股文因为做过就是做过没做过像背都背不出来。例如你的应用接口响应时间多少Tomcat 配置了多少连接数接口超时了怎么办这类问题只有真正部署过、监控过、压测过的同学才能答得上来。本章难度 ★★☆☆☆重点在于给应用系统配置 SpringBoot Actuator Prometheus Grafana 三个模块主要内容为代码中的配置和监控的配置属于轻量、好扩展的监控组合方案。二、系统监控方案选型从全链路监控到指标监控可用于应用监控的系统有很多主要分为两类埋点切面方式需要在代码中通过 AOP 切面主动上报业务指标配置 Agent字节码增强方式通过字节码增强技术非入侵地采集数据。例如仓库中另外一篇教程 《skywalking 全链路监控》 就是一款非入侵的全链路监控系统它的配置非常简单——把 Agent 挂载到 JVM 启动参数上即可完成链路追踪与指标采集你也可以通过该组件完成本节内容。而本节采用的是另一套轻量组合SpringBoot Actuator Prometheus Grafana。三者分工明确组件职责说明SpringBoot Actuator数据上报应用内嵌的指标端点把 JVM、HTTP、Tomcat 等运行指标以 Prometheus 格式暴露出来Prometheus数据采集定时拉取scrape应用暴露的指标端点并存储为时序数据Grafana数据展示从 Prometheus 查询指标数据以可视化面板Dashboard形式呈现 CPU、磁盘、请求量、响应时间等这套组合非常轻量、易扩展Actuator 是 SpringBoot 自带能力Prometheus 只需一个配置文件指定抓取目标Grafana 通过导入 JSON 面板即可完成可视化全程不需要编写任何业务埋点代码。三、SpringBoot Actuator应用侧指标上报配置监控的第一步是让应用把自身的运行指标报出来。SpringBoot Actuator 是 SpringBoot 提供的生产级监控模块配合 Micrometer指标门面可以把指标暴露成 Prometheus 格式的文本端点。3.1 引入监控依赖在 SpringBoot 工程的pom.xml中引入 Actuator 与 Prometheus 注册器两个依赖本节为配置说明采用 SpringBoot 标准的 Actuator Micrometer 组合dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-actuator/artifactId /dependency dependency groupIdio.micrometer/groupId artifactIdmicrometer-registry-prometheus/artifactId /dependencyspring-boot-starter-actuator提供/actuator下的一系列内置端点health、metrics、info、prometheus 等micrometer-registry-prometheus把 Micrometer 采集到的指标注册到 Prometheus 注册表从而通过/actuator/prometheus端点以 Prometheus 文本格式输出指标。3.2 暴露监控端点默认情况下 Actuator 只暴露health端点需要通过配置显式暴露。在application.yml中配置management: endpoints: web: exposure: include: *配置后即可通过http://localhost:8080/actuator/prometheus访问到 Prometheus 格式的指标数据其中包括jvm_*JVM 内存、GC、http_server_requests_*接口请求量、响应时间、process_*CPU、进程信息、system_*磁盘、网络等系列指标。这些正是本章诉求中要看到的CPU 负载、磁盘空间占用量、接口请求量、接口响应时间。3.3 开启 Tomcat MBean 指标仅暴露通用端点还不够Grafana 面板要展示 Tomcat 连接数等容器指标需要开启 Tomcat 的 MBean 注册。参考仓库教程 Grafana 可视化监控面板 中的工程配置server: tomcat: mbeanregistry: enabled: truembeanregistry.enabled: true开启后Actuator 才能采集到tomcat.threads.*、tomcat.connections.*等 Tomcat 运行时指标Grafana 面板中的连接数曲线才有数据来源。与此同时Tomcat 的连接数与线程数配置也需要一并规划。参考 grafana.md 中的压测工程配置server: port: 8091 tomcat: mbeanregistry: enabled: true max-connections: 20 # 最大连接数 threads: max: 20 # 设定处理客户请求的线程的最大数目决定了服务器可以同时响应客户请求的数默认200 min-spare: 10 # 初始化线程数最小空闲线程数默认是10 accept-count: 10 # 等待队列长度配置参考1核2G 内存可默认配置 2004核8G 内存可配置accept-count1000、max-threads800、max-connections10000线程数经验值 800。线程池过大CPU 调度会消耗大量时间。在 《ChatGPT 微服务应用体系构建》面试问题汇总 中该项目上线时 Tomcat 配置的最大连接数为 250压测响应 50~80 TPS。四、Prometheus监控数据采集应用侧把指标暴露出来后需要 Prometheus 定期抓取。Prometheus 通过一个配置文件声明从哪个地址、以什么频率抓取哪些目标。4.1 配置 prometheus.yml 抓取目标首先需要打开prometheus.yml修改监控采集应用的 IP 地址。Prometheus 抓取 SpringBoot 应用的标准配置如下targets指向应用暴露的 Prometheus 端点地址scrape_configs: - job_name: spring-boot-app metrics_path: /actuator/prometheus static_configs: - targets: [应用IP:应用端口]job_name任务名称Grafana 面板中会按此区分数据来源metrics_path指标抓取路径与 Actuator 暴露的端点路径保持一致targets应用实例的 IP 与端口本地验证时可以是localhost:8091生产环境填写服务器内网地址。这份配置还可以扩展监控其他目标例如 MySQL通过 mysqld_exporter 暴露指标后再加入scrape_configs也就是同一套 Prometheus 可以采集多个应用的指标。4.2 docker-compose 安装 Prometheus参考 grafana.md 提供的docker-compose.ymlPrometheus 采用bitnami/prometheus:2.47.2镜像端口映射9090:9090并把本地的prometheus.yml挂载进容器version: 3 # 执行脚本docker-compose -f docker-compose.yml up -d # 拷贝配置docker container cp grafana:/etc/grafana/ ./docs/dev-ops/ services: # 数据采集 prometheus: image: bitnami/prometheus:2.47.2 container_name: prometheus restart: always ports: - 9090:9090 volumes: - ./etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml如果你本地已经安装了 Docker直接执行docker-compose -f docker-compose.yml up -d即可完成安装。安装完成后可以访问http://127.0.0.1:9090查看 Prometheus 自带的查询页面验证目标抓取状态Status → Targets。五、Grafana监控数据展示数据采集到位后用 Grafana 完成最后一步——把时序数据变成可视化的监控面板。5.1 docker-compose 安装 Grafana继续在同一个docker-compose.yml中追加 Grafana 服务镜像grafana/grafana:10.2.0端口映射4000:4000并通过depends_on声明依赖 Prometheus 先启动# 监控界面 grafana: image: grafana/grafana:10.2.0 container_name: grafana restart: always ports: - 4000:4000 depends_on: - prometheus volumes: - ./etc/grafana:/etc/grafana注意如果是生产使用则需要修改etc/grafana/grafana.ini中的 datasources 为 mysql这样在后面迁移的时候也会非常容易。5.2 登录并导入监控面板安装完监控环境后打开 Grafana 地址http://127.0.0.1:4000默认账号密码为admin/admin打开仪表盘管理页http://127.0.0.1:4000/dashboards点击导入监控面板配置把监控面板的 JSON 复制到导入面板的 JSON 框中点击 Load监控面板即配置完成。此时面板上还看不到数据因为应用工程还没有启动没有往 Prometheus 里写入指标数据。这也印证了完整链路是应用启动 → Actuator 暴露指标 → Prometheus 抓取存储 → Grafana 查询展示。在 《ChatGPT 微服务应用体系构建》面试问题汇总 中说明该项目上线后即部署了 Prometheus Grafana 监控组件压测结果的数据就来自 Grafana 监控面板的展示。六、接入 ChatGPT 微服务的监控验证整套监控配置完成后需要把应用和监控串起来做一次真实验证。以本项目为例整体流程如下应用侧在 ChatGPT 微服务的application.yml中开启 Actuator 端点暴露与 Tomcat MBean 注册采集侧修改prometheus.yml的targets为 ChatGPT 服务实例地址重启 Prometheus展示侧在 Grafana 中导入监控面板 JSON等待指标数据写入验证侧用压测工具如 JMeter、ApacheBench、Siege、ApiPost 自带压测对服务接口施压在 Grafana 面板上观察连接数、线程数、接口响应时间的变化。关于工程部署方式本课程在前面章节已经完成了环境准备与服务部署第2节Docker环境安装、第5节服务镜像构建和容器部署、第9节部署上线监控组件可以随服务一起以 docker-compose 编排在云服务器上。根据项目面试汇总文档 notes.md 中记录的该项目实际部署验证结果服务器为2c4g 5M带宽云服务器前后端应用配置 Dockerfile 打包镜像推送到镜像仓库后编写 docker compose含 MySQL、Redis 等环境脚本在云服务器执行部署项目部署完成后占用服务器内存 53%~61%Tomcat 配置最大连接数 250OpenAI 调用接口熔断为 6 秒OpenAI 有时会超时前端同时配置了 50 秒主动断开压测接口响应按当前服务器可以压测到 50~80 TPS随不同文本量提问会有波动日常测试接口响应平均值在 3~10 秒。这些数据都来自压测后 Grafana 监控的展示直接回答了面试中应用接口响应时间多少、Tomcat 连接数怎么配置、服务会不会被拖垮等实际问题。七、总结本章通过 SpringBoot Actuator Prometheus Grafana 三个轻量组件为 ChatGPT 微服务应用补齐了最后一公里的运维能力Actuator 负责数据上报引入依赖、暴露/actuator/prometheus端点、开启 Tomcat MBean 注册让 JVM、HTTP、Tomcat、CPU、磁盘等指标可以被外部采集Prometheus 负责数据采集一份prometheus.yml声明抓取目标docker-compose 一条命令拉起还可横向扩展监控 MySQL 等其他组件Grafana 负责数据展示导入面板 JSON 即可看到 CPU 负载、磁盘占用、接口请求量、接口响应时间等可视化曲线压测验证时可直接观测连接数是否被打满。三者的完整调用链为应用启动 → Actuator 暴露指标 → Prometheus 定时抓取 → Grafana 查询渲染。这套方案不依赖任何业务埋点代码配置即用、极易扩展可以原样复用到你后续的任何一个 SpringBoot 服务上。相关的详细环境安装与压测案例可继续参考仓库内的 Grafana 可视化监控面板、skywalking 全链路监控 等文档。赞分享文档教程后端【免费下载链接】CodeGuide:books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总旨在为大家提供一个清晰详细的学习教程侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助请给予支持(关注、点赞、分享)项目地址https://gitcode.com/gh_mirrors/code/CodeGuide点击查看免费下载相关推荐一次扫码完成QQ空间备份把几年的说说免费存到本地的完整指南一次扫码完成QQ空间备份把几年的说说免费存到本地的完整指南 QQ空间往前翻得越深老说说越难找。文字可能还躺在几年前的消息列表里配图却早就打不开了。一条条手网页爬虫数据分析Pushup动态路由实战构建支持参数化URL的现代Web应用Pushup动态路由实战构建支持参数化URL的现代Web应用 在现代Web开发中动态路由是构建灵活应用的核心功能之一。Pushup作为一款基于Go语言的现代Pixelle-Video API 教程从第一个视频请求到异步任务追踪的完整调用指南Pixelle Video API 教程从第一个视频请求到异步任务追踪的完整调用指南 Pixelle Video 是一款 AI 短视频引擎给它一段文本它还人工智能AI 应用音视频媒体生成上一篇三步解锁你的专属文艺字体霞鹜文楷完全使用指南下一篇Rufus神器5分钟学会制作万能启动U盘的终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表