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

【可信数据空间-连接器状态监控-Java代码集成】

可信数据空间-连接器状态监控-Java代码集成

  • 一、 核心概念
    • 1. Micrometer
    • 2. Micrometer Registry Prometheus
    • 3.Prometheus
  • 二、 依赖配置 (Maven)
  • 三、 集成步骤与代码示例
    • 场景一:在 Spring Boot 应用中集成(最简单)
      • 1. 添加依赖(如上所示)。
      • 2. 配置 application.yml/application.properties:
      • 3. 注入 MeterRegistry 并记录指标:
      • 4. 访问指标端点:
    • 场景二:在普通 Java Web 应用中手动集成
      • 1. 添加依赖(同上,无需Spring Boot Actuator)。
      • 2. 创建并配置 Prometheus Registry:
      • 3. 创建 /metrics 端点:
      • 4. 在代码中使用:
  • 四、 常用指标类型及用法
  • 五、 最佳实践

一、 核心概念

1. Micrometer

一个类似于 SLF4J 的应用程序指标门面库。它提供了一套通用的API,让你的代码可以与各种监控系统(Prometheus, Datadog, New Relic等)对接,而无需修改代码。你只需要依赖Micrometer的接口。

2. Micrometer Registry Prometheus

一个具体的实现,负责将Micrometer收集的指标转换为Prometheus能够拉取的格式(即暴露一个 /metrics 端点)。

3.Prometheus

监控系统,它会定期来拉取(scrape)你的应用暴露的 /metrics 端点。

二、 依赖配置 (Maven)

在你的 pom.xml 中添加以下依赖:

<!-- Micrometer 核心门面 -->
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-core</artifactId><version>1.10.6</version> <!-- 请使用最新版本 -->
</dependency><!-- Micrometer 对 Prometheus 的实现 -->
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId><version>1.10.6</version>
</dependency><!-- 如果你使用 Spring Boot Actuator -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

说明:

  • 如果你用的是 Spring Boot,它已经内置了对Micrometer的完美支持,你只需要添加 micrometer-registry-prometheus 依赖即可。Actuator会自动配置好一切。
  • 如果你用的是普通Java项目(如Spark-Java, Quarkus等)或Spring MVC,你需要手动配置。

三、 集成步骤与代码示例

场景一:在 Spring Boot 应用中集成(最简单)

Spring Boot的Actuator模块自动化了绝大部分工作。

1. 添加依赖(如上所示)。

配置 application.yml/application.properties:

2. 配置 application.yml/application.properties:

management:endpoints:web:exposure:include: health, info, metrics, prometheus # 暴露 prometheus 端点metrics:tags:application: my-connector-service # 为所有指标添加一个公共标签

3. 注入 MeterRegistry 并记录指标:

现在你可以在任何Spring管理的Bean(如@Service, @RestController)中注入 MeterRegistry 来创建和记录自定义指标。

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Timer;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;@Service
public class DataService {// 计数器:用于记录发生次数的事件,如错误、请求数private final Counter dataRequestCounter;// 计时器:用于记录耗时操作的持续时间private final Timer dataRequestTimer;// 通过构造函数注入 MeterRegistrypublic DataService(MeterRegistry registry) {// 创建并注册一个计数器dataRequestCounter = Counter.builder("connector.data.requests").description("Total number of data requests received").tag("type", "sql") // 添加自定义标签,用于细分指标.register(registry);// 创建并注册一个计时器dataRequestTimer = Timer.builder("connector.data.processing.time").description("Time taken to process a data request").register(registry);}public String fetchData(String query) {// 方法一开始就启动计时器采样Timer.Sample sample = Timer.start();dataRequestCounter.increment(); // 计数器+1String result;try {// 模拟业务逻辑result = executeQuery(query);} finally {// 无论成功失败,都记录耗时// stop() 方法将耗时记录到计时器sample.stop(dataRequestTimer);}return result;}private String executeQuery(String query) {// 模拟一个耗时操作try {Thread.sleep((long) (Math.random() * 1000));} catch (InterruptedException e) {Thread.currentThread().interrupt();}return "Result for: " + query;}
}

4. 访问指标端点:

启动应用后,访问:http://localhost:8080/actuator/prometheus
你会看到Prometheus格式的指标数据:

# HELP connector_data_requests_total Total number of data requests received
# TYPE connector_data_requests_total counter
connector_data_requests_total{application="my-connector-service", type="sql",} 12.0# HELP connector_data_processing_time_seconds Time taken to process a data request
# TYPE connector_data_processing_time_seconds summary
connector_data_processing_time_seconds_count{application="my-connector-service",} 12.0
connector_data_processing_time_seconds_sum{application="my-connector-service",} 6.234

场景二:在普通 Java Web 应用中手动集成

以使用 Spark-Java 框架为例。

1. 添加依赖(同上,无需Spring Boot Actuator)。

2. 创建并配置 Prometheus Registry:

import io.micrometer.prometheus.PrometheusConfig;
import io.micrometer.prometheus.PrometheusMeterRegistry;public class MonitoringRegistry {private static final PrometheusMeterRegistry registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);public static PrometheusMeterRegistry getRegistry() {return registry;}
}

3. 创建 /metrics 端点:

import static spark.Spark.get;public class Main {public static void main(String[] args) {// 设置一个HTTP端点来暴露指标get("/metrics", (req, res) -> {res.type("text/plain; version=0.0.4");return MonitoringRegistry.getRegistry().scrape(); // 返回Prometheus格式的数据});// 你的其他路由...get("/data", (req, res) -> {// 使用全局的registry创建计数器Counter.builder("my_custom_requests").register(MonitoringRegistry.getRegistry()).increment();return "Hello World";});}
}

4. 在代码中使用:

和你可以在任何地方通过 MonitoringRegistry.getRegistry() 获取注册表,然后使用Micrometer API创建指标,如场景一所示。

四、 常用指标类型及用法

类型Micrometer类用途示例
计数器Counter记录只增不减的值,如请求数、错误数。.increment()
计时器Timer记录短时操作的耗时和频率。timer.record(() -> {…}) 或 Timer.Sample
计量仪Gauge记录一个瞬时值,如当前内存使用、队列大小。Gauge.builder(“queue.size”, queue, Collection::size).register(registry)
摘要DistributionSummary记录事件的分布情况,如响应体大小。summary.record(responseBytes)

五、 最佳实践

  1. 标签(Tags)是关键: 使用标签来维度化指标(如 method=“GET”, status=“200”, uri=“/api/data”)。避免将变量值作为指标名称(如 my_metric_/api/data)。
  2. 指标命名: 使用 . 分隔单词,如 http.server.requests。保持命名一致性。
  3. 不要过度测量: 监控核心业务逻辑和关键性能路径,避免产生太多无用的指标,增加存储和查询负担。
  4. 利用自动配置: 在Spring Boot中,无需手动配置HTTP请求的计时器,spring-boot-starter-actuator 已经为你做好了。你只需要暴露端点即可。

通过以上步骤,你就可以轻松地在Java连接器代码中集成强大的监控能力,为后续的Prometheus抓取和Grafana可视化打下坚实的基础。


文章转载自:

http://hwTDOEZF.kxbdm.cn
http://ctfBx9Jz.kxbdm.cn
http://c5CNynTp.kxbdm.cn
http://Z2oYvaMh.kxbdm.cn
http://xAc9mEiy.kxbdm.cn
http://vWZvr1HC.kxbdm.cn
http://FpBiLd1V.kxbdm.cn
http://MHP1Kpa6.kxbdm.cn
http://ZwLhSs6R.kxbdm.cn
http://JRIQDjJZ.kxbdm.cn
http://Z0gguyAe.kxbdm.cn
http://rc8MFKEz.kxbdm.cn
http://NWaCpMDU.kxbdm.cn
http://C9EvvoAP.kxbdm.cn
http://3k21JAAe.kxbdm.cn
http://jnKCHT9j.kxbdm.cn
http://MGMnKUfB.kxbdm.cn
http://FTZ2mY1k.kxbdm.cn
http://ybN8x8YP.kxbdm.cn
http://Be38o51y.kxbdm.cn
http://XASQVL9H.kxbdm.cn
http://bu6OINr3.kxbdm.cn
http://0GK7ika0.kxbdm.cn
http://8SaDlEzK.kxbdm.cn
http://sMmOKpL0.kxbdm.cn
http://60MnGX8w.kxbdm.cn
http://kpv8wOtT.kxbdm.cn
http://qeAjlhRV.kxbdm.cn
http://qAwdbuZr.kxbdm.cn
http://8icad0GC.kxbdm.cn
http://www.dtcms.com/a/369185.html

相关文章:

  • C语言(长期更新)第15讲 指针详解(五):习题实战
  • 全球汽车氮化镓技术市场规模将于2031年增长至180.5亿美元,2025-2031年复合增长率达94.3%,由Infineon和Navitas驱动
  • .Net程序员就业现状以及学习路线图(四)
  • 垃圾回收算法详解
  • 【QT 5.12.12 打包-Windows 平台下】
  • 2025高教社数学建模国赛B题 - 碳化硅外延层厚度的确定(完整参考论文)
  • 【设计模式】UML 基础教程总结(软件设计师考试重点)
  • 三维聚类建模
  • Web 转发机制深度解析
  • 鸿蒙NEXT自定义能力详解:从基础使用到高级技巧
  • Coze源码分析-资源库-删除提示词-前端源码
  • leedcode 算法刷题第二七天
  • 水上乐园票务管理系统设计与开发(代码+数据库+LW)
  • 天顶围棋(PC端)新手指南:3步完成对弈设置离线围棋游戏推荐:天顶围棋(PC端)实测解析 天顶围棋(PC端)避坑指南:新手设置全攻略
  • 同分异构体
  • 半年报中的FPGA江湖:你打你的,我打我的
  • 【Leetcode】高频SQL基础题--180.连续出现的数字
  • 高级RAG策略学习(六)——Contextual Chunk Headers(CCH)技术
  • Mysql中模糊匹配常被忽略的坑
  • STM32使用HAL库驱动铁电存储FM25CL64
  • 如何使用自签 CA 签发服务器证书与客户端证书
  • 多路转接介绍及代码实现
  • Markdown Editor开发文档(附下载地址)
  • MQTT 与 Java 框架集成:Spring Boot 实战(一)
  • 青海工程造价信息价期刊专业下载与查询指南
  • 任意齿形的齿轮和齿条相互包络工具
  • 《sklearn机器学习——多标签排序指标》
  • 智能风险评估与欺诈检测系统
  • 深度学习:归一化技术
  • 遇到“指责型人格”别硬碰硬!3个反拿捏技巧,让他从挑刺变闭嘴