本文介紹如何使用Prometheus監控MicroMeter的Java應用。
前提條件
已建立Java應用。
步驟一:將MicroMeter加入Java應用
這裡以目前最常用的Spring Boot 2.x應用為例介紹。
-
將Spring Boot Actuator加入Java應用 -> 在Project的pom.xml中添加Actuator依賴。
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>x.y.z</version> </dependency>說明最新版本可到aliyun倉庫尋找。
-
配置Acuator,在application.properties中添加相關配置暴露prometheus監測資料連接埠和範圍。
management.server.port=8080 management.endpoints.web.exposure.include=xxx, prometheus -
在Project的pom.xml中添加MicroMeter依賴。
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>x.y.z</version> </dependency>說明最新版本可到aliyun倉庫尋找。
-
在Project的pom.xml中添加MicroMeter JVM Extras依賴。
<dependency> <groupId>io.github.mweirauch</groupId> <artifactId>micrometer-jvm-extras</artifactId> <version>0.2.2</version> </dependency>說明最新版本可到aliyun倉庫尋找。
-
配置MicroMeter JVM Extras,增加以下2個Spring Bean定義,以便暴露記憶體和線程相關指標。
/* With Spring */ @Bean public MeterBinder processMemoryMetrics() { return new ProcessMemoryMetrics(); } @Bean public MeterBinder processThreadMetrics() { return new ProcessThreadMetrics(); } -
將Java應用部署到Container Service中ECS。
根據業務情境,將Java業務應用部署到Container Service或ECS上。部署成功後,訪問應用監聽地址
http://localhost:8080/actuator/prometheus(其中8080連接埠是您在application.properties中配置中指定的,根據實際連接埠值,修改此URL中的連接埠即可),驗證metrics暴露正確。訪問成功後,頁面將返回類似如下的 Prometheus 格式指標資料:
# HELP jvm_memory_used_bytes The amount of used memory # TYPE jvm_memory_used_bytes gauge jvm_memory_used_bytes{area="heap",id="G1 Survivor Space",} 2964360.0 jvm_memory_used_bytes{area="heap",id="G1 Old Gen",} 1.285324E7 jvm_memory_used_bytes{area="nonheap",id="Metaspace",} 3.6128128E7 jvm_memory_used_bytes{area="nonheap",id="CodeCache",} 9673088.0 jvm_memory_used_bytes{area="heap",id="G1 Eden Space",} 6.7108864E7 jvm_memory_used_bytes{area="nonheap",id="Compressed Class Space",} 4999168.0 # HELP jvm_threads_live_threads The current number of live threads including both daemon and non-daemon threads # TYPE jvm_threads_live_threads gauge jvm_threads_live_threads 28.0 # HELP jvm_memory_committed_bytes The amount of memory in bytes that is committed for the Java virtual machine to use # TYPE jvm_memory_committed_bytes gauge jvm_memory_committed_bytes{area="heap",id="G1 Survivor Space",} 4194304.0 jvm_memory_committed_bytes{area="heap",id="G1 Old Gen",} 5.8720256E7 jvm_memory_committed_bytes{area="nonheap",id="Metaspace",} 3.6569088E7 jvm_memory_committed_bytes{area="nonheap",id="CodeCache",} 1.0682368E7 jvm_memory_committed_bytes{area="heap",id="G1 Eden Space",} 9.646899E7 jvm_memory_committed_bytes{area="nonheap",id="Compressed Class Space",} 5177344.0 # HELP executor_pool_max_threads The maximum allowed number of threads in the pool # TYPE executor_pool_max_threads gauge executor_pool_max_threads{name="applicationTaskExecutor",} 2.147483647E9 ... # TYPE jvm_buffer_count_buffers gauge jvm_buffer_count_buffers{id="mapped - 'non-volatile memory'",} 0.0 jvm_buffer_count_buffers{id="mapped",} 0.0 jvm_buffer_count_buffers{id="direct",} 7.0 # HELP jvm_buffer_total_capacity_bytes An estimate of the total capacity of the buffers in this pool # TYPE jvm_buffer_total_capacity_bytes gauge jvm_buffer_total_capacity_bytes{id="mapped - 'non-volatile memory'",} 0.0 jvm_buffer_total_capacity_bytes{id="mapped",} 0.0 jvm_buffer_total_capacity_bytes{id="direct",} 57344.0 # HELP jvm_threads_peak_threads The peak live thread count since the Java virtual machine started or peak was reset # TYPE jvm_threads_peak_threads gauge jvm_threads_peak_threads 30.0 # HELP jvm_threads_states_threads The current number of threads # TYPE jvm_threads_states_threads gauge jvm_threads_states_threads{state="runnable",} 11.0 jvm_threads_states_threads{state="blocked",} 0.0
步驟二:接入 MicroMeter
-
在左側導航,選擇接入中心,然後在搜尋方塊中輸入並單擊MicroMeter。
-
在MicroMeter面板的開始接入頁簽選擇所屬環境類型完成接入,然後單擊確定。
參數
說明
選擇所屬環境類型
可以接入以下兩種服務環境:
-
Container Service環境
-
ECS(VPC)
選擇叢集
選擇目的地組群。
Pod 標籤
部署 MicroMeter 服務 Pod 的標籤(建議使用有特定標識的標籤)
服務連接埠
Java應用服務的連接埠,預設連接埠號碼會自動填滿。
Metrics 採集路徑
MicroMeter 指標透出路徑,預設路徑會自動填滿。
使用 HTTPS 採集
預設使用 HTTP 協議採集,如果服務支援 HTTPS 協議,且希望通過 HTTPS 協議來採集,則可以開啟此開關。
Metric 採集間隔(單位/秒)
可觀測監控 Prometheus 版採集指標資料的時間間隔,預設30秒。
-
步驟三:查看 MicroMeter 大盤資料
-
在左側導覽列,單擊接入管理。在接入管理頁面的已接入環境頁簽中,選擇目標環境,在目標環境列表中,單擊目標環境名稱進入容器環境詳情頁面。
-
在組件管理頁簽下的組件類型地區,單擊MicroMeter,然後單擊大盤,即可查看所有的大盤名稱。
大盤列表中顯示 JVM MicroMeter 大盤,標籤為 java、jvm、micrometer。
-
單擊目標大盤名稱,查看對應的Grafana大盤。
Grafana 大盤頁面顯示 JVM MicroMeter 監控面板。頁面頂部提供 job、Instance 下拉篩選框及 Restart Detection 開關。Quick Facts 地區包含 Uptime 和 Start time 指標,I/O Overview 地區包含 Rate 和 Errors 圖表。選擇目標執行個體後即可查看對應的 JVM 監控資料。
步驟四:配置 MicroMeter 監控警示
-
在組件管理頁簽下的組件類型地區,單擊MicroMeter,然後單擊警示規則,即可查看預設建立的警示規則。
預設建立的警示規則包括 JVM CPU使用率警示、JVM記憶體使用量率警示、JVM重啟次數警示、logback日誌錯誤數警示、MajorGC耗時比例警示,均為 P2 層級,狀態為運行中。
-
您還可以根據業務需求新增警示規則,建立Prometheus警示規則的具體操作,請參見建立Prometheus警示規則。