基於SpringBoot2.0+ Actuator metrics的監控(基於Oracle JDK9,G1)
引言
SpringBoot2在spring-boot-actuator中引入了micrometer,對1.x的metrics進行了重構,另外支持對接的監控系統也更加豐富(Atlas、Datadog、Ganglia、Graphite、Influx、JMX、NewRelic、Prometheus、SignalFx、StatsD、Wavefront)。本文以Prometheus爲例闡述SpringBoot2.0的監控。php
eg. Prometheus
Maven座標
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
配置信息
management.endpoints.web.exposure.include=*
SpringBoot2.0 Actuator監控指標分析
序號 | 參數 | 參數說明 | 是否監控 | 監控手段 | 重要度 |
---|---|---|---|---|---|
--- | JVM | --- | |||
1 | jvm.memory.max | JVM最大內存 | |||
2 | jvm.memory.committed | JVM可用內存 | 是 | 展現並監控堆內存和Metaspace | 重要 |
3 | jvm.memory.used | JVM已用內存 | 是 | 展現並監控堆內存和Metaspace | 重要 |
4 | jvm.buffer.memory.used | JVM緩衝區已用內存 | |||
5 | jvm.buffer.count | 當前緩衝區數 | |||
6 | jvm.threads.daemon | JVM守護線程數 | 是 | 顯示在監控頁面 | |
7 | jvm.threads.live | JVM當前活躍線程數 | 是 | 顯示在監控頁面;監控達到閾值時報警 | 重要 |
8 | jvm.threads.peak | JVM峯值線程數 | 是 | 顯示在監控頁面 | |
9 | jvm.classes.loaded | 加載classes數 | |||
10 | jvm.classes.unloaded | 未加載的classes數 | |||
11 | jvm.gc.memory.allocated | GC時,年輕代分配的內存空間 | |||
12 | jvm.gc.memory.promoted | GC時,老年代分配的內存空間 | |||
13 | jvm.gc.max.data.size | GC時,老年代的最大內存空間 | |||
14 | jvm.gc.live.data.size | FullGC時,老年代的內存空間 | |||
15 | jvm.gc.pause | GC耗時 | 是 | 顯示在監控頁面 | |
--- | TOMCAT | --- | |||
16 | tomcat.sessions.created | tomcat已建立session數 | |||
17 | tomcat.sessions.expired | tomcat已過時session數 | |||
18 | tomcat.sessions.active.current | tomcat活躍session數 | |||
19 | tomcat.sessions.active.max | tomcat最多活躍session數 | 是 | 顯示在監控頁面,超過閾值可報警或者進行動態擴容 | 重要 |
20 | tomcat.sessions.alive.max.second | tomcat最多活躍session數持續時間 | |||
21 | tomcat.sessions.rejected | 超過session最大配置後,拒絕的session個數 | 是 | 顯示在監控頁面,方便分析問題 | |
22 | tomcat.global.error | 錯誤總數 | 是 | 顯示在監控頁面,方便分析問題 | |
23 | tomcat.global.sent | 發送的字節數 | |||
24 | tomcat.global.request.max | request最長時間 | |||
25 | tomcat.global.request | 全局request次數和時間 | |||
26 | tomcat.global.received | 全局received次數和時間 | |||
27 | tomcat.servlet.request | servlet的請求次數和時間 | |||
28 | tomcat.servlet.error | servlet發生錯誤總數 | |||
29 | tomcat.servlet.request.max | servlet請求最長時間 | |||
30 | tomcat.threads.busy | tomcat繁忙線程 | 是 | 顯示在監控頁面,據此檢查是否有線程夯住 | |
31 | tomcat.threads.current | tomcat當前線程數(包括守護線程) | 是 | 顯示在監控頁面 | 重要 |
32 | tomcat.threads.config.max | tomcat配置的線程最大數 | 是 | 顯示在監控頁面 | 重要 |
33 | tomcat.cache.access | tomcat讀取緩存次數 | |||
34 | tomcat.cache.hit | tomcat緩存命中次數 | |||
--- | CPU... | --- | |||
35 | system.cpu.count | CPU數量 | |||
36 | system.load.average.1m | load average | 是 | 超過閾值報警 | 重要 |
37 | system.cpu.usage | 系統CPU使用率 | |||
38 | process.cpu.usage | 當前進程CPU使用率 | 是 | 超過閾值報警 | |
39 | http.server.requests | http請求調用狀況 | 是 | 顯示10個請求量最大,耗時最長的URL;統計非200的請求量 | 重要 |
40 | process.uptime | 應用已運行時間 | 是 | 顯示在監控頁面 | |
41 | process.files.max | 容許最大句柄數 | 是 | 配合當前打開句柄數使用 | |
42 | process.start.time | 應用啓動時間點 | 是 | 顯示在監控頁面 | |
43 | process.files.open | 當前打開句柄數 | 是 | 監控文件句柄使用率,超過閾值後報警 | 重要 |
監控dashboard可以使用grafana。web