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熟悉的话,这一段可以直接 ...
随机推荐
- 部署yum仓库以及NFS共享服务
目录: 一.YUM概述 二.准备安装源 三.访问YUM仓库 四.本地YUM仓库 五.YUM工具概述 六.软件包查询.安装.卸载 七.NFS共享 一.YUM概述 YUM(Yellow dog Updat ...
- Spring5(七)——AOP注解
一.AOP注解 1.介绍 上一节介绍了 AspectJ 框架如何实现 AOP,具体的实现方式是通过 xml 来进行配置的.xml 方式思路清晰,便于理解,但是书写过于麻烦.这一节介绍注解的方式来进行 ...
- golang中的闭包_closure
闭包_Closure: 1.一般情况下,第一类对象都是独立的封闭的存在的,独立的封闭的起作用; 2.第一类对象可以被创建; 3.第一类对象可以作为参数传递给其他函数; 4.第一类对象可以赋值给变量实体 ...
- 【原创】自制string类型(已完成)
这篇文章首发于360doc http://www.360doc.com/content/21/0526/17/73755266_979099504.shtml ,其实360doc里面的那个也是我的帐号 ...
- windows日志查看与清理
日志查看 (1) 启动Windows实验台,点击:开始 - 控制面板 - 管理工具 - 事件查看器. (2) 应用程序日志.安全日志.系统日志.DNS日志默认位置:%sys temroot%\syst ...
- charles中Map、Rewrite、Breakpoints的区别
Charles提供了Map功能.Rewrite功能.Breakpoints功能,都可以达到修改服务器返回内容的目的,这三者的差异是: Map Map功能适合长期的将某些请求重定向到另一个网络地址或本地 ...
- git 切换分支
# 查看git源 git remote -v git remote set-url origin http://mingzhanghui@xx.xx.xx.xx:8090/r/ENSO/weba ...
- Python return self
在Python中,return self的作用为: Returning self from a method simply means that your method returns a refer ...
- django2获取url所有路径
根据原文链接:https://segmentfault.com/a/1190000017378464,整理 第一步:先导入项目根的urls.py路径 from ceshiproject import ...
- vm中安装win2012并安装hyper-V不支持嵌套
在虚拟机中安装win2012,并安装hyper-v提示: 无法安装hyper-v:虚拟机监控程序已经在运行 找到虚拟机目录下,用文本编辑器打开该系统的虚拟机配置文件(.vmx后缀),在配置文件末尾增加 ...