使用Prometheus+Grafana監控JVM

原文地址java

本文所提到的腳本能夠在這裏下載。git

摘要

用到的工具:github

  • Docker,本文大量使用了Docker來啓動各個應用。
  • Prometheus,負責抓取/存儲指標信息,並提供查詢功能。
  • Grafana,負責數據可視化。
  • JMX exporter,提供JMX中和JVM相關的metrics。
  • Tomcat,用來模擬一個Java應用。

先講一下大體步驟:docker

  1. 利用JMX exporter,在Java進程內啓動一個小型的Http server
  2. 配置Prometheus抓取那個Http server提供的metrics。
  3. 配置Grafana鏈接Prometheus,配置Dashboard。

第一步:啓動幾個Java應用

1) 新建一個目錄,名字叫作prom-jvm-demotomcat

2) 下載JMX exporter到這個目錄bash

3) 新建一個文件simple-config.yml內容以下:jvm

---
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

4) 運行如下命令啓動3個Tomcat,記得把<path-to-prom-jvm-demo>替換成正確的路徑:maven

docker run -d \
  --name tomcat-1 \
  -v <path-to-prom-jvm-demo>:/jmx-exporter \
  -e CATALINA_OPTS="-Xms64m -Xmx128m -javaagent:/jmx-exporter/jmx_prometheus_javaagent-0.3.1.jar=6060:/jmx-exporter/simple-config.yml" \
  -p 6060:6060 \
  -p 8080:8080 \
  tomcat:8.5-alpine

docker run -d \
  --name tomcat-2 \
  -v <path-to-prom-jvm-demo>:/jmx-exporter \
  -e CATALINA_OPTS="-Xms64m -Xmx128m -javaagent:/jmx-exporter/jmx_prometheus_javaagent-0.3.1.jar=6060:/jmx-exporter/simple-config.yml" \
  -p 6061:6060 \
  -p 8081:8080 \
  tomcat:8.5-alpine

docker run -d \
  --name tomcat-3 \
  -v <path-to-prom-jvm-demo>:/jmx-exporter \
  -e CATALINA_OPTS="-Xms64m -Xmx128m -javaagent:/jmx-exporter/jmx_prometheus_javaagent-0.3.1.jar=6060:/jmx-exporter/simple-config.yml" \
  -p 6062:6060 \
  -p 8082:8080 \
  tomcat:8.5-alpine

5) 訪問http://localhost:8080|8081|8082看看Tomcat是否啓動成功。工具

6) 訪問對應的http://localhost:6060|6061|6062看看JMX exporter提供的metrics。post

備註:這裏提供的simple-config.yml僅僅提供了JVM的信息,更復雜的配置請參考JMX exporter文檔

第二步:啓動Prometheus

1) 在以前新建目錄prom-jvm-demo,新建一個文件prom-jmx.yml,內容以下:

scrape_configs:
  - job_name: 'java'
    scrape_interval: 30s
    static_configs:
    - targets:
      - '<host-ip>:6060'
      - '<host-ip>:6061'
      - '<host-ip>:6062'

2) 啓動Prometheus:

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

3) 訪問http://localhost:9090看看Prometheus是否啓動成功,在輸入框裏輸入jvm_info而後執行,應該能夠看到以下圖的結果:

圖片描述

若是沒有看到三個instance,那麼等一下子再試。

第三步:配置Grafana

1) 啓動Grafana:

docker run -d --name=grafana -p 3000:3000 grafana/grafana

2) 訪問http://localhost:3000,使用admin/admin登陸。

3) 添加Prometheus數據源,以下圖所示到添加數據源頁面:

圖片描述

4) 配置數據源信息:

  • Name:隨便取
  • Type:Prometheus
  • URL:http://<host-ip>:9090
  • 其他不要設置,點擊Save & Test,應該會返回成功結果

5) 導入Dashboard。咱們不須要重頭本身作Dashboard,用現成的就行,按下圖所示進入導入頁面

圖片描述

6) 使用我製做的JVM Dashboard,頁面右側出現的ID號是8563,記住這個號,填在以下圖所示的位置:

圖片描述

7) 而後鼠標點擊別處稍等一下,出現下圖,選擇一下數據源就能夠了

圖片描述

8) 最後打開剛剛導入的Dashboard,以下圖:

圖片描述

相關文章
相關標籤/搜索