SpringBoot整合Prometheus


SpringBoot整合Prometheus
一、需求
二、實現步驟
1、引入jar包
2、application.prometheus文件配置
3、查看指標數據
4、接入到 prometheus 中
1、修改 prometheus.yml 配置文件
2、在 prometheus 中查看指標數據
三、個性化 MeterRegistry
1、增加全局標簽
2、對標簽、指標名稱等進行過濾。
3、監控業務數據
1、如果我們的監控依賴其它的bean,推薦使用`MeterBinder`注冊
2、不依賴其它bean
四、代碼路徑
五、參考鏈接
一、需求
實現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>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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'
1
2
3
4
5
6
7
8
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");
}
}
1
2
3
4
5
6
7
8


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;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13


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);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17


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();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26


四、代碼路徑
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
————————————————
版權聲明:本文為CSDN博主「huan_1993」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/fu_huo_1993/article/details/114841836


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM