Spring Boot 应用基于 Prometheus 自定义指标开发

创建项目

先正常创建一个 spring boot 项目,这里需要说明的一点,没有使用 spring-boot-starter-parent, 而是使用 spring-boot-dependencies 在 dependencyManagement 中引入。

启用 Actuator 模块

Spring Boot 本身内置了生产级别的属性特征,包括监控和管理应用状态。可以通过 Http API 或者 JMX 获取到这些状态。首先启用这个模块,引入依赖 spring-boot-starter-actuator 即可。

actuator 默认开放了 info, health 的 http 接口,这样通过 http://127.0.0.1:8080/actuator/info, http://127.0.0.1:8080/actuator/health 就能访问到相关信息。

actuator 有 prometheus 接入点,需要显示的打开。actuator 把统计的指标暴露给 Prometheus Server, 需要引入 micrometer-registry-prometheus, 在 pom.xml 中添加

在 application.properties 添加以下内容, 我们把 endpoint 默认关闭,只打开我们需要的。 通过 management.endpoints.web.exposure.include 把 http 接入点打开。

自定义指标开发

prometheus 提供四种指标类型, 文档参考: https://prometheus.io/docs/concepts/metric_types/

可以通过自定义 bean, 把 MeterRegistry 注入进来,指标的定义与统计可以通过 MeterRegistry 来做。

定义 /metric 接口来模拟服务请求。在 Controller 里可以把 MeterService 注入进来。具体代码如下

countMeter 定义了name 和 tags, name 就是指标名称, tags 相当于 prometheus 中的 label。这里记录了请求的数量。

通过 访问 http://127.0.0.1:8080/metric , 然后观察 http://127.0.0.1:8080/actuator/prometheus, 可以看到自定义的指标统计,可以找到类似的记录。看到这里是不是非常简单。

histogram 与 summary 类似,一般用于服务时长的统计。histogram 提供不同的 bucket, 数据可以落到不同的 bucket 中。这样可以统计数据的分布情况。summary 可以根据百分比进行数据划分,很容易得出类似 99% 请求完成的时间在什么数值之下。

首先可以创建一个 Histogram 的 Timer ,MeterService 的定义如下, 其中 slos 是对应的 bucket 列表。

具体的使用实例如下:

在接口的入口处,可以生成一个计时器,服务结束时,时间间隔写入到 timer 即可。样例如下

查看 prometheus 接口,可以看到类似的数据统计:

summary 使用与 histogram 类型, 生成方式稍有不同

最终可以看到,下面的统计结果

指标接入 Prometheus Server

prometheus.yml 增加 job 配置, 抓取的路径为:/actuator/prometheus。启动 prometheus : ./prometheus –config.file=prometheus.yml 。

通过 targets 页面,就能看到 spring boot 应用的接入状态。

image-20200809003515129

总结

本文介绍了如何使用 Prometheus Server 收集 Spring Boot 应用的监控数据,以及如何开发自定义的指标数据。

具体代码参考这里

此条目发表在JAVA分类目录,贴了, 标签。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。