SpringBoot 实现自定义指标监控

一、添加业务监控指标

在 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 模拟下单。多访问几次,以便看到更明显的增长效果。 

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

 

五、总结

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

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

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python判断语句——if语句的基本格式

一、引言 在Python编程语言中,if语句是一种基本的控制流语句,用于根据特定条件执行不同的代码块。它的基本格式相对简单,使得Python代码清晰、易于阅读。下面,我们将深入探讨if语句的基本格式、用法和注意事项。 二、if语句的…

如何搭建Nextcloud云存储网盘并实现无公网ip访问本地文件【内网穿透】

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

为什么说2023年是AI元年

前言 思考者~ 2023年被称为AI元年,主要是因为在这一年中,人工智能技术在各个领域取得了突破性的进展和应用,这些技术的广泛应用深刻地影响了人们的生活和工作方式,也预示着未来AI技术的更大潜力和发展空间。 首先,…

Delphi.cz采访​Embarcadero​捷克共和国办事处经理:理查德·库巴特 - 第一部分

Embarcadero捷克办事处主任理查德库巴特(Richard Kubt,55 岁)接受了我的采访。 Radek Červinka (RČ):库巴特先生您好,感谢您抽出时间访问 delphi.cz。 一开始:我在某处听说您是一名程序员,从…

Idea设置代理后无法clone git项目

背景 对于我们程序员来说,经常上github找项目、找资料是必不可少的,但是一些原因,我们访问的时候速度特别的慢,需要有个代理,才能正常的访问。 今天碰到个问题,使用idea工具 clone项目,速度特…

Windows系统本地安装Everything搜索神器并结合内网穿透实现远程访问

文章目录 前言1.软件安装完成后,打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前言 要搭建一个在线资料库,我们需要两个软件的支持,分别是cpolar(用于搭建内网穿透数据隧道…

洛谷 P1433 吃奶酪 状态压缩dp

文章目录 题目链接题目描述解题思路代码实现总结 题目链接 链接: P1433 吃奶酪 题目描述 解题思路 首先,这个程序是用来解决洛谷上题目编号为 P1433 的问题——吃奶酪,使用了状压DP算法。 整体算法的思路是利用动态规划,通过状态压缩来解…

树莓派部署Nginx服务结合内网穿透实现远程访问本地站点

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx(发音为“engine-x”)可以将您的树莓派变成一个强大的 Web 服务器,可以用于托管网站或 Web 应用程序。相比其他 Web 服务器,Ngi…

TF卡在心电监测仪中的多功能应用

TF卡在心电监测仪中的应用 TF卡(Micro SD卡)在心电仪器上的应用主要是用作存储设备,用于保存心电信号数据和其他相关信息。以下是TF卡在心电仪器上的一些常见应用: 1、数据存储: TF卡用于存储从心电仪器采集到的心电信…

SRC实战 | 后台登录绕过分享

本文由掌控安全学院 - 小袅投稿 一.挖掘过程简述: 通过收集到的账号密码进入后进行测试无果,查看登录返回包后修改role_id参数进入管理员后台,后台存在文件上传功能且对文件后缀和内容有检查,后缀检测时前端进行的,可…

c#之构值类型和引用类型

值类型:(整数/bool/struct/char/小数) 引用类型:(string/ 数组 / 自定义的类 / 内置的类) 值类型只需要一段单独的内存,用于存储实际的数据 引用类型需要两段内存(第一段存储实际的数据,他总是位于 堆中第二段是一个引用,指向数据在堆中的存放位置) 当使用引用类型赋值的时…

【Python自动化测试】如何才能让用例自动运行完之后,生成一张直观可看易懂的测试报告呢?

小编使用的是unittest的一个扩展HTMLTestRunner 环境准备 使用之前,我们需要下载HTMLTestRunner.py文件 点击HTMLTestRunner后进入的是一个写满代码的网页,小编推荐操作:右键 --> 另存为,文件名称千万不要改 python3使用上述…

LeetCode.209. 长度最小的子数组

题目 题目链接 分析 本题的题意就是让我们找最短的子数组和 > target 的子数组的长度。 首先最能想到的就是暴力方法,外层循环以数组每一个元素都作为起点,内存循环累加元素,当大于等于 target 的时候记录当前元素个数,更新…

.net winform 使用NModbus4建立 modbus tcp通讯

1、使用nuget引入NModbus4。 2、编写TCP访问modbus的方法 public void StartTcpClient(string ipstr,string portstr,ushort adress, ushort readLenth) { try { IPAddress myIP IPAddress.Parse(ipstr); in…

GM/T 0018-2012 设备接口描述笔记

GM/T 0018-2012 设备接口描述笔记 文章目录 GM/T 0018-2012 设备接口描述笔记6. 设备接口描述6.1 密码设备应用接口在公钥密码基础设施应用技术体系框架中的位置6.2 设备管理类函数6.3 密钥管理类函数6.4 非对称算法运算类函数6.5 对称算法运算类函数6.6 杂凑运算类函数6.7 用户…

单调队列优化DP模型整理

135. 最大子序和(活动 - AcWing) 找一个长度不超过m的连续子序列,但是并未指定这个子序列的长度,所以长度就有很多种选择,要获取任意一段长度的序列的区间和,那么显然要用到前缀和。然后我们来考虑&#xf…

leetcode hot100跳跃游戏

在本题中,我们要模仿整个跳跃过程,当前位置数组元素为nums[i],那我们就最大能往后跳nums[i]步,可以小于等于这个数。如果我们直接遍历数组,那么我们需要每一步都控制跳跃0——nums[i]步,这样不可能实现。 …

ITSS证书:点亮职业发展的明灯

📚ITSS是中国电子技术标准化研究院推出的权威认证,涵盖IT服务工程师和IT服务经理的系列培训,旨在培养具备专业知识和技能的IT服务人才。 🌟证书优势: 1️⃣提升问题解决能力:通过学习ITSS方法论和实践经验&…

【网络】WireShark过滤 | WireShark实现TCP三次握手和四次挥手

目录 一、开启WireShark的大门 1.1 WireShark简介 1.2 常用的Wireshark过滤方式 二、如何抓包搜索关键字 2.1 协议过滤 2.2 IP过滤 ​编辑 2.3 过滤端口 2.4 过滤MAC地址 2.5 过滤包长度 2.6 HTTP模式过滤 三、ARP协议分析 四、WireShark之ICMP协议 五、TCP三次握…

Python笔记15-实战小游戏飞机大战(中)

文章目录 创建第一个敌机创建一群敌机创建多行敌机让敌机移动射杀敌机生成新的敌机群结束游戏有敌机到达屏幕底端游戏结束 在上一篇基础上继续 本示例源码地址 点击下载 创建第一个敌机 在屏幕上放置外星人与放置飞船类似。每个外星人的行为都由Alien 类控制,我们…