SpringBoot整合Prometheus
SpringBoot整合Prometheus
一、需求
实现SpringBoot和Prometheus的一个简单整合。
二、实现步骤
1、引入jar包
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
2、application.prometheus文件配置
1、启用prometheus端点。
2、给每个指标指定一个通用的标签,application见下方的截图。
3、指定管理的端口和路径。
spring.application.name=actuator-prometheus
server.port=10001
# 管理端点的跟路径,默认就是/actuator
management.endpoints.web.base-path=/actuator
# 管理端点的端口
management.server.port=10002
# 暴露出 prometheus 端口
management.endpoints.web.exposure.include=prometheus
# 启用 prometheus 端口,默认就是true
management.metrics.export.prometheus.enabled=true
# 增加每个指标的全局的tag,及给每个指标一个 application的 tag,值是 spring.application.name的值
management.metrics.tags.application=${spring.application.name}
3、查看指标数据
可以看到里面存在一个 process_files_open_files
指标,待会儿集成到prometheus
中,我们在prometheus
中查询一下这个指标,看是否存在。
4、接入到 prometheus 中
1、修改 prometheus.yml 配置文件
scrape_configs:
- job_name: 'spring-boot-actuator-exporter'
# 指定抓取的路径
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['localhost:10002']
labels:
nodename: 'spring-boot-actuator'
2、在 prometheus 中查看指标数据
三、个性化 MeterRegistry
1、增加全局标签
当我们和 prometheus 集成后,默认的 MeterRegistry是 PrometheusMeterRegistry
。
当我们要 个性化 MeterRegistry
时,可以实现MeterRegistryCustomizer
接口。
eg:
1、我们要为所有的指标增加一个 role=admin
的标签。
@Configuration
public class CustomMeterRegistryCustomizer implements MeterRegistryCustomizer<MeterRegistry> {
@Override
public void customize(MeterRegistry registry) {
registry.config().commonTags("role", "master");
}
}
2、对标签、指标名称等进行过滤。
比如:替换标签的值、判断是否需要该指标等等,此处实现只需要jvm开头的指标,其余的指标一律排除。
,需要实现MeterFilter
接口。
@Configuration
public class CustomMeterFilter implements MeterFilter {
/**
* 只需要和jvm相关的指标数据,其余的数据一律拒绝
*/
@Override
public MeterFilterReply accept(Meter.Id id) {
if (id.getName().startsWith("jvm")) {
return MeterFilterReply.ACCEPT;
}
return MeterFilterReply.DENY;
}
}
3、监控业务数据
1、如果我们的监控依赖其它的bean,推荐使用MeterBinder
注册
@Component
public class OrderAmountMeterBinder implements MeterBinder {
@Autowired
private OrderService orderService;
@Override
public void bindTo(@NonNull MeterRegistry registry) {
Gauge.builder("order_amount", orderService, service -> service.retrieveOrderAmount().doubleValue())
// 这个 fen 会接到 order_amount的后面及在 prometheus 中的指标名称为 order_amount_fen
.baseUnit("fen")
.description("获取订单的金额")
.tag("system", "order")
.strongReference(false)
.register(registry);
}
}
2、不依赖其它bean
@Service
public class OrderService {
@Autowired
private MeterRegistry meterRegistry;
@PostConstruct
public void init() {
Executors.newSingleThreadScheduledExecutor()
.scheduleAtFixedRate(this::createOrder, 0, 1, TimeUnit.SECONDS);
}
/**
* 创建订单
*/
public int createOrder() {
Counter.builder("order_counter")
.tag("system", "order")
.baseUnit("total")
.description("订单的总数量")
.register(meterRegistry)
.increment();
return ORDER_CNT.get();
}
}
四、代码路径
https://gitee.com/huan1993/spring-cloud-parent/tree/master/prometheus/actuator-prometheus
五、参考链接
1、https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready-metrics-getting-started[https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready-metrics-getting-started]
2、代码路径-io.micrometer.prometheus.PrometheusNamingConvention#name
3、代码路径-org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter#record
SpringBoot整合Prometheus的更多相关文章
- 【Springboot】实例讲解Springboot整合OpenTracing分布式链路追踪系统(Jaeger和Zipkin)
1 分布式追踪系统 随着大量公司把单体应用重构为微服务,对于运维人员的责任就更加重大了.架构更复杂.应用更多,要从中快速诊断出问题.找到性能瓶颈,并不是一件容易的事.因此,也随着诞生了一系列面向Dev ...
- SpringBoot2.x整合Prometheus+Grafana【附源码+视频】
图文并茂,新手入门教程,建议收藏 SpringBoot2.x整合Prometheus+Grafana[附源码+视频] 附源码+视频 目录 工程简介 简介 Prometheus grafana Spri ...
- spring-boot整合mybatis(1)
sprig-boot是一个微服务架构,加快了spring工程快速开发,以及简便了配置.接下来开始spring-boot与mybatis的整合. 1.创建一个maven工程命名为spring-boot- ...
- SpringBoot整合Mybatis之项目结构、数据源
已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结. 之前在网上找过不少关于springboot的教程,都是一些比 ...
- springboot整合mq接收消息队列
继上篇springboot整合mq发送消息队列 本篇主要在上篇基础上进行activiemq消息队列的接收springboot整合mq发送消息队列 第一步:新建marven项目,配置pom文件 < ...
- springboot整合mybaits注解开发
springboot整合mybaits注解开发时,返回json或者map对象时,如果一个字段的value为空,需要更改springboot的配置文件 mybatis: configuration: c ...
- SpringBoot整合Redis、ApachSolr和SpringSession
SpringBoot整合Redis.ApachSolr和SpringSession 一.简介 SpringBoot自从问世以来,以其方便的配置受到了广大开发者的青睐.它提供了各种starter简化很多 ...
- SpringBoot整合ElasticSearch实现多版本的兼容
前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...
- SpringBoot整合Kafka和Storm
前言 本篇文章主要介绍的是SpringBoot整合kafka和storm以及在这过程遇到的一些问题和解决方案. kafka和storm的相关知识 如果你对kafka和storm熟悉的话,这一段可以直接 ...
随机推荐
- openswan协商流程之(四):main_inI2_outR2()
主模式第四包:main_inI2_outR2 1. 序言 main_inI2_outR2()函数是ISAKMP协商过程中第四包的核心处理函数的入口,同时在此处理流程中已经获取到足够的隧道信息,可以生成 ...
- docker学习笔记(一)--ubunru18.04下面安装docker18.03
我是在本地安装的虚拟机,再搭建的环境,虚拟机的安装可以参考下面的博客: https://blog.csdn.net/u013142781/article/details/50529030 安装好了之后 ...
- 彻底搞明白PHP的中引用的概念
之前我们其实已经有过几篇文章讲过引用方面的问题,这次我们来全面的梳理一下引用在PHP到底是怎么回事,它和C中的指针有什么不同,在使用的时候要注意些什么. 什么是引用? 在 PHP 中引用意味着用不同的 ...
- mysql语句alter添加 字段
alter table ylh_coupon add is_reg int default 0 给数据表 ylh_coupon 添加一个字段 is_reg,,整型,默认值为0
- vue.js 配置axios 用来ajax请求数据
* 用npm 安装 axios 切换到项目的根目录 npm install --save axios vue-axios * 在vue的入口文件./src/main.js 中引入axios, 添加2行 ...
- Jmeter导出测试报告
测试数据概述 jemter导出数据 另存为导出csv文件 命令行导出 测试报告的作用: 反馈结果 复现问题,所以需要写明测试场景.数据
- python+宝塔nginx+uwsgi的搭建方法
第一: 百度搜索宝塔,然后进入root,安装lnmp,根据情况选择选择需的选项进行安装,nginx必须安装. 第二: 进入宝塔,新建网站,网站的目录,先随便指定,绑定好的域名, 进入root,到宝塔网 ...
- HTML 网页开发、CSS 基础语法——十二.CSS选择器
选择器 基础选择器:标签选择器,id选择器,类选择器,通配符选择器 高级选择器:后代选择器,交集选择器,并集选择器 1. 标签选择器: • 优点:可以选中所有的同名标签,设置所有同名标签的公共样式. ...
- 鸿蒙内核源码分析(ELF格式篇) | 应用程序入口并不是main | 百篇博客分析OpenHarmony源码 | v51.04
百篇博客系列篇.本篇为: v51.xx 鸿蒙内核源码分析(ELF格式篇) | 应用程序入口并不是main | 51.c.h.o 加载运行相关篇为: v51.xx 鸿蒙内核源码分析(ELF格式篇) | ...
- 浅谈机(J)惨(C)技巧——从入门到精通(?)
JC总是无聊的机房中有意思的一个瞬间... 比如: 这个杰作由 ZSWBWYX 完成 你认为这只是AK-IOI吗?不!注意用户名...也是此人的杰作. 所以,在险恶的机房里,一定要保护好自己的账号. ...