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

spring maven项目 实时接口请求次数及时间发送到grafana监控_亲测成功

spring maven项目 实时接口请求次数及时间发送到grafana监控_亲测成功

说明: spring项目使用aop方式拿到请求接口uri,算出从请求到响应的耗时, 然后使用statsd包发送udp数据给grafana去展示.

完全不影响代码性能和稳定性,因为使用udp协议发送,就算grafana那边挂了,也不影响项目正常运行

UDP简单介绍

UDP提供不可靠服务

UDP是一个非连接的协议,传输数据之前源端和终端不建立连接, 当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。 在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、 计算机的能力和传输带宽的限制; 在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

maven项目pom.xml引入依赖包

		<dependency><groupId>com.timgroup</groupId><artifactId>java-statsd-client</artifactId><version>3.1.0</version></dependency>    

配置监控udp地址

statsd:prefix: devhost: 192.168.1.53port: 8125

初始化配置

package com.beyond.app.config;import com.timgroup.statsd.NonBlockingStatsDClient;
import com.timgroup.statsd.StatsDClient;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class StatsdConfig {private static final Logger logger = LogManager.getLogger(StatsdConfig.class);@Value("${spring.statsd.prefix}")private String prefix;@Value("${spring.statsd.host}")private String host;@Value("${spring.statsd.port}")private int port;@Bean(name = "statsDClient")public StatsDClient statsDClient() {logger.info("StatsdConfig Configuring Statsd {}-{}:{}", prefix, host, port);return new NonBlockingStatsDClient(prefix, host, port);}}

定义service

package com.beyond.app.service;import com.timgroup.statsd.StatsDClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;/*** Created by liang.*/
@Service
public class StatsdService {@Autowiredprivate StatsDClient statsDClient;@Asyncpublic void statsd (String uri, long time) {statsDClient.time("manage." + uri, time);//dev.manage.uri:10|ms//dev开发环境, manage功能, uri接口, 10ms接口耗时}}

spring aop环绕通知发送接口数据

package com.beyond.app.aop;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.PropertyFilter;
import com.beyond.app.service.StatsdService;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;/*** Created by liang.*/@Component
@Aspect
public class LogAspect {private static final Logger logger = LoggerFactory.getLogger(LogAspect.class);@Autowiredprivate StatsdService statsdService;/*** 定义一个切入点.* 解释下:** ~ 第一个 * 代表任意修饰符及任意返回值.* ~ 第二个 * 定义在web包或者子包* ~ 第三个 * 任意方法* ~ .. 匹配任意数量的参数.*/@Pointcut("execution(* com.beyond.app.api..*.*(..))")public void logPointCut(){}@Around("logPointCut()")public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable{long start = System.currentTimeMillis();ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();long end = System.currentTimeMillis();try {Object result = joinPoint.proceed();end = System.currentTimeMillis();logger.info("+++++around " + joinPoint + "\tUse time : " + (end - start) + " ms!");return result;} catch (Throwable e) {end = System.currentTimeMillis();logger.error("+++++around " + joinPoint + "\tUse time : " + (end - start) + " ms with exception : " + e.getMessage());throw e;} finally {statsdService.statsd(request.getRequestURI(), end - start);}}
}

相关文章:

spring maven项目 实时接口请求次数及时间发送到grafana监控_亲测成功

spring maven项目 实时接口请求次数及时间发送到grafana监控_亲测成功 说明: spring项目使用aop方式拿到请求接口uri,算出从请求到响应的耗时, 然后使用statsd包发送udp数据给grafana去展示. 完全不影响代码性能和稳定性,因为使用udp协议发送,就算grafana那边挂了,也不影响项…...

银行数字人民币系统应用架构设计

2019年10月&#xff0c;01区块链联合数字资产研究院发布了《人民币3.0&#xff1a;中国央行数字货币运行框架与技术解析》&#xff0c;从数字货币界定和人民币发展历程出发&#xff0c;区分了央行数字货币与比特币、移动支付等的区别&#xff0c;全面介绍了央行数字货币的发展历…...

流畅的 Python 第二版(GPT 重译)(三)

第五章&#xff1a;数据类构建器 数据类就像孩子一样。它们作为一个起点是可以的&#xff0c;但要作为一个成熟的对象参与&#xff0c;它们需要承担一些责任。 马丁福勒和肯特贝克 Python 提供了几种构建简单类的方法&#xff0c;这些类只是一组字段&#xff0c;几乎没有额外功…...

06-验证浮点数输入

鉴于shell脚本的限制和本事&#xff0c;浮点数&#xff08;或“实数”&#xff09;的验证过程乍一看似乎让人望而生畏&#xff0c;不过考虑到浮点数只不过是由小数点分隔的两个整数&#xff0c;再配合能够在脚本中引用其他脚本的能力&#xff08;validint&#xff09;&#xff…...

shell实现查询进程号并批量kill(脚本)

问题或需求描述 在shell中&#xff0c;如果你想通过命令行查询出一系列匹配某个关键词的进程&#xff0c;并使用xargs命令批量结束这些进程&#xff0c;可以按照以下步骤操作&#xff1a; # 查询并提取进程号 pgrep -f "关键词" | xargs kill# 或者&#xff0c;如果…...

【软考】蠕虫病毒

目录 一、概念1.1 说明 二、示例2.1 震网2.2 熊猫烧香2.2 红色代码2.3 爱虫病毒 一、概念 1.1 说明 1.一段可以借助程序自行传播的程序或代码 二、示例 2.1 震网 1.Stuxnet 2.利用系统漏洞破坏工业基础设施&#xff0c;攻击工业控制系统 2.2 熊猫烧香 1.是一种经过多次变种…...

大模型知识点汇总——分布式训练

PS&#xff1a;本篇只在宏观上介绍相关概念和技术&#xff0c;不做数学推导和过于细节介绍&#xff0c;旨在快速有一个宏观认知&#xff0c;不拘泥在细节上&#xff0c;导致很混乱。 涉及技术名词 分布式框架等涉及的技术名词很多&#xff0c;很容易让人眼花缭乱&#xff0c;…...

java之网络编程

网络编程之TCP/IP协议 网络编程分为两个不同的层次&#xff1a;一是基于Socket的低层次网络编程&#xff0c;二是基于URL的高层次网络编程 高低层次就是通信协议的高低层次&#xff0c;Socket采用TCP、UDP等协议&#xff0c;这些协议属于低层次的通信协议&#xff1b;URL采用H…...

【Linux】Centos7安装redis

目录 下载安装包安装1.解压2.环境安装3.查看redis的安装路径4.将之前redis的配置文件&#xff0c;复制到安装路径下&#xff08;新建一个文件夹并复制&#xff09;5.redis 设置默认后台启动&#xff0c;修改配置文件6.启动redis服务默认启动通过配置文件启动查看进程 7.开放637…...

蓝桥杯(2):python基础算法【上】

时间复杂度、枚举、模拟、递归、进制转换、前缀和、差分、离散化 1 时间复杂度 重要是看循环&#xff0c;一共运行了几次 1.1 简单代码看循环 #时间复杂度1 n int(input()) for i in range(1,n1):for j in range(0,i):pass ###时间复杂度&#xff1a;123....nn(1n)/2 所以…...

一个js正则,轻松去除字符串里的\n\t空格

推荐一款AI网站&#xff0c;免费使用GPT3.5&#xff0c;戳此入&#x1f447;&#xff1a;AI写作 在Node.js中&#xff0c;如果你想要从字符串中全局去除换行符(\n)、制表符(\t)和空格&#xff0c;你可以使用正则表达式与String.prototype.replace()方法结合使用。下面是一个简…...

政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(四)—— 过拟合和欠拟合

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: Tensorflow与Keras实战演绎 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 通过增加容量或提前停止来提高性能。 在深度学习中&…...

RuoYi-Vue若依框架-代码生成器的使用

代码生成器 导入表 在系统工具内找到代码生成&#xff0c;点击导入&#xff0c;会显示数据库内未被导入的数据库表单&#xff0c;选择自己需要生成代码的表&#xff0c;友情提醒&#xff0c;第一次使用最好先导入一张表进行试水~ 预览 操作成功后可以点击预览查看效果&…...

AI PPT生成工具 V1.0.0

AI PPT是一款高效快速的PPT生成工具&#xff0c;能够一键生成符合相关主题的PPT文件&#xff0c;大大提高工作效率。生成的PPT内容专业、细致、实用。 软件特点 免费无广告&#xff0c;简单易用&#xff0c;快速高效&#xff0c;提高工作效率 一键生成相关主题的标题、大纲、…...

进程和线程,线程实现的几种基本方法

什么是进程&#xff1f; 我们这里学习进程是为了后面的线程做铺垫的。 一个程序运行起来&#xff0c;在操作系统中&#xff0c;就会出现对应的进程。简单的来说&#xff0c;一个进程就是跑起来的应用程序。 在电脑上我们可以通过任务管理器可以看到&#xff0c;跑起来的应用程…...

【PyTorch】解决PyTorch安装中torch.cuda.is_available()返回False的问题

最近在安装PyTorch时遇到torch.cuda.is_available() False的问题&#xff0c;特此记录下解决方法&#xff0c;以帮助其他遇到相同问题的人。 问题描述 Ubuntu 20.04&#xff0c;3060 Laptop&#xff0c;安装了CUDA 11.4&#xff0c;在Anaconda下新建了Python 3.8的环境&…...

95% 的公司面临 API 安全问题

API 对企业安全发挥着关键作用&#xff0c;但绝大多数企业都为此遭受日益严重的安全风险。据安全公司 Fastly最近做的一项调查显示&#xff0c;84% 的受访企业缺乏足够的API安全措施&#xff0c;95%的企业在过去1年中遇到过 API 安全问题。 此外&#xff0c;79%的受访企业出于A…...

mysql的基本知识点-排序和分组

分组&#xff08;GROUP BY&#xff09; GROUP BY 语句用于结合聚合函数&#xff0c;根据一个或多个列对结果集进行分组。例如&#xff0c;假设你有一个包含销售数据的表&#xff0c;并且你想按产品类别计算总销售额。你可以使用 GROUP BY 和 SUM() 函数来实现这一点。 SELECT…...

使用uniapp 的 plus.sqlite 操作本地数据库报错:::table xxx has no column named xxxx

背景&#xff1a; 1、使用uniapp 的 plus.sqlite 进行APP本地数据库操作 2、SQLite 模块用于操作本地数据库文件&#xff0c;可实现数据库文件的创建&#xff0c;执行SQL语句等功能。 遇到&#xff1a;在之前创建的表上进行新增字段的操作时候&#xff0c;出现问题&#xff1a…...

第十五届蓝桥杯模拟赛 第三期 (C++)

第二次做蓝桥模拟赛的博客记录&#xff0c;可能有很多不足的地方&#xff0c;如果大佬有更好的思路或者本文中出现错误&#xff0c;欢迎分享思路或者提出意见 题目A 请问 2023 有多少个约数&#xff1f;即有多少个正整数&#xff0c;使得 2023 是这个正整数的整数倍。 答案&…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...

面试高频问题

文章目录 &#x1f680; 消息队列核心技术揭秘&#xff1a;从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"&#xff1f;性能背后的秘密1.1 顺序写入与零拷贝&#xff1a;性能的双引擎1.2 分区并行&#xff1a;数据的"八车道高速公路"1.3 页缓存与批量处理…...

leetcode_69.x的平方根

题目如下 &#xff1a; 看到题 &#xff0c;我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历&#xff0c;我们是整数的平方根&#xff0c;所以我们分两…...

32位寻址与64位寻址

32位寻址与64位寻址 32位寻址是什么&#xff1f; 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元&#xff08;地址&#xff09;&#xff0c;其核心含义与能力如下&#xff1a; 1. 核心定义 地址位宽&#xff1a;CPU或内存控制器用32位…...

深度解析云存储:概念、架构与应用实践

在数据爆炸式增长的时代&#xff0c;传统本地存储因容量限制、管理复杂等问题&#xff0c;已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性&#xff0c;成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理&#xff0c;云存储正重塑数据存储与…...

python基础语法Ⅰ

python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器&#xff0c;来进行一些算术…...