監控JVM
使用prometheus+grafana監控springboot項目jvm狀況
環境準備:javascript
JDK 8+java
Grafanagit
Prometheusgithub
一、配置pom
Actuator:web
Spring Boot Actuator能夠幫助你監控和管理Spring Boot應用,好比健康檢查、審計、統計和HTTP追蹤等。全部的這些特性能夠經過JMX或者HTTP endpoints來得到。spring
Micrometer:docker
Micrometer提供了與供應商無關的接口,包括 timers(計時器), gauges(量規), counters(計數器), distribution summaries(分佈式摘要), long task timers(長任務定時器)。它具備維度數據模型,當與維度監視系統結合使用時,能夠高效地訪問特定的命名度量,並可以跨維度深刻研究。shell
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>io.github.mweirauch</groupId>
<artifactId>micrometer-jvm-extras</artifactId>
<version>0.1.2</version>
</dependency>
如圖:tomcat
二、配置yml
#prometheus配置
management.metrics.export.prometheus.enabled=true
management.metrics.export.prometheus.step=1ms
management.metrics.export.prometheus.descriptions=true
management.endpoint.prometheus.enabled=true
management.endpoints.web.exposure.include=health,info,env,prometheus,metrics,httptrace,threaddump,heapdump,springmetrics
上傳jar到服務器運行springboot
三、添加job
修改prometheus.yml,添加job添加下面代碼,其中xxx替換爲項目啓動路徑。
而後再啓動prometheus,訪問http://118.190.217.164:9090/,查看targets啓動是否正常以下圖
- job_name: 'actuator-demo'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
metrics_path: '/xxx/xxx/prometheus'
static_configs:
- targets: ['118.190.217.164:9999']
例如:
- job_name: 'actuator-demo'
metrics_path: '/root/minedata'
static_configs:
- targets: ['118.190.217.164:9999']
四、 啓動服務
小編對java不是很熟悉,這裏僅僅只是展現 如何監控,具體邏輯沒有寫。示意效果。
(授人以魚不如授人以漁)
五、 拓展
咱們其實可使用,JMX exporter,提供JMX中和JVM相關的metrics。
地址:
https://github.com/prometheus/jmx_exporter
如下實踐 參考原文:
https://chanjarster.github.io/post/prom-grafana-jvm/
具體步驟以下
利用JMX exporter,在Java進程內啓動一個小型的Http server
配置Prometheus抓取那個Http server提供的metrics。
配置Grafana鏈接Prometheus,配置Dashboard。
實踐
一、建立目錄
mkdir java-jvm
cd java-jvm
二、拉取JMX_Exporter
git clone https://github.com/prometheus/jmx_exporter.git
三、新建文件 simple-config.yml
# 這個文件大體意思是 取metric類型 的 GAUGE(瞬時值)
---
lowercaseOutputLabelNames: true
lowercaseOutputName: true
whitelistObjectNames: ["java.lang:type=OperatingSystem"]
rules:
- pattern: 'java.lang<type=OperatingSystem><>((?!process_cpu_time)\w+):'
name: os_$1
type: GAUGE
attrNameSnakeCase: true
四、啓動幾個線程
運行如下命令啓動3個Tomcat,記得把
<path-to-java-jvm>
替換成正確的路徑。
端口自定義,因爲服務器端口組每次須要設置,小編的在8000/10000 本身根據本身改便可。如下操做能夠在`本地docker環境`中運行
- P
第一個 是 JMX exporter提供的metrics
8001 | 8002 | 8003
第二個是 Tomcat 端口
docker run -d \
--name tomcat-1 \
-v <path-to-java-jvm>: /root/java-jvm/jmx_exporter \
-e CATALINA_OPTS="-Xms64m -Xmx128m -javaagent:/jmx-exporter/jmx_prometheus_javaagent-0.3.1.jar=6060:/jmx-exporter/simple-config.yml" \
-p 8001:8001 \
-p 8081:8081 \
tomcat:8.5-alpine
docker run -d \
--name tomcat-2 \
-v <path-to-java-jvm>:/root/java-jvm/jmx_exporter \
-e CATALINA_OPTS="-Xms64m -Xmx128m -javaagent:/jmx-exporter/jmx_prometheus_javaagent-0.3.1.jar=6060:/jmx-exporter/simple-config.yml" \
-p 8002:8002 \
-p 8082:8082 \
tomcat:8.5-alpine
docker run -d \
--name tomcat-3 \
-v <path-to-java-jvm>:/root/java-jvm/jmx_exporter \
-e CATALINA_OPTS="-Xms64m -Xmx128m -javaagent:/jmx-exporter/jmx_prometheus_javaagent-0.3.1.jar=6060:/jmx-exporter/simple-config.yml" \
-p 8003:8003 \
-p 8083:8083 \
tomcat:8.5-alpine
五、配置Prometheus
在以前新建目錄
java-jvm-demo
,新建一個文件prom-jmx.yml
,內容以下:
scrape_configs:
- job_name: 'java'
scrape_interval: 30s
static_configs:
- targets:
- '<host-ip>:8001'
- '<host-ip>:8002'
- '<host-ip>:8003'
六、docker啓動
docker run -d \
--name=prometheus \
-p 9090:9090 \
-v <path-to-prom-jvm-demo>:/prometheus-config \
prom/prometheus --config.file=/prometheus-config/prom-jmx.yml
七、訪問9090看效果
八、配置Grafana
啓動
docker run -d --name=grafana -p 3000:3000 grafana/grafana
登陸
訪問http://localhost:3000,使用
admin/admin
登陸。(能夠本地docker 實踐一下)
添加Prometheus數據源
這裏不懂得 能夠看我以前的文章。
Name:隨便取
Type:Prometheus
URL:
http://:9090
其他不要設置,點擊
Save & Test
,應該會返回成功結果
導入製做好的 Dashboard
在看和轉發
都是一種支持
本文分享自微信公衆號 - DataScience(DataScienceTeam)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。