全部產品
Search
文件中心

Managed Service for Prometheus:通過Prometheus監控JVM

更新時間:Jan 11, 2025

通過在應用中埋點來暴露JVM資料,使用阿里雲Prometheus採集JVM資料,藉助Prometheus Grafana大盤來展示JVM資料,並建立警示,即可實現利用阿里雲Prometheus監控JVM的目的。本文以阿里雲Container ServiceK8s叢集和阿里雲Container Registry為例,介紹如何通過阿里雲Prometheus監控JVM。

前提條件

  • 阿里雲Container ServiceK8s叢集已接入可觀測監控 Prometheus 版。如何接入,請參見容器可觀測

  • 已建立阿里雲Container Registry鏡像倉庫。如何建立,請參見步驟二:建立鏡像倉庫

Demo

如需快速體驗如何通過阿里雲Prometheus監控JVM,您可以使用已埋點的Demo專案

操作流程

通過阿里雲Prometheus監控JVM的操作流程如下圖所示。

flow

步驟一:為應用埋點

為應用埋點以暴露JVM資料的操作步驟如下:

  1. pom.xml檔案中添加Maven依賴。

    <dependency>
        <groupId>io.prometheus</groupId>
        <artifactId>simpleclient_hotspot</artifactId>
        <version>0.6.0</version>
    </dependency>
  2. 在應用代碼中添加初始化JVM Exporter的方法。

    @PostConstruct
        public void initJvmExporter() {
            io.prometheus.client.hotspot.DefaultExports.initialize();
        }

    您可以參考Demo專案的/src/main/java/com/monitise/prometheus_demo/DemoController.java檔案。

  3. application.properties檔案中配置用於可觀測監控 Prometheus 版的連接埠和路徑。

    management.port: 8081
    endpoints.prometheus.path: prometheus-metrics

    您可以參考Demo專案的/src/main/resources/application.properties檔案。

  4. 在應用代碼中添加開啟HTTP連接埠的方法。

    @SpringBootApplication
    // sets up the prometheus endpoint /prometheus-metrics
    @EnablePrometheusEndpoint
    // exports the data at /metrics at a prometheus endpoint
    @EnableSpringBootMetricsCollector
    public class PrometheusDemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(PrometheusDemoApplication.class, args);
        }
    }

    您可以參考Demo專案的/src/main/java/com/monitise/prometheus_demo/PrometheusDemoApplication.java檔案。

步驟二:上傳應用

將完成埋點的應用製作成鏡像並上傳至阿里雲Container Registry的鏡像倉庫的操作步驟如下:

  1. 執行以下命令重新編譯模組。

    mvn clean install -DskipTests
  2. 執行以下命令構建鏡像。

    docker build -t <本地臨時Docker鏡像名稱>:<本地臨時Docker鏡像版本號碼> . --no-cache

    樣本命令:

    docker build -t promethues-demo:v0 . --no-cache
  3. 執行以下命令為鏡像打標。

    sudo docker tag <本地臨時Docker鏡像名稱>:<本地臨時Docker鏡像版本號碼> <Registry網域名稱>/<命名空間>/<鏡像名稱>:<鏡像版本號碼>

    樣本命令:

    sudo docker tag promethues-demo:v0 registry.cn-hangzhou.aliyuncs.com/testnamespace/promethues-demo:v0
  4. 執行以下命令將鏡像推送至鏡像倉庫。

    sudo docker push <Registry網域名稱>/<命名空間>/<鏡像名稱>:<鏡像版本號碼>

    樣本命令:

    sudo docker push registry.cn-hangzhou.aliyuncs.com/testnamespace/promethues-demo:v0

    Container Registry控制台鏡像版本頁面顯示上傳的應用鏡像。鏡像

步驟三:部署應用

將應用部署至Container ServiceK8s叢集的操作步驟如下:

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

  3. 無狀態頁面,單擊使用YAML建立資源,然後建立應用。

    apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: prometheus-demo
    spec:
      replicas: 2
      template:
        metadata:
          annotations:
            prometheus.io/scrape: 'true'
            prometheus.io/path: '/prometheus-metrics'
            prometheus.io/port: '8081'
          labels:
            app: tomcat
        spec:
          containers:
          - name: tomcat
            imagePullPolicy: Always
            image: <Registry網域名稱>/<命名空間>/<鏡像名稱>:<鏡像版本號碼>
            ports:
            - containerPort: 8080
              name: tomcat-normal
            - containerPort: 8081
              name: tomcat-monitor

    範例程式碼:

    apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: prometheus-demo
      labels:
        app: tomcat
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: tomcat
      template:
        metadata:
          annotations:
            prometheus.io/scrape: 'true'
            prometheus.io/path: '/prometheus-metrics'
            prometheus.io/port: '8081'
          labels:
            app: tomcat
        spec:
          containers:
          - name: tomcat
            imagePullPolicy: Always
            image: registry.cn-hangzhou.aliyuncs.com/peiyu-test/prometheus-demo:v0
            ports:
            - containerPort: 8080
              name: tomcat-normal
            - containerPort: 8081
              name: tomcat-monitor

    無狀態頁面顯示建立的容器組。容器組

  4. 建立服務。

    1. 在左側導覽列,選擇網路 > 服務

    2. 服務頁面,單擊使用YAML建立資源

    3. 建立頁面的模板代碼框輸入以下內容,然後單擊建立

      apiVersion: v1
      kind: Service
      metadata:
        labels:
          app: tomcat
        name: tomcat
        namespace: default
      spec:
        ports:
        - name: tomcat-normal
          port: 8080
          protocol: TCP
          targetPort: 8080
        - name: tomcat-monitor
          port: 8081
          protocol: TCP
          targetPort: 8081
        type: NodePort
        selector:
          app: tomcat

    服務頁面顯示建立的服務。服務

步驟四:佈建服務發現

通過ServiceMonitor配置可觀測監控 Prometheus 版的服務發現以採集JVM資料。具體操作,請參見通過ServiceMonitor建立服務發現