【可信数据空间-连接器状态监控-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://www.pswp.cn/pingmian/95928.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

反编译分析C#闭包

一、问题描述&#xff1a;比如有这样的代码&#xff1a;它的输出结果是 3&#xff0c;3&#xff0c;3。通过搜索得知这一现象是因为C#闭包导致的.我们借助ILSpy看下IL中间代码&#xff0c;首先它生成了一个名叫DisplayClass的类&#xff0c;类中定义了i的字段主代码&#xff1a…

卷积神经网络(CNN):从图像识别原理到实战应用的深度解析

目录一.CNN的技术必要性&#xff1a;破解传统图像处理的两大核心痛点痛点1&#xff1a;特征依赖人工设计&#xff0c;通用性差痛点2&#xff1a;全连接网络参数爆炸&#xff0c;训练难收敛二.CNN的核心原理&#xff1a;两大机制与分层感知逻辑1.核心机制1&#xff1a;局部连接&…

用 SPL 编写阿里云 FC2.0 函数

前言 在数字化转型持续加速的背景下&#xff0c;企业越来越多地将业务逻辑以服务化方式部署至云端。阿里云函数计算&#xff08;Function Compute&#xff0c;简称FC&#xff09;作为一种无服务器计算平台&#xff0c;屏蔽了底层资源运维的复杂性&#xff0c;使开发者能够专注…

AR 巡检与普通巡检有哪些区别,有哪些优势|阿法龙XR云平台

AR 巡检&#xff08;增强现实巡检&#xff09;与普通巡检&#xff08;传统人工巡检&#xff09;在技术应用、效率、准确性等多个维度存在显著差异&#xff0c;具体区别如下&#xff1a; 1. 巡检方式更智能 普通巡检&#xff1a;依赖人工现场观察&#xff0c;主要通过眼看、手…

Java中的volatile关键字详解

核心作用&#xff1a;解决可见性和有序性问题volatile 的主要作用可以归结为两点&#xff1a;1.保证变量的可见性 和 禁止指令重排序。2.它提供了一种轻量级的同步机制&#xff0c;3.但需要注意的是&#xff0c;它不能保证原子性。保证可见性&#xff1a;什么是可见性问题&…

【Linux】MySQL数据目录迁移步骤(含流程图踩坑经验)

在生产环境中&#xff0c;有时候你会遇到一些看似简单但实际上很棘手的问题。最近我就碰到了一次典型的服务器磁盘空间告急&#xff0c;最后通过迁移 MySQL 数据目录成功解决了问题。本文记录整个过程&#xff0c;包括我的分析思路、迁移步骤、踩坑和经验总结&#xff0c;希望对…

数据驱动下的连锁模式复制:技术科普与方法论深度解析

前言在连锁经营的赛道上&#xff0c;“复制”是核心命题&#xff0c;但绝非简单的“粘贴”。当行业进入数字化深水区&#xff0c;数据驱动正成为连锁模式突破增长瓶颈、实现高效复制的“隐形引擎”。本文将从技术科普与方法论心得两个维度&#xff0c;深度拆解数据如何重塑连锁…

数据库学习MySQL系列2、Windows11系统安装MySQL方法一.msi安装详细教程

方法一.msi安装详细教程 Windows系统下MySQL——.msi安装详细教程&#xff08;默认--只安装服务端“Server only”&#xff09;MySql官网地址&#xff1a;https://www.mysql.com/&#xff1b;快速下载通道请单击→ No thanks, just start my download.ps&#xff1a;其他资源(…

html+css+vue实现增删改查

代码如下&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>优化版 Vue.js CRUD 示例&l…

(计算机网络)DNS解析流程及两种途径

在计算机网络中&#xff0c;DNS&#xff08;Domain Name System&#xff09;用于 将域名解析为 IP 地址。一个完整的解析过程涉及 递归查询、迭代查询&#xff0c;以及多个关键角色&#xff08;LDNS、本地域名服务器&#xff1b;根服务器&#xff1b;顶级域名服务器&#xff1b…

数据结构——队列(Java)

一.基本概念 队列用来存储逻辑关系为“一对一”的数据&#xff0c;是一种“特殊”的线性存储结构。 特点&#xff1a; •先进先出&#xff1a;队列中元素的添加&#xff08;入队enqueue&#xff09;和移除&#xff08;出队dequeue&#xff09;遵循先进先出的原 则。 •端点&…

【Go】:mac 环境下GoFrame安装开发工具 gf-cli——gf_darwin_arm64

当前主要是关于gf_darwin_arm64的安装步骤 如何快速给mac电脑安装gfgf是什么安装步骤方法1&#xff1a;去github下载gf-cli去git上下载对应电脑版本的gf-cli验证下载文件是否二进制文件授予该文件权限方法2&#xff1a;去goframe官网教你下载步骤验证gf是否安装成功可能遇到的问…

【新】ApiHug官方文档-ApiHug Spring Security 扩展-补充说明

概述 在上次说明中我们写了ApiHug 如何做授权的&#xff0c; 这里有个概念的混淆&#xff0c; 其实 apihug 不是在spring security 上做的安全扩展&#xff0c; 应该是 apihug spring, 安全设计框架&#xff0c; 和本身 spring security 没有半毛钱关系&#xff0c; 而如果你…

【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇

概述&#xff1a;本篇是接着上一篇&#xff0c;细分出说明书的编写部分&#xff0c;实现这个功能的需求&#xff0c;是内部很多同事反馈&#xff0c;需要有个地方存工具&#xff0c;并且可以写说明书&#xff0c;如果需要的人&#xff0c;那么可以在界面上直接下载工具和查看工…

Mac设置中的安全性缺少“任何来源”

问题&#xff1a;用Mac安装软件&#xff0c;隐私性与安全性&#xff0c;想切换“任何来源”用来下载网站的app&#xff0c;但是菜单栏找不到“任何来源”选项&#xff0c;无法安装dmg的文件终端中一行代码设置出来&#xff1a;sudo spctl --global-disable &#xff08;禁用Mac…

uniapp开发小程序,列表 点击后加载更多数据

一、需求 1.初始显示限制:将每页条数limit改为5,确保初始只显示5条数据 2.查看更多功能:添加了loadMore方法,点击"查看更多"时加载下一页数据 3.实现查看更多功能,点击后加载更多数据 4.添加loading状态防止重复请求 添加hasMore状态判断是否还有更多数据 …

Windows 部署 Gerrit 与 Apache24 配置

Windows 部署 Gerrit 与 Apache24 并配置反向代理 准备工作 下载并安装 Java JDK 确保配置 JAVA_HOME 环境变量博主这里安装openjdk21 https://jdk.java.net/archive/下载所需软件 Apache24&#xff1a;https://httpd.apache.org/download.cgi Gerrit&#xff1a;https://www.g…

从 Excel 趋势线到机器学习:拆解 AI 背后的核心框架​

引言&#xff1a;你其实早就 “玩转” 过机器学习&#xff1f;提到 “机器学习”&#xff0c;你是不是第一时间联想到复杂的代码、密密麻麻的公式&#xff0c;还有那些让人头晕的 “算法”“模型”“训练” 术语&#xff1f;仿佛它是高高在上的技术&#xff0c;离我们的日常无比…

Lenovo联想YOGA Pro 16 IAH10 2025款笔记本电脑(83L0)开箱状态预装OEM原厂Win11系统

适用机型(MTM)&#xff1a;【83L0】 链接&#xff1a;https://pan.baidu.com/s/1tDpeBb93t1u0XIgqAZ3edg?pwdqy2r 提取码&#xff1a;qy2r 联想原装系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、联想浏览器、电脑管家、…

Android 开发 - 一些画板第三方库(DrawBoard、FingerPaintView、PaletteLib)

一、DrawBoard 1、Dependencies 模块级 build.gradle implementation com.github.jenly1314:drawboard:1.1.02、Test &#xff08;1&#xff09;Activity Layout activity_draw_board.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout …