这套 Java 监控系统太香了!我连夜给项目加上了
这套 Java 监控系统太香了我连夜给项目加上了为什么需要监控系统作为 Java 开发者你一定遇到过这样的场景深夜被报警电话叫醒说系统响应变慢了或者线上出 bug 了却找不到原因。这时候一套好的监控系统就像项目的“体检仪”能帮你提前发现问题、快速定位故障。我最近在项目中用了一套开源监控系统从基础的数据采集到高级的告警联动简直香到不行。今天我就带你从零开始一步步搭建一个 Java 监控系统。## 基础概念监控系统的三大支柱在动手之前我们先理解监控系统的核心组成部分1.数据采集从 Java 应用、服务器、数据库等源头收集指标如 CPU 使用率、请求耗时、GC 次数2.数据存储将采集到的时序数据持久化常用 InfluxDB、Prometheus3.可视化与告警用图表展示数据并在指标异常时发送通知我们选择Prometheus Grafana Micrometer这套组合拳因为它是 Java 生态中最流行的监控方案且完全免费。## 第一步用 Micrometer 采集 Java 应用指标Micrometer 是 Spring Boot 官方推荐的监控门面库它像 slf4j 一样统一了各种监控系统的 API。我们从一个最简单的 Spring Boot 应用开始。java// pom.xml 添加依赖// dependency// groupIdio.micrometer/groupId// artifactIdmicrometer-registry-prometheus/artifactId// /dependencyimport io.micrometer.core.instrument.MeterRegistry;import io.micrometer.core.instrument.Counter;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;RestControllerpublic class OrderController { private final Counter orderCounter; // 通过构造函数注入 MeterRegistry public OrderController(MeterRegistry registry) { // 创建一个名为 orders.created 的计数器 this.orderCounter Counter.builder(orders.created) .description(Total number of created orders) .register(registry); } GetMapping(/create-order) public String createOrder() { // 每次调用接口计数器加1 orderCounter.increment(); return Order created successfully!; }}这段代码做了什么- 我们创建了一个计数器指标orders.created用来统计订单创建次数- 每次访问/create-order接口计数器自动 1- 数据会暴露在/actuator/prometheus端点供 Prometheus 抓取## 第二步配置 Prometheus 抓取数据现在 Java 应用已经暴露了指标我们需要 Prometheus 来拉取这些数据。创建一个prometheus.yml配置文件yamlglobal: scrape_interval: 15s # 每15秒抓取一次数据 evaluation_interval: 15sscrape_configs: - job_name: java-app metrics_path: /actuator/prometheus # 抓取路径 static_configs: - targets: [localhost:8080] # 应用地址启动 Prometheus假设你已下载bash./prometheus --config.fileprometheus.yml访问http://localhost:9090在 Prometheus 的查询框中输入orders.created_total你应该能看到数据在增长。## 第三步用 Grafana 制作炫酷仪表盘数据有了但数字太枯燥。我们用 Grafana 把它变成可视化图表。1. 启动 Grafanadocker run -d -p 3000:3000 grafana/grafana2. 登录默认 admin/admin添加 Prometheus 数据源地址填http://localhost:90903. 创建一个新的 Dashboard添加 Panel这里是一个完整的仪表盘配置示例通过 JSON 导入json{ title: Java 应用监控, panels: [ { title: 订单创建速率, type: graph, targets: [ { expr: rate(orders.created_total[1m]), legendFormat: 订单/秒 } ] }, { title: JVM 堆内存, type: graph, targets: [ { expr: jvm_memory_used_bytes{area\heap\} / 1024 / 1024, legendFormat: 堆内存 (MB) } ] } ]}高级用法你可以添加告警规则。比如当订单创建速率低于 10/秒 时发送 Slack 通知yaml# prometheus-alert.ymlgroups: - name: java-alerts rules: - alert: LowOrderRate expr: rate(orders.created_total[5m]) 10 for: 5m labels: severity: warning annotations: summary: 订单创建速率过低当前值 {{ $value }}## 进阶自定义业务监控指标除了系统指标我们还能监控业务数据。比如统计接口响应时间的百分位数javaimport io.micrometer.core.instrument.Timer;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import java.util.concurrent.TimeUnit;RestControllerpublic class PerformanceController { private final Timer responseTimer; public PerformanceController(MeterRegistry registry) { // 创建一个耗时统计器记录 P50、P95、P99 this.responseTimer Timer.builder(api.response.time) .description(API response time in milliseconds) .publishPercentiles(0.5, 0.95, 0.99) // 发布百分位 .sla(Duration.ofMillis(100)) // 定义服务等级目标 .register(registry); } GetMapping(/slow-api) public String slowApi() { // 使用 Timer.Sample 记录耗时 Timer.Sample sample Timer.start(registry); try { Thread.sleep(50); // 模拟业务处理 return Done; } finally { // 停止计时并记录 sample.stop(responseTimer); } }}在 Grafana 中你可以用api_response_time_seconds{quantile0.99}来查看 P99 延迟。当这个值超过 200ms 时说明有性能瓶颈。## 总结这套监控系统实现了从数据采集Micrometer到存储Prometheus再到可视化Grafana的完整链路。它香在哪里-零侵入Micrometer 与 Spring Boot 完美集成只需几行代码-高扩展可以监控 JVM、数据库连接池、HTTP 请求等 100 指标-自愈能力配合告警规则系统能自动修复比如重启慢服务如果你还没给项目加上监控今晚就动手吧相信我第二天你会感谢自己的。

相关新闻

ES-Client:企业级Elasticsearch集群管理的3大架构优势与5个核心模块解析

ES-Client:企业级Elasticsearch集群管理的3大架构优势与5个核心模块解析

ES-Client:企业级Elasticsearch集群管理的3大架构优势与5个核心模块解析 【免费下载链接】es-client elasticsearch客户端,issue请前往码云:https://gitee.com/qiaoshengda/es-client 项目地址: https://gitcode.com/gh_mirrors/es/es-clie…

2026/10/20 13:39:37 阅读更多 →
Obsidian-i18n插件汉化终极指南:5步实现英文插件中文界面

Obsidian-i18n插件汉化终极指南:5步实现英文插件中文界面

Obsidian-i18n插件汉化终极指南:5步实现英文插件中文界面 【免费下载链接】obsidian-i18n 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-i18n 还在为Obsidian插件的英文界面而头疼吗?想要轻松将心爱的插件变成中文版本,却不…

2026/10/20 15:12:10 阅读更多 →
LAN Share:局域网文件传输的最佳解决方案,零配置跨平台文件共享

LAN Share:局域网文件传输的最佳解决方案,零配置跨平台文件共享

LAN Share:局域网文件传输的最佳解决方案,零配置跨平台文件共享 【免费下载链接】LAN-Share Cross platform LAN File transfer application built with Qt C framework 项目地址: https://gitcode.com/gh_mirrors/la/LAN-Share 在数字化办公和家…

2026/10/19 11:49:40 阅读更多 →

最新新闻

NLTK情感分析实战:朴素贝叶斯文本分类与特征工程

NLTK情感分析实战:朴素贝叶斯文本分类与特征工程

开头我先交代一个背景。去年我接了一个某售后团队的文本处理需求,他们每个月有近万条用户反馈,需要把表达不满的留言单独捞出来,让客服优先跟进。一开始大家都以为这种“情绪识别”要上什么重磅模型,结果我用了NLTK这套老牌工具&a…

2026/10/20 15:11:55 阅读更多 →
H3C防火墙双机热备:RBM+VRRP原理与Web配置实战

H3C防火墙双机热备:RBM+VRRP原理与Web配置实战

做网络运维这些年,防火墙双机热备是我见过最务实、也最容易被忽视的一项配置。很多朋友一提到RBMVRRP,脑子里就浮现一堆命令行,要么对着文档一行行抄,要么在设备上死记硬背,最后改一个接口就全乱了。其实H3C防火墙这套…

2026/10/20 15:11:55 阅读更多 →
OWASP Benchmark实战:用黄金标准量化评估SAST/DAST工具能力

OWASP Benchmark实战:用黄金标准量化评估SAST/DAST工具能力

如果你负责过应用安全工具选型,大概率经历过这种尴尬:会议室里各家厂商把 SAST、DAST 工具演示得天花乱坠,漏洞检出率动辄宣称百分之九十几,可一旦回到真实业务,漏报和误报依旧扎心。这种局面本质上不是某个工具不行&a…

2026/10/20 15:11:55 阅读更多 →
VS2017编译64位libssh2:OpenSSL与Zlib三库协同实战指南

VS2017编译64位libssh2:OpenSSL与Zlib三库协同实战指南

简介:本资源是面向Windows平台C/C开发者的一站式libssh2 64位编译成果包,专为解决VS2017环境下64位应用程序集成SSH2协议能力的刚需。资源提供已成功编译的完整libssh2 Win64库及配套头文件、依赖DLL(含libcrypto-1_1-x64.dll与libssl-1_1-x6…

2026/10/20 15:11:55 阅读更多 →
路由器工作原理深度拆解:路由表、数据包转发与NAT

路由器工作原理深度拆解:路由表、数据包转发与NAT

上次帮邻居调网络,发现他家的光猫、路由器、交换机全都挤在弱电箱里,线乱成一团。他说自己只会“插上电源,连上Wi-Fi”,至于路由器里面到底干了什么,完全是个黑盒子。这其实是很普遍的现象——路由器天天在用&#xff…

2026/10/20 15:11:55 阅读更多 →
Apple Silicon 虚拟机 EFI_RNG_PROTOCOL 缺失排查

Apple Silicon 虚拟机 EFI_RNG_PROTOCOL 缺失排查

前两天我在一台 M2 的 Mac mini 上用 VMware Fusion 装 Ubuntu 22.04 ARM 版,系统安装完重启,屏幕刷过一长串启动日志,其中一行EFI_RNG_PROTOCOL unavailable特别扎眼。第一反应就是“启动失败了”。结果等了几秒,系统照常进到了登…

2026/10/20 15:10:51 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →