使用Prometheus和Grafana監控Spring Boot應用

banq發表於2018-12-16

Spring Boot應用程式包裝在Docker容器中,Spring Boot應用程式向Prometheus公開指標,Grafana可以閱讀這些指標,並允許從中進行很好的視覺化。在此處下載程式碼。

在Docker容器中包裝Spring Boot
在Docker容器中包裝Spring Boot應用程式非常簡單。按照以下方式建立Dockerfile(更改FROM條目可以獲取不同的JDK)

FROM oracle/graalvm-ce:1.0.0-rc8
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]


加入Maven的pom.xml構建映象,定義使用的屬性:

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>dockerfile-maven-plugin</artifactId>
        <version>1.4.8</version>
        <configuration>
            <repository>${docker.image.prefix}/${project.artifactId}</repository>
            <buildArgs>
                <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
            </buildArgs>
        </configuration>
         </plugin>
        </plugins>
    </build>


現在你可以執行:
mvn clean package dockerfile:build 

它會為你建立Docker映象:springio/gs-reactive-rest-service:latest
鍵入以下命令執行:
docker run -p 8080:8080 -t springio/gs-reactive-rest-service:latest


從Spring Boot獲取Prometheus指標
為了從String Boot應用程式中提供Prometheus指標,需要新增一些依賴項:

        <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- Micormeter core dependecy  -->
        <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-core</artifactId>
        </dependency>
        <!-- Micrometer Prometheus registry  -->
        <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-registry-prometheus</artifactId>
        </dependency>        



現在您可以執行Docker容器並轉到以下URL:http://localhost:8080/actuator/prometheus 
可以看到各種輸出。

提供Prometheus配置
提供了一個小配置檔案,讓Prometheus檢視Spring Boot中的指標URL(參見此處

Global configurations
global:
  scrape_interval:     5s # Set the scrape interval to every 5 seconds.
  evaluation_interval: 5s # Evaluate rules every 5 seconds.
scrape_configs:
  - job_name: 'reactive-spring-boot-app'
    metrics_path: '/actuator/prometheus'
    static_configs:
    - targets: ['spring-boot:8080']


合併在一起
把Spring Boot,Prometheus和Grafana放在一起,見:docker-compose.yml

version: '3'
services:
  spring-boot:
    image: "springio/gs-reactive-rest-service"
    ports:
     - "8080:8080"
    container_name: spring-boot
  prometheus:
    image: "prom/prometheus"
    ports:
     - "9090:9090"
    volumes:
     - ./prom.yml:/etc/prometheus/prometheus.yml
    container_name: prometheus
  grafana:
     image: "grafana/grafana"
     ports:
     - "3000:3000"
     container_name: grafana


Grafana和Prometheus是官方Docker映象。這個配置啟動Spring Boot(localhost:8080),帶有配置檔案Prometheus(localhost:9090)和Grafana(localhost:3000)。它們將被置於相同的Docker網路中,並可透過主機名'prometheus','grafana'和spring-boot'互相訪問。
執行下面命令啟動:
docker-compose up

配置Grafana
在Grafana中,可以輕鬆新增Prometheus作為資料來源。完成此操作後,您可以新增儀表板。一種簡單的方法是在Prometheus中建立一個簡單的查詢並將其複製到Grafana以從中建立圖形。

透過下面方式下載啟動:

git clone https://github.com/MaartenSmeets/gs-reactive-rest-service
cd gs-reactive-rest-service/complete
mvn clean package
mvn dockerfile:build
docker-compose up

相關文章