欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

通過(guò)prometheus監(jiān)控springboot程序運(yùn)行狀態(tài)的操作流程

 更新時(shí)間:2025年02月09日 08:34:22   作者:景天科技苑  
jmx_exporter用于從Java應(yīng)用程序中提取JMX指標(biāo),適用于SpringBoot應(yīng)用,通過(guò)下載jar包和配置文件,可以抓取JVM基礎(chǔ)指標(biāo),要獲取應(yīng)用級(jí)別指標(biāo),需要集成Prometheus客戶端庫(kù)并自定義指標(biāo),本文給大家介紹了如何通過(guò)prometheus監(jiān)控springboot程序運(yùn)行狀態(tài)

jmx_exporter 主要用于從 Java 應(yīng)用程序中提取 JMX 指標(biāo),通常包括 JVM級(jí)別的信息,如內(nèi)存使用情況、線程狀態(tài)、垃圾回收次數(shù)等。

對(duì)于傳統(tǒng)的SpringBoot應(yīng)用,由于它默認(rèn)沒(méi)有內(nèi)置 Prometheus 監(jiān)控的指標(biāo),因此使用 jmx_exporter來(lái)抓取基礎(chǔ)的JVM相關(guān)指標(biāo)。

如果想要獲取更細(xì)粒度的應(yīng)用級(jí)別的業(yè)務(wù)指標(biāo),例如 HTTP 請(qǐng)求數(shù)、處理時(shí)間或業(yè)務(wù)操作的計(jì)數(shù),則需要在應(yīng)用中集成 Prometheus 客戶端庫(kù),并自定義相應(yīng)的指標(biāo)。

1、下載jmx-exporter

1. 訪問(wèn)github下載

下載地址:https://github.com/prometheus/jmx_exporter

在這里插入圖片描述

在release里面下載jar包即可,如下是最新版本

在這里插入圖片描述

我們使用0.20.0版本

在這里插入圖片描述

創(chuàng)建個(gè)目錄

mkdir /etc/jmx_exporter

將下載好的jar包上傳上來(lái)

在這里插入圖片描述

2. 準(zhǔn)備config.yml配置文件

規(guī)則文件可以定義要暴露哪些指標(biāo)給prometheus

[root@jingtian03 jmx_exporter ]#vim config.yaml
rules:
  - pattern: ".*"

在這里插入圖片描述

2、運(yùn)行SpringBoot應(yīng)用

1. 安裝java基礎(chǔ)環(huán)境

注意,下載的java版本和maven版本要對(duì)應(yīng),并且spring boot程序的版本也要對(duì)應(yīng)

yum install java-17-openjdk maven-openjdk17 -y

替換下maven的配置文件,連到阿里云,編譯項(xiàng)目會(huì)快一些

git clone https://github.com/littlefun91/mavendata.git
cd mavendata/
cp settings.xml /etc/maven/

在這里插入圖片描述

在這里插入圖片描述

2. 下載java應(yīng)用然后進(jìn)行編譯

如果自己有,也可以用自己的java應(yīng)用測(cè)試

git clone https://github.com/littlefun91/springbootdemo.git

解壓,打包

tar xf springboot-devops-myapp-java11-jar.tar.gz
cd springboot-devops-demo-jar-java17/
mvn package

在這里插入圖片描述

編譯成功標(biāo)志

在這里插入圖片描述

編譯好之后會(huì)生成一個(gè)target目錄

里面有生成的jar包文件

在這里插入圖片描述

3. 運(yùn)行java應(yīng)用,并加載jmx監(jiān)控,監(jiān)聽(tīng)12345端口

<path_to_jmx_exporter.jar>=<exporter_port>:<path_to_config.yaml>

因此,工作中,我們?nèi)绻枰O(jiān)控java程序,則在java運(yùn)行時(shí)加上jmx監(jiān)控端口即可暴露出metrics

nohup java \
 -javaagent:/etc/jmx_exporter/jmx_prometheus_javaagent-0.20.0.jar=12345:/etc/jmx_exporter/config.yaml \
 -jar -Xms50m -Xmx50m target/jingtian-jar-1.0.0.jar \
 --server.port=8081 &>/var/log/springboot.log &

4. 檢查對(duì)應(yīng)的端口是否正常

在這里插入圖片描述

查看metrics

在這里插入圖片描述

3、配置prometheus

1)修改prometheus配置

vim /etc/prometheus/prometheus.yml
  - job_name: "jmx_exporter"
    static_configs:
      - targets: ["jingtian03:12345"]

2)重新加載Prometheus配置文件

curl -X POST http://localhost:9090/-/reload

3)檢查Prometheus的Status->Targets頁(yè)面,驗(yàn)證 jmx_exporter 是否已經(jīng)成功納入監(jiān)控中

在這里插入圖片描述

4、JVM常用指標(biāo)與示例 1)JVM內(nèi)存使用相關(guān)指標(biāo)(Tomcat也有這些指標(biāo))

初始堆內(nèi)存和最大堆內(nèi)存都是啟動(dòng)java程序的時(shí)候設(shè)置的

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

注意:最新版的jmx中的指標(biāo)對(duì)應(yīng)的是
jvm_memory_init_bytes{area=“heap”}
jvm_memory_used_bytes{area=“heap”}
jvm_memory_max_bytes{area=“heap”}

area=“heap” 為堆內(nèi)存
area=“nonheap” 為非堆內(nèi)存
我們主要看堆內(nèi)存

在這里插入圖片描述

在這里插入圖片描述

案例1:JVM堆內(nèi)存使用率。計(jì)算公式:已用堆內(nèi)存 / 總的堆內(nèi)存 * 100

jvm_memory_used_bytes{<!--{C}%3C!%2D%2D%20%2D%2D%3E-->area="heap"} / jvm_memory_max_bytes{<!--{C}%3C!%2D%2D%20%2D%2D%3E-->area="heap"} *100

在這里插入圖片描述

案例2:計(jì)算JVM,新生代和老年代,每次GC所需時(shí)間,因?yàn)檫@兩個(gè)指標(biāo)是不斷累積的,因此計(jì)算公式:rate(JVMGC花費(fèi)總時(shí)間[1m]) / rate(JVMGC總次數(shù)[1m])
java采用分代回收,分為年輕代、老年代、永久代。年輕代又分為E區(qū)、S1區(qū)、S2區(qū)。
到j(luò)dk1.8,永久代被元空間取代了。
年輕代都使用復(fù)制算法,老年代的收集算法看具體用什么收集器。默認(rèn)是PS收集器,采用標(biāo)記-整理算法。

# 如果jvm_gc_collection_seconds_count是100次,而jvm_gc_collection_seconds_sum是50秒,那么平均每次GC耗時(shí)是0.5秒。
sum (rate(jvm_gc_collection_seconds_sum[5m]) / rate(jvm_gc_collection_seconds_count[5m])) by (gc, instance, job)

在這里插入圖片描述

案例3:計(jì)算JVM最近5分鐘,最小的死鎖線的程數(shù),是否高于10

min_over_time(jvm_threads_deadlocked[5m])

在這里插入圖片描述

5)JVM堆內(nèi)存分配相關(guān)指標(biāo)(可以查看新生代、老年代分別使用了多少內(nèi)存,粒度更細(xì)一些)

在這里插入圖片描述

最新版的jmx對(duì)應(yīng)的指標(biāo)是:
jvm_memory_pool_used_bytes
jvm_memory_pool_max_bytes

在這里插入圖片描述

5、jmx告警規(guī)則文件

1)編寫(xiě)JVM告警規(guī)則文件

cat /etc/prometheus/rules/jvm_rules.yml
groups:
- name: "JVM告警規(guī)則"
  rules:
  - alert: JVM堆內(nèi)存使用率過(guò)高
    expr: jvm_memory_bytes_used{area="heap",} / jvm_memory_bytes_max{area="heap",} * 100 > 80
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "JVM 堆內(nèi)存使用率過(guò)高, 實(shí)例:{{ $labels.instance }}, job:{{ $labels.job }} "
      description: "JVM堆內(nèi)存使用率超過(guò)80%, 當(dāng)前值 {{ $value }}%"
  - alert: JVMGC時(shí)間過(guò)長(zhǎng)
    expr: sum (rate(jvm_gc_collection_seconds_sum[5m]) / rate(jvm_gc_collection_seconds_count[5m])) by (gc, instance, job) > 1
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "JVM GC時(shí)間過(guò)長(zhǎng), 實(shí)例:{{ $labels.instance }}, job:{{ $labels.job }} "
      description: "JVM {{ $labels.gc }} 的回收時(shí)間超過(guò)1s,當(dāng)前值 {{ $value}}s"
  - alert: JVM死鎖線程過(guò)多
    expr: min_over_time(jvm_threads_deadlocked[5m]) > 0
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "JVM檢測(cè)到死鎖線程"
      description: "在過(guò)去5分鐘內(nèi)JVM檢測(cè)到存在死鎖線程, 當(dāng)前值 {{ $value }}。"

2)驗(yàn)證規(guī)則文件

在這里插入圖片描述

3)導(dǎo)入JMX圖形

導(dǎo)入一個(gè)JVM的Grafana模板。Dashboard ID為 14845

在這里插入圖片描述

以上就是通過(guò)prometheus監(jiān)控springboot程序運(yùn)行狀態(tài)的操作流程的詳細(xì)內(nèi)容,更多關(guān)于prometheus監(jiān)控springboot運(yùn)行狀態(tài)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java編程使用卡片布局管理器示例【基于swing組件】

    Java編程使用卡片布局管理器示例【基于swing組件】

    這篇文章主要介紹了Java編程使用卡片布局管理器,結(jié)合實(shí)例形式分析了java基于swing組件的卡片布局管理器具體實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2018-01-01
  • java實(shí)現(xiàn)將文件上傳到ftp服務(wù)器的方法

    java實(shí)現(xiàn)將文件上傳到ftp服務(wù)器的方法

    這篇文章主要介紹了java實(shí)現(xiàn)將文件上傳到ftp服務(wù)器的方法,結(jié)合實(shí)例形式分析了基于java實(shí)現(xiàn)的ftp文件傳輸類(lèi)定義與使用方法,需要的朋友可以參考下
    2016-08-08
  • SpringCloud學(xué)習(xí)筆記之Feign遠(yuǎn)程調(diào)用

    SpringCloud學(xué)習(xí)筆記之Feign遠(yuǎn)程調(diào)用

    Feign是一個(gè)聲明式的http客戶端。其作用就是幫助我們優(yōu)雅的實(shí)現(xiàn)http請(qǐng)求的發(fā)送。本文將具體為大家介紹一下Feign的遠(yuǎn)程調(diào)用,感興趣的可以了解一下
    2021-12-12
  • java內(nèi)部類(lèi)使用總結(jié)

    java內(nèi)部類(lèi)使用總結(jié)

    本文主要介紹了java內(nèi)部類(lèi)使用總結(jié)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • 使用Java實(shí)現(xiàn)簡(jiǎn)單搭建內(nèi)網(wǎng)穿透

    使用Java實(shí)現(xiàn)簡(jiǎn)單搭建內(nèi)網(wǎng)穿透

    內(nèi)網(wǎng)穿透是一種網(wǎng)絡(luò)技術(shù),適用于需要遠(yuǎn)程訪問(wèn)本地部署服務(wù)的場(chǎng)景,本文主要為大家介紹了如何使用Java實(shí)現(xiàn)簡(jiǎn)單搭建內(nèi)網(wǎng)穿透,感興趣的可以了解下
    2024-02-02
  • SpringBoot集成Graphql Query實(shí)戰(zhàn)示例

    SpringBoot集成Graphql Query實(shí)戰(zhàn)示例

    這篇文章主要為大家介紹了SpringBoot集成Graphql Query實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 淺談java中==以及equals方法的用法

    淺談java中==以及equals方法的用法

    這篇文章主要介紹了淺談java中==以及equals方法的用法,涉及二者的用法示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot使用布隆過(guò)濾器解決緩存穿透問(wèn)題

    SpringBoot使用布隆過(guò)濾器解決緩存穿透問(wèn)題

    緩存穿透是指當(dāng)緩存系統(tǒng)中無(wú)法命中需要的數(shù)據(jù)時(shí),會(huì)直接請(qǐng)求底層存儲(chǔ)系統(tǒng)(如數(shù)據(jù)庫(kù)),但是如果請(qǐng)求的數(shù)據(jù)根本不存在,那么大量的請(qǐng)求就會(huì)直接穿透緩存層,本文將給大家介紹一下SpringBoot使用布隆過(guò)濾器解決緩存穿透問(wèn)題,需要的朋友可以參考下
    2023-10-10
  • Java overload和override的區(qū)別分析

    Java overload和override的區(qū)別分析

    方法的重寫(xiě)(Overriding)和重載(Overloading)是Java多態(tài)性的不同表現(xiàn),想要了解更多請(qǐng)參考本文
    2012-11-11
  • SpringBoot多數(shù)據(jù)源配置的全過(guò)程記錄

    SpringBoot多數(shù)據(jù)源配置的全過(guò)程記錄

    在用SpringBoot開(kāi)發(fā)項(xiàng)目時(shí),隨著業(yè)務(wù)量的擴(kuò)大,我們通常會(huì)進(jìn)行數(shù)據(jù)庫(kù)拆分或是引入其他數(shù)據(jù)庫(kù),從而我們需要配置多個(gè)數(shù)據(jù)源,下面這篇文章主要給大家介紹了關(guān)于SpringBoot多數(shù)據(jù)源配置的相關(guān)資料,需要的朋友可以參考下
    2021-11-11

最新評(píng)論