知識庫 / Spring / Spring Boot RSS 訂閱

自託管的 Spring Boot 應用監控

DevOps,Spring Boot
HongKong
11
01:11 PM · Dec 06 ,2025

1. 引言

Spring Boot 的一大優勢在於其內置的執行器(actuator)集合。這些執行器提供了一種便捷的方式來監控和控制 Spring Boot 應用程序的各個方面。

在本教程中,我們將探討如何使用 指標執行器,為 Spring Boot 應用程序創建一個自託管的監控解決方案。

2. 儀表盤數據庫

監控 Spring Boot 應用程序的第一步是選擇儀表盤數據庫。默認情況下,Spring Boot 會在每個應用程序中配置一個 Micrometer 儀表盤註冊表。

此默認實現會收集一組預定義的應用程序指標,例如內存和 CPU 使用率、HTTP 請求以及其他一些指標。但是,這些指標僅存儲在內存中,這意味着在應用程序重啓時,它們將被丟失。

為了創建一個自託管的監控解決方案,我們首先應該選擇一個位於 Spring Boot 應用程序外部的儀表盤數據庫。以下部分將討論一些可用的自託管選項。

請注意,每當 Spring Boot 檢測到 classpath 中另一個儀表盤數據庫時,它會自動禁用內存註冊表。

2.1. InfluxDB

InfluxDB 是一款開源的時間序列數據庫。 啓動 InfluxDB 的最快方法是將其作為 Docker 容器在本地運行:

docker run -p 8086:8086 -v /tmp:/var/lib/influxdb influxdb

請注意,這將在本地 /tmp 分區中存儲指標。對於開發和測試而言,這沒有問題,但對於生產環境則不是一個好的選擇。

InfluxDB 運行後,我們可以通過添加 適當的 Micrometer 依賴項,配置我們的 Spring Boot 應用程序,使其將指標發佈到其中:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-influx</artifactId>
</dependency>

此外,我們需要在 application.properties文件中添加一個新的條目:

management.metrics.export.influx.uri=http://localhost:8086

默認情況下,數據庫名稱已設置為 mydb,而用户名和密碼尚未設置。

但是,我們可以使用專用屬性覆蓋默認值:

management.metrics.export.influx.db=customDbName
management.metrics.export.influx.user-name=myUserName
management.metrics.export.influx.password=mySecret

InfluxDB 不提供原生可視化工具。但是,它提供了一個名為 Chronograph 的單獨工具,非常適合用於可視化 InfluxDB 數據。

2.2. Prometheus

Prometheus 是 SoundCloud 團隊最初構建的開源監控和告警工具。它與 InfluxDB 的工作方式略有不同。

我們不配置應用程序將指標發佈到 Prometheus,而是配置 Prometheus 定期地輪詢我們的應用程序

首先,我們配置 Spring Boot 應用程序以暴露一個新的 Prometheus 行為器端點。我們通過包含 micrometer-registry-prometheus 依賴項來實現:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

這將創建一個新的 actuator 端點,該端點會以 Prometheus 能夠理解的特殊格式產生指標數據。

接下來,我們需要配置 Prometheus 輪詢我們的應用程序,通過將我們想要的配置添加到 prometheus.yml 文件中。

以下配置指示 Prometheus 輪詢我們的應用程序,間隔為 5 秒,使用新的 actuator 端點:

scrape_configs:
  - job_name: 'spring-actuator'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
    - targets: ['127.0.0.1:8080']

最後,我們可以使用 Docker 啓動本地 Prometheus 服務器。 這假設我們的自定義配置文件位於本地文件 /etc/prometheus/prometheus.yml 處:

docker run -d \
--name=prometheus \
-p 9090:9090 \
-v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus \
--config.file=/etc/prometheus/prometheus.yml

Prometheus 提供自己的可視化工具,用於查看其收集到的指標。可以通過以下 URL 訪問:http://localhost:9090/。

2.3. Graphite

Graphite 是一款開源的時間序列數據庫。 它的架構比我們之前討論的數據庫稍微複雜一些,但使用 Docker,本地運行實例非常簡單。

docker run -d \
 --name graphite \
 --restart=always \
 -p 80:80 \
 -p 2003-2004:2003-2004 \
 -p 2023-2024:2023-2024 \
 -p 8125:8125/udp \
 -p 8126:8126 \
 graphiteapp/graphite-statsd

然後,我們可以通過添加 micrometer-registry-graphite 依賴項,配置 Spring Boot 將指標發佈到我們的實例:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-graphite</artifactId>
</dependency>

同時,將配置屬性添加到 application.properties 文件中:

management.metrics.export.graphite.host=127.0.0.1
management.metrics.export.graphite.port=2004

類似於普羅米修斯,Graphite 包含自己的可視化儀表板。它可通過以下 URL 訪問:http://localhost/

3. 可視化工具

一旦我們為存儲指標解決了 Spring Boot 應用程序之外的問題,接下來需要決定我們希望如何可視化這些數據

一些之前提到的指標數據庫都自帶可視化工具。對於我們自託管的監控解決方案,有一個獨立的可視化工具值得我們考察。

3.1. Grafana

Grafana 是一款開源的分析和監控工具。 它能夠連接到之前提到的所有數據庫,以及許多其他數據庫

Grafana 通常比大多數內置的可視化工具提供更好的配置和更強大的告警功能。 它可以輕鬆地通過插件進行擴展,並且有大量的預構建儀表板可以導入,從而快速創建我們自己的可視化效果。

要本地運行 Grafana,我們可以使用 Docker 啓動它:

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

現在,我們可以通過 URL http://localhost:3000/ 訪問 Grafana 主頁。

在此階段,我們需要配置一個或多個數據源。 這可以是之前討論過的任何指標數據庫,或者各種其他支持的工具。

配置好數據源後,我們可以創建新的儀表板或導入一個滿足我們需求的儀表板。

4. 結論

在本文中,我們探討了為 Spring Boot 應用程序構建自託管監控解決方案的方法。

我們考察了 Spring Boot 能夠無縫支持的三種指標數據庫,並瞭解瞭如何在本地運行它們。

此外,我們簡要介紹了 Grafana,這是一種強大的可視化工具,可以從各種來源顯示指標數據。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.