SpringBoot 实现自定义指标监控

news2024/11/17 7:18:27

一、添加业务监控指标

在 spring-web-prometheus-demo 项目的基础上,我们添加一个 PrometheusCustomMonitor 类。在这里面我们定义了三个业务指标:

  • order_request_count:下单总次数
  • order_amount_sum:下单总金额
@Component
public class PrometheusCustomMonitor {

    /**
     * 订单发起次数
     */
    private Counter orderCount;

    /**
     * 金额统计
     */
    private DistributionSummary amountSum;

    private final MeterRegistry registry;

    @Autowired
    public PrometheusCustomMonitor(MeterRegistry registry) {
        this.registry = registry;
    }

    @PostConstruct
    private void init() {
        orderCount = registry.counter("order_request_count", "order", "test-svc");
        amountSum = registry.summary("order_amount_sum", "orderAmount", "test-svc");
    }

    public Counter getOrderCount() {
        return orderCount;
    }

    public DistributionSummary getAmountSum() {
        return amountSum;
    }
}

二、模拟订单数据 

这里我们新增一个 TestController 类,去模拟现实的订单数据。

后续应用启动后,我们可以通过 localhost:8080/order 去模拟用户下单操作。

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.Random;

@RestController
public class TestController {

    @Resource
    private PrometheusCustomMonitor monitor;

    @RequestMapping("/order")
    public String order() throws Exception {
        // 统计下单次数
        monitor.getOrderCount().increment();
        Random random = new Random();
        int amount = random.nextInt(100);
        // 统计金额
        monitor.getAmountSum().record(amount);
        return "下单成功, 金额: " + amount;
    }
}

实际项目中,我们一般使用 AOP 的方式去实现业务指标上报。这里为了简单,直接写在代码里了。 

 

三、启动项目测试 

现在我们启动应用,访问 localhost:8080/order 可以成功模拟下单,每次都会有一个随机的订单金额产生。

 

此时我们访问 localhost:8080/actuator/prometheus 就可以看到对应的指标已经存在。 

 

后续我们在 Grafana 中配置好相应的图表就可以看到对应的业务指标变化了。 

四、配置Grafana图表

这里我们一共配置四个图表,分别是:

  • 订单总数
  • 订单支付总额
  • 订单数增长率
  • 订单支付金额增长率

 

1、配置订单个数图表

我们在原有面板上新建一个图表(Panel),名称命名为「订单个数」,来统计所有的订单数量。

在「数据配置区」中数据源选择「Prometheus」,Metrics 填入「order_amount_sum_count」。

 

 接着在「图表设置区」的「Visualization」中选择「Stat」类别,表示这是一个统计数值。 

 

接着在「图表设置区」的「Display」中的 Value 设置为「Last」,表示其值是取最后一个数值(因为这个数值是已经统计好了的)。Fields 设置为「Numeric Fields」,表示其是一个数值字段。

 

 

2、配置订单总额图表 

我们同样在原有面板上新建一个图表(Panel),名称命名为「订单金额」,来统计所有订单的支付总金额。

在「数据配置区」中数据源选择「Prometheus」,Metrics 填入「order_amount_sum_sum」。

 

接着在「图表设置区」的「Visualization」中选择「Stat」类别,表示这是一个统计数值。 

 

接着在「图表设置区」的「Display」中的 Value 设置为「Last」,表示其值是取最后一个数值(因为这个数值是已经统计好了的)。Fields 设置为「Numeric Fields」,表示其是一个数值字段。 

 

 

3、配置订单增长率 

这里我们配置一个订单数的增长率,同样在原有面板上新建一个图表(Panel),名称命名为「订单增长率」,来统计订单数的增长率。

在「数据配置区」中数据源选择「Prometheus」,Metrics 填入「rate(order_amount_sum_count[1m])」,Legend 填入「{{instance}}」。

 

接着在「图表设置区」的「Visualization」中选择「Graph」类别,表示这是一个图形。

 

在「图表设置区」的「Axes」中设置「Left Y」的「Unit」设置其单位为:percent(0.0-1.0)。

 

 

4、配置订单金额增长率 

与配置订单增长率相似,只不过这里的 Metrics 需要填「rate(order_amount_sum_sum[1m])」。 

 

在「图表设置区」的「Axes」中设置「Left Y」的「Unit」设置其单位为:percent(0-100)。 

 

设置完之后的监控界面如下图所示: 

 

接下来我们模拟一下订单的增长,访问下 localhost:8080/order 模拟下单。多访问几次,以便看到更明显的增长效果。 

 我们可以看到各项指标都有明显的变化,这说明我们的监控生效了! 

 

五、总结

我们通过一个简单的订单业务,模拟了实际的订单数、订单金额变化情况。接着,我们通过配置订单总数、订单总金额、订单数增长率、订单金额增长率这几个图表来实现自定义指标的监控。

实现自定义指标监控,有利于我们监控关键的业务指标,从而在线上问题发生之前提前预支问题,最终减少线上问题带来的损失。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1418149.html

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

相关文章

全球医疗器械产品查询-30个官网查询系统合集!

国内外上市医疗器械产品数据及注册备案信息是医疗器械行业中极其重要的情报之一。大多数医械人都知道国内医疗器械产品信息可在NPMA及各省市药监局官网查询,但对于国际的医疗器械产品数据披露平台,由于语言壁垒及网页设计习惯差异,查询却不太…

深入了解Redis:选择适用于你的场景的持久化方案

自然语言处理的发展 文章目录 自然语言处理的发展强烈推荐前言:Redis提供了几种主要的持久化方案:RDB快照持久化:工作原理: AOF日志文件持久化:混合持久化: 总结强烈推荐专栏集锦写在最后 强烈推荐 前些天…

厨房用品国际市场拓展:如何利用海外网红营销助力品牌成长

随着全球化的加速和互联网的普及,越来越多的中国厨房用品品牌开始寻求海外市场的拓展。而在这一过程中,海外网红营销正崭露头角,为品牌的跨足国际市场提供了强有力的助力。本文Nox聚星将和大家探讨如何通过海外网红营销助力厨房用品品牌在海外…

第四篇【传奇开心果系列】beeware的Toga开发移动应用示例:健身追踪应用

传奇开心果博文系列 系列博文目录beeware的Toga开发移动应用示例系列博文目录前言一、记录存储运动活动数据二、添加添加统计显示功能三、添加图表显示数据分析功能四、增加健身计划管理五、增加备份数据恢复数据功能六、初步整合代码示例七、增加登录验证功能八、完成最终整合…

什么是数据库设计?基本步骤有哪些?

数据库设计结构图 实线代表输入,虚线代表输出,每个节点的输出作为下一个节点的输入。 基本步骤 1.需求分析阶段 数据需求分析是在项目确定之后,用户和设计人员对数据库应用系统所要涉及的内容(数据)和功能&#xff0…

vmware虚拟机centos8共享文件夹挂载

1.设置虚拟机共享文件夹 2. 上述设置完毕之后,重启进入虚拟机,查看出现的共享文件夹名称 vmware-hgfsclient 3.查看是否有挂载目录,挂在目录默认为 /mnt/hgfs。没有时可以使用以下命令创建 mkdir /mnt/hgfs 4. 手动挂载目录--只能实现一次 注…

【python】argparse解析参数的过程

python基础知识 python文件解析if \_\_name\_\_ \_\_main\_\_的作用import到底导入了什么?argparse解析命令行参数的过程Debug—案例分析 python文件解析 Python和C语言的编译、执行过程有很大区别。我们先回顾一下c语言的执行过程,首先代码文件要编译…

GitLab 中国发行版如何设置镜像拉取策略?

最近在用极狐GitLab(极狐GitLab 可以理解为 GitLab 在中国的发行版) CI/CD 的时候遇到一个问题:CI/CD 中有一个 stage 需要拉取 dockerhub 上的镜像,但是由于 dockerhub 在国内的访问不是很顺畅,经常发生 timeout 的情…

pytest框架的基本使用

1. 测试框架的作用 测试框架不关系用例的内容 它关心的是:用例编排和结果收集 2. pytest框架的特点 1. 适用于python语言 2. 用法符合python风格 3. 有丰富的生态 3. 安装pytest框架 1. 新建一个项目 2. 在项目终端窗口输入如下命令,用于安装py…

危险!这3本期刊陆续被三大数据库剔除!2024年EI期刊目录首次更新!

【SciencePub学术】2024年1月1日,爱思唯尔更新了EI Compendex收录期刊目录。 继上次EI期刊目录更新之后,本次1月更新共有3本期刊发生变动: 其中,有3本期刊停止收录(DISCONTINUED),连续出版/核心…

如何使用Docker部署WBO白板并实现公网地址远程访问

本文主要是如何使用Docker部署WBO白板并实现公网地址远程访问的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 🌄每日一句&am…

MySql语句中的ON DUPLICATE KEY UPDATE使用详解

目录 一:主键索引,唯一索引和普通索引的关系1. 主键索引2. 唯一索引:3. 普通索引:1:ON DUPLICATE KEY UPDATE功能介绍:2:ON DUPLICATE KEY UPDATE测试样例总结: 执行以下实验进行分析…

苹果m1、m2安装blender GIS,解决not Imageio 报错

blender-GIS 能够在地图上生成地形,如下图所示: 使用blenderGIS过程中会有 imageio 找不到的情况, 网上的 imageio 用在苹果电脑的M1、M2芯片上好像还是没有出图,似乎这个 imageio 这个已经是好几年前的代码,没能适配…

100天精通鸿蒙从入门到跳槽——第20天:ArkTS装饰器@Link双向数据绑定

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通Golang》 — Go语言学习之旅!《100天精通鸿蒙》 — 从Web/安卓到鸿蒙大师!100天…

C语言——O / 动态内存管理

一、为什么要有动态内存分配 我们已经掌握的内存开辟⽅式有: int val 20;//在栈空间上开辟四个字节 char arr[10] {0};//在栈空间上开辟10个字节的连续空间 但是上述的开辟空间的⽅式有两个特点: • 空间开辟⼤⼩是固定的。 • 数组在申明的时候&am…

头戴式耳机推荐,适合学生党入手的平价头戴式耳机型号品牌推荐

市面上的头戴式耳机品牌繁多,价格各异,如何选择一款性价比高、适合自己的头戴式耳机呢?作为一个使用过不下十几款的头戴式耳机的大户,接下来我就根据我自己的经验为大家推荐一些平价好用的头戴式耳机,让学生党在预算有…

亚信安慧AntDB:AntDB-M元数据锁(六)

5.4.2 慢路径(slow path) 对于obtrusive锁,以及当前申请unobtrusive锁,而锁对象下已经持有obtrusive锁时,需要进入慢路径申请锁,即先对锁对象下的读写锁加写锁。在当前锁对象首次进入慢路径时,…

iOS 自动打包如何配置配置打包证书和profile provision文件

Jenkins 打包相关问题记录 打包失败截图: 1、证书找不到 NO certificate matching ‘ ‘ for ‘ ’ code singing is required …. D791BAD1-390A-4587-A35C-A743A3D88D52.png 由于更新过证书配置,导致新证书没有导入到Jenkins中。 配置步骤&#xf…

【AI视野·今日Robot 机器人论文速览 第七十六期】Fri, 12 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Fri, 12 Jan 2024 Totally 12 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers Topology-Driven Parallel Trajectory Optimization in Dynamic Environments Authors Oscar de Groot, Laura Ferranti, Dari…

Hadoop3.x基础(1)

来源:B站尚硅谷 这里写目录标题 大数据概论大数据概念大数据特点(4V)大数据应用场景 Hadoop概述Hadoop是什么Hadoop发展历史(了解)Hadoop三大发行版本(了解)Hadoop优势(4高)Hadoop组成&#xf…