当前位置: 首页 > article >正文

应用监控详解

应用监控详解本章导读没有监控的系统就像在黑暗中摸索——你永远不知道问题何时发生、发生在哪里。本章深入讲解APM工具、链路追踪、指标采集三大监控支柱,帮助读者构建全方位的系统可观测性,实现从被动救火到主动预防的转变。学习目标:目标1:理解可观测性三大支柱(Metrics、Traces、Logs)及其关联分析目标2:掌握Prometheus + Micrometer实现Java应用指标采集与暴露目标3:熟练运用Spring Cloud Sleuth + Zipkin进行分布式链路追踪目标4:能够设计和配置Grafana Dashboard实现监控数据可视化展示目标5:建立基于指标的多级告警体系实现故障快速响应前置知识:熟悉Spring Boot应用开发,了解时序数据库概念,具备基本的运维知识阅读时长:约 45 分钟一、知识概述应用监控是确保系统稳定运行的关键环节,通过实时收集、分析和展示应用的运行状态,帮助运维人员及时发现和解决问题。现代应用监控主要包括APM(应用性能监控)、链路追踪和指标采集三个方面。1.1 监控体系架构┌─────────────────────────────────────────────────────────────┐ │ 监控体系架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 数据采集层 │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ Metrics │ │ Traces │ │ Logs │ │ Events │ │ │ │ 指标 │ │ 链路 │ │ 日志 │ │ 事件 │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │ │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 数据处理与存储 │ │ │ │ Prometheus / Jaeger / ELK / Kafka │ │ │ └─────────────────────┬───────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 数据分析与告警 │ │ │ │ AlertManager / Grafana / Kibana │ │ │ └─────────────────────┬───────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 可视化展示 │ │ │ │ Grafana Dashboards / Kibana / Jaeger UI │ │ │ └─────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘1.2 监控指标类型┌─────────────────────────────────────────────────────────────┐ │ 监控指标类型 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. 基础设施指标 (Infrastructure Metrics) │ │ - CPU使用率、内存使用率 │ │ - 磁盘I/O、网络流量 │ │ - 系统负载、进程数 │ │ │ │ 2. 应用指标 (Application Metrics) │ │ - 请求量(QPS)、响应时间 │ │ - 错误率、成功率 │ │ - 并发连接数、线程池状态 │ │ │ │ 3. JVM指标 (JVM Metrics) │ │ - 堆内存使用、GC次数和时间 │ │ - 线程数、类加载数 │ │ - CPU使用、编译时间 │ │ │ │ 4. 业务指标 (Business Metrics) │ │ - 订单量、交易金额 │ │ - 用户活跃数、转化率 │ │ - 业务成功率、失败原因 │ │ │ │ 5. 自定义指标 (Custom Metrics) │ │ - 业务特定指标 │ │ - 缓存命中率 │ │ - 队列积压量 │ │ │ └─────────────────────────────────────────────────────────────┘1.3 三大支柱┌─────────────────────────────────────────────────────────────┐ │ 可观测性三大支柱 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Metrics │ │ Traces │ │ Logs │ │ │ │ 指标 │ │ 链路 │ │ 日志 │ │ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ 回答:发生了什么? 回答:哪里出了问题? 回答:为什么? │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 关联分析 │ │ │ │ 指标发现问题 → 链路定位位置 → 日志分析原因 │ │ │ └─────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘二、APM工具实践2.1 Prometheus + Micrometer集成!-- pom.xml - 依赖配置 --dependencies!-- Spring Boot Actuator --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependency!-- Micrometer Prometheus --dependencygroupIdio.micrometer/groupIdartifactIdmicrometer-registry-prometheus/artifactId/dependency!-- Micrometer Core --dependencygroupIdio.micrometer/groupIdartifactIdmicrometer-core/artifactId/dependency/dependencies# application.yml - Actuator配置management:endpoints:web:exposure:include:health,info,prometheus,metrics,heapdump,threaddumpbase-path:/actuatorendpoint:health:show-details:alwaysprometheus:enabled:truemetrics:tags:application:${spring.application.name}environment:${spring.profiles.active}distribution:percentiles-histogram:http.server.requests:truepercentiles:http.server.requests:0.5,0.9,0.95,0.99export:prometheus:enabled:true// ============================================// 自定义指标配置// ============================================@ConfigurationpublicclassMetricsConfig{@BeanpublicMeterRegistryCustomizerMeterRegistrymetricsCommonTags(){returnregistry-registry.config().commonTags("application","myapp").commonTags("host",getHostName());}privateStringgetHostName(){try{returnInetAddress.getLocalHost().getHostName();}catch(Exceptione){return"unknown";}}}// ============================================// 业务指标收集// ============================================@ServicepublicclassOrderService{privatefinalCounterorderCounter;privatefinalCounterorderSuccessCounter;privatefinalCounterorderFailureCounter;privatefinalTimerorderProcessingTimer;privatefinalGaugependingOrdersGauge;// 自定义业务指标privatefinalAtomicLongpendingOrders=newAtomicLong(0);publicOrderService(MeterRegistrymeterRegistry){// 订单总数计数器this.orderCounter=Counter.builder("orders.total").description("总订单数").tag("type","all").register(meterRegistry);// 成功订单计数器this.orderSuccessCounter=Counter.builder("orders.success").description("成功订单数").register(meterRegistry);// 失败订单计数器this.orderFailureCounter=Counter.builder("orders.failure").description("失败订单数").tag("reason","unknown").register(meterRegistry);// 订单处理时间this.orderProcessingTimer=Timer.builder("orders.processing.time").description("订单处理时间").publishPercentiles(0.5,0.95,0.99).publishPercentileHistogram().minimumExpectedValue(Duration.ofMillis(100)).maximumExpectedValue(Duration.ofSeconds(10)).register(meterRegistry);// 待处理订单数量this.pendingOrdersGauge=Gauge.builder("orders.pending",pendingOrders,AtomicLong::get).description("待处理订单数量").register(meterRegistry);}publicOrdercreateOrder(OrderRequestrequest){returnorderProcessingTimer.record(()-{orderCounter.increment();pendingOrders.incrementAndGet();try{// 处理订单逻辑Orderorder=processOrder(request);orderSuccessCounter.increment();returnorder;}catch(Exceptione){orderFailureCounter.increment();throwe;}finally{pendingOrders.decrementAndGet();}});}privateOrderprocessOrder(OrderRequestrequest){// 订单处理逻辑returnnewOrder();}}// ============================================// HTTP请求指标收集// ============================================@ComponentpublicclassHttpMetricsFilterimplementsWebMvcTagsProvider{@OverridepublicIterableTaggetTags(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,Throwableexception){returnArrays.asList(Tag.of("method",request.getMethod()),Tag.of("uri",getUriTemplate(request)),Tag.of("status",String.valueOf(response.getStatus())),Tag.of("exception",exception!=null?exception.getClass().getSimpleName():"none"));}privateStringgetUriTemplate(HttpServletRequestrequest){Stringuri=request.getRequestURI();// 参数化URI,避免高基数问题returnuri.replaceAll("/\\d+","/{id}");}}// ============================================// 缓存指标监控// ============================================@ServicepublicclassCacheService{privatefinalCountercacheHitCounter;privatefinalCountercacheMissCounter;privatefinalTimercacheGetTimer;public

相关文章:

应用监控详解

应用监控详解 本章导读 没有监控的系统就像在黑暗中摸索——你永远不知道问题何时发生、发生在哪里。本章深入讲解APM工具、链路追踪、指标采集三大监控支柱,帮助读者构建全方位的系统可观测性,实现从被动救火到主动预防的转变。 学习目标: 目标1:理解可观测性三大支柱(Me…...

Unity基础:UI组件详解:Slider滑动条的用法与值获取

Unity基础:UI组件详解:Slider滑动条的用法与值获取📚 本章学习目标:深入理解UI组件详解的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《Unity工程师成长之路教程》Unity入门…...

2026年4月21日60秒读懂世界:阅读与手机时间、汽车价格战、脑机接口临床提速,今天最值得关注的6个信号

🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...

Blender 3MF插件终极指南:如何免费实现3D打印文件格式无缝转换

Blender 3MF插件终极指南:如何免费实现3D打印文件格式无缝转换 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat Blender3mfFormat是一款功能完整的开源Blender…...

Qwen3-0.6B-FP8基础教程:理解Safetensors权重格式与FP8_E4M3特性

Qwen3-0.6B-FP8基础教程:理解Safetensors权重格式与FP8_E4M3特性 1. 引言:为什么你需要了解权重格式和量化 如果你刚开始接触大模型部署,可能会被各种技术术语搞得一头雾水。权重格式、量化、FP8、Safetensors……这些词听起来很专业&#…...

Phi-3.5-Mini-Instruct本地化优势:规避API限流/配额/隐私泄露风险

Phi-3.5-Mini-Instruct本地化优势:规避API限流/配额/隐私泄露风险 1. 为什么选择本地化部署 在当今AI应用蓬勃发展的时代,越来越多的开发者面临云端API服务的三大痛点:限流政策、配额限制和隐私安全风险。Phi-3.5-Mini-Instruct的本地化部署…...

(84页PPT)公司整套管理流程图(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 (84页PPT)公司整套管理流程图.pptx_PPT大模型实践案例资源-CSDN下载 资料解读:《公司整套管理流程图》 详细资料请看本解读文章的最后内容。 作为一套系统性…...

(82页PPT)APQP初级先期产品质量策划和控制计划(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 (82页PPT)APQP初级先期产品质量策划和控制计划.pptx_火灾应急处理措施资源-CSDN下载 资料解读:(82 页 PPT)APQP 初级先期产品质量策划和…...

终极指南:如何在Windows上高效管理安卓应用的完整解决方案

终极指南:如何在Windows上高效管理安卓应用的完整解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 对于需要在Windows系统上处理安卓应用的用户来说…...

AI 应用软件的开发技术

开发现代 AI 应用软件的技术栈早已超越了简单的“前端后端”模式。在 2026 年,一个完整的 AI 原生(AI-Native)应用通常由以下四大技术层级驱动。1. 模型与算力层这是应用的底层核心,负责推理与生成。大模型引擎: 开发者…...

老照片模糊发黄?别让珍贵回忆蒙尘,三步教你“复活”旧时光

在每个家庭的抽屉深处,或许都珍藏着一本厚重的相册。翻开它,泛黄的相纸、模糊的笑脸,瞬间将我们拉回到那个没有智能手机、没有高清摄像的年代。这些照片承载着父母的青春、我们的童年,是无可替代的宝贵记忆。然而,时光…...

视频合并软件哪个好用?UP主私藏的5款剪辑神器,让你的视频无缝衔接

你是不是也经常遇到这样的情况:出去旅游拍了一堆零散的Vlog片段,宝宝成长的可爱瞬间被记录在几十个短视频里,或者为了工作项目收集了多个视频素材……想把它们整合成一个完整的视频,却不知道从何下手?很多人因此在网上…...

电脑截图快捷键大全:别再用QQ和微信了,这才是高手的截图方式

在日常工作和学习中,截图是一项使用频率极高的操作。然而,很多人至今仍在依赖QQ、微信等社交软件的截图功能,不仅步骤繁琐,而且在没有网络或不想登录时就束手无策。其实,你的电脑系统(无论是Windows还是mac…...

4月21日发布!OPPO Pad Mini 要给小平板正名了

4月21日19:00,OPPO将召开新品发布会,除了Find X9s Pro等旗舰手机,最让我期待的就是OPPO Pad Mini这款小平板。说实话,这几年我一直觉得小平板是“鸡肋”——手机屏幕越做越大,折叠屏又能兼顾大屏,8.8英寸的…...

AngularJS 控制器

AngularJS 控制器 (Controller) 学习笔记 控制器是 AngularJS 应用的核心组件之一,负责初始化应用状态、定义行为逻辑,并作为视图(HTML)和模型(Scope)之间的桥梁。 一、控制器的基本概念 1. 什么是控制器…...

从单体到微服务:如何用Spring Cloud构建高可用医院信息系统HIS

从单体到微服务:如何用Spring Cloud构建高可用医院信息系统HIS 【免费下载链接】HIS HIS英文全称 hospital information system(医疗信息就诊系统),系统主要功能按照数据流量、流向及处理过程分为临床诊疗、药品管理、财务管理、患…...

生产环境mysql如何实现高可用_配置主从复制与自动故障切换

主从复制SHOW SLAVE STATUS显示Connecting的常见原因是网络通但权限或配置未对齐:主库需开启binlog且server_id全局唯一;从库CHANGE MASTER TO中MASTER_HOST不能为localhost或127.0.0.1,须填真实IP或域名。主从复制配不起来,SHOW …...

从混乱到有序:NSC_BUILDER 让你的 Switch 游戏库焕然一新

从混乱到有序:NSC_BUILDER 让你的 Switch 游戏库焕然一新 【免费下载链接】NSC_BUILDER Nintendo Switch Cleaner and Builder. A batchfile, python and html script based in hacbuild and Nuts python libraries. Designed initially to erase titlerights encry…...

da da wda d

da w d w...

c++怎么读取大端序设备的固件bin文件_字节反转与位移操作【详解】

...

暗黑破坏神2重生记:用d2dx让20年老游戏焕发现代光彩

暗黑破坏神2重生记:用d2dx让20年老游戏焕发现代光彩 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 还在为经典《…...

KMS激活终极指南:5分钟搞定Windows和Office永久激活难题

KMS激活终极指南:5分钟搞定Windows和Office永久激活难题 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾因Windows系统未激活而烦恼?是否因为Office办公软件弹出…...

计算机毕业设计:Python农业粮食产量与气候预测平台 Django框架 数据分析 可视化 机器学习 深度学习 大数据 大模型(建议收藏)✅

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ > 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与…...

NCMconverter完整指南:3步解锁加密音乐文件的终极播放方案

NCMconverter完整指南:3步解锁加密音乐文件的终极播放方案 【免费下载链接】NCMconverter NCMconverter将ncm文件转换为mp3或者flac文件 项目地址: https://gitcode.com/gh_mirrors/nc/NCMconverter 你是否曾经遇到过这样的情况:从音乐平台下载了…...

渗透基础知识ctfshow——Web应用安全与防护(第六 七章)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录混合型XSSXSS 练习(反射型)**绕过方法**新增知识:平台外带xss编码绕过XSS过滤绕过方法请求伪造漏洞_CSRF绕过方法最简单的SSRFSSR…...

如何简化多表关联SQL逻辑_利用视图封装复杂JOIN操作

PHP队列消费进程卡住需先检查pcntl_fork是否被禁用;AI请求须设硬超时;Redis队列应使用BRPOPLPUSH防消息丢失;systemd需调大MemoryLimit和RestartSec。PHP队列消费进程卡住不动?先查pcntl_fork是否被禁用很多线上环境(尤…...

部署本地AI大模型--ollma

下载链接: 1.官网:在Windows上下载《Ollama 2.github:Release v0.21.0 ollama/ollama 前言:为什么选择 Ollama Ollama 是一款专为本地运行大模型打造的开源工具,它把复杂的环境配置、依赖管理和模型量化过程都封装…...

3步完成微信聊天记录备份:WeChatExporter终极免费教程

3步完成微信聊天记录备份:WeChatExporter终极免费教程 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter WeChatExporter是一款免费开源的微信聊天记录导出工具&…...

终极网盘直链下载助手完整指南:如何一键获取八大网盘真实下载地址

终极网盘直链下载助手完整指南:如何一键获取八大网盘真实下载地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动…...

5步深度解析:ComfyUI-SUPIR图像超分辨率实战指南

5步深度解析:ComfyUI-SUPIR图像超分辨率实战指南 【免费下载链接】ComfyUI-SUPIR SUPIR upscaling wrapper for ComfyUI 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-SUPIR ComfyUI-SUPIR是ComfyUI生态中一款基于扩散模型的专业级图像超分辨率插件…...