Spring Boot中使用Prometheus監控教程

banq發表於2024-05-21

在要求嚴格的軟體開發領域,確保應用程式在部署到生產環境中後能夠以最佳且可靠的方式執行不僅是可取的,而且是至關重要的。使用 Spring Boot,開發人員可以輕鬆設定獨立的高階應用程式。然而,要真正增強效能、可用​​性和可靠性,整合像 Prometheus 這樣的複雜監控工具是關鍵。

本教程旨在提供有關將 Prometheus 與 Spring Boot 應用程式連線的詳細演練,透過基本和複雜的配置豐富我們的監控策略。

什麼是普羅米修斯?
Prometheus是一個開源專案,旨在深入研究我們的應用程式資料,建立過濾層來收集和分析從最簡單到最複雜的所有內容。它也不僅僅是數字和圖表:它是透過其高階查詢語言和時間序列資料功能來了解我們的應用程式的心跳。

整合 Prometheus 使我們能夠在問題發生之前識別問題,微調我們的系統,確保我們的應用程式以最佳效能執行,最終意味著為我們的使用者提供更好的體驗 - 方便、快速且可靠。

Spring Boot 中的 Prometheus 入門
將 Prometheus 與 Spring Boot 應用程式整合使我們能夠透過以 Prometheus 可以理解和抓取的格式公開應用程式指標來進行有效監控。此過程涉及兩個主要步驟:向我們的專案新增必要的依賴項並配置我們的應用程式以公開指標。

1.新增依賴項
首先,我們將Spring Boot Actuator和Micrometer Prometheus 登錄檔新增到專案的依賴項中。執行器提供了一系列內建端點來顯示有關正在執行的應用程式的效能資訊,例如執行狀況、指標等。然後,Micrometer Prometheus 登錄檔將這些指標格式化為 Prometheus 可讀的格式。

讓我們將依賴項新增到Maven 專案的pom.xml檔案中:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

如果我們使用 Gradle,我們會將這些內容包含在build.gradle檔案中:

implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-prometheus'

2.配置應用程式
新增依賴項後,下一步是配置 Spring Boot 應用程式以公開 Prometheus 指標端點。這是透過更新專案中的application.properties或application.yml檔案來完成的。

對於application.properties,我們新增:

management.endpoints.web.exposure.include=*
management.endpoint.health.show.details=always

此配置可確保 Actuator 的/actuator/prometheus端點公開,以 Prometheus 可以抓取的格式提供大量應用程式指標。

需要注意的是,暴露所有 Actuator 端點 ( management.endpoints.web.exposure.include=* ) 可以在開發過程中提供有用的見解,但可能會暴露敏感的運算元據。對於生產環境,最佳實踐是我們根據監控和操作需求仔細選擇要公開的端點。

透過執行這些步驟,我們的 Spring Boot 應用程式現在將公開 Prometheus 可以收集和儲存的有價值的指標。這一基礎設定對於我們監控策略的下一階段至關重要,包括使用 Prometheus 抓取這些指標並使用 Grafana 等工具將它們視覺化。

設定 Prometheus 來抓取指標
現在我們的應用程式已配置為公開指標,下一步涉及設定 Prometheus 來收集這些指標。這部分過程需要我們下載並配置 Prometheus(詳細介紹基於作業系統的分步指南),並調整prometheus.yml檔案以定位我們的 Spring Boot 應用程式。

1.安裝
安裝 Prometheus 非常簡單。我們回顧一下兩種最常見的作業系統和 Docker 的步驟:

對於 Windows:

  • 從 Prometheus 官方網站下載最新的 Prometheus 版本,選擇 Windows 版本。
  • 將下載的.zip檔案解壓縮到我們所需的位置,該位置將作為 Prometheus 主目錄。
  • 透過開啟命令提示符、導航到 Prometheus 目錄並執行prometheus.exe來執行 Prometheus 。此操作啟動 Prometheus 伺服器。

對於 Linux/Mac:
  • 從Prometheus 下載頁面下載適用於 Linux 或 Mac 的最新版本。
  • 使用命令tar xvfz prometheus-*.tar.gz提取 tarball 。
  • 導航到提取的目錄,使其成為 Prometheus 主目錄。
  • 透過在終端中執行./prometheus來啟動 Prometheus,這會啟動 Prometheus 伺服器。

使用 Docker:
  • 選擇Docker部署 Prometheus 可簡化設定過程,無論使用哪種作業系統,均可提供一致且簡化的安裝方法。

以下是我們可以實現此目的的方法:

拉取 Prometheus 映象:首先,我們從 Docker Hub 拉取官方 Prometheus 映象,以確保我們擁有最新版本:
docker pull prom/prometheus

執行 Prometheus 容器:在拉取映象之後,我們可以啟動 Prometheus 容器。此命令將 Prometheus 預設埠 (9090) 轉發到我們主機上的同一埠,從而可以透過http://localhost:9090訪問 Prometheus Web UI :
docker run --name prometheus -d -p 9090:9090 prom/prometheus

對於需要自定義配置的部署,可以將位於我們主機上的自定義prometheus.yml檔案安裝到容器中:

docker run --name prometheus -d -p 9090:9090 -v /our/path/to/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

我們將/our/path/to/prometheus.yml替換為配置檔案的實際路徑。

訪問 Prometheus Web UI:隨著 Prometheus 在 Docker 容器中主動執行,使用者介面將可以透過http://localhost:9090訪問。該介面對於執行查詢、檢視收集的指標以及驗證抓取目標的狀態非常有用。

2.配置 Prometheus 來抓取指標
安裝後,我們需要配置 Prometheus 以從 Spring Boot 應用程式中抓取指標。這需要編輯位於 Prometheus 主目錄中的prometheus.yml記錄。

我們將 Spring Boot 應用程式新增為scrape_configs部分下的目標:

scrape_configs:
  - job_name: 'spring-boot-application'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 15s # This can be adjusted based on our needs
    static_configs:
      - targets: ['localhost:8080']

在這裡,localhost:8080應替換為執行 Spring Boot 應用程式的適當主機和埠。 scrape_interval指定 Prometheus 應從我們的應用程式中抓取指標的頻率。

3.使用 Grafana 視覺化指標
雖然 Prometheus 擅長收集和儲存指標,但 Grafana 是我們透過富有洞察力的儀表板視覺化這些指標的首選工具。

將 Grafana 與 Prometheus 整合:

  • 透過訪問Grafana 官方下載頁面安裝 Grafana 。
  • 啟動 Grafana 並透過在 Web 瀏覽器上訪問http://localhost:3000來訪問其 Web 介面。
  • 透過導航到Grafana UI 中的配置 > 資料來源 > 新增資料來源,將 Prometheus 新增為資料來源。我們選擇 Prometheus 作為型別,並指定 Prometheus 執行的 URL,通常為http://localhost:9090。
  • 儲存並測試以確認 Grafana 可以成功連線到 Prometheus。

在 Grafana 中建立儀表板:
  • 透過單擊左側邊欄的圖示並選擇儀表板來建立新的儀表板。
  • 向儀表板新增一個全新的皮膚。在這裡,我們選擇要顯示的指標,決定視覺化型別(圖形、儀表、表格等),並自定義皮膚的外觀。
  • 選擇我們的 Prometheus 記錄源並利用 Prometheus 查詢語言 (PromQL) 來選擇我們希望視覺化的指標。例如,要顯示 HTTP 請求的費用,我們將使用類似Price(http_requests_total[5m]) 的查詢。
  • 儲存我們的皮膚和儀表板。我們可以建立儘可能多的皮膚,以視覺化 Spring Boot 實用程式中的特殊指標。

遵循這些步驟使我們能夠設定 Prometheus 從 Spring Boot 應用程式中抓取指標,並利用 Grafana 來視覺化它們。此設定為我們提供了有關應用程式執行狀況和整體效能的重要見解。

高階配置和最佳實踐
本節介紹可以增強 Spring Boot 應用程式的可觀察性和安全性的高階配置。我們將探索在 Prometheus 中設定警報規則,並使用 Micrometer 在 Spring Boot 中建立自定義指標。

遵循這些最佳實踐可確保我們的應用程式保持健壯、安全和高度可用。

1. Spring Boot 中的自定義指標
Spring Boot 與 Micrometer 的整合提供了一種嚮應用程式新增自定義指標的無縫方法,使我們能夠監控特定於應用程式的行為和操作。以下是我們建立和註冊自定義指標的方法:

@Component
public class CustomMetricsService {
    private final Counter customMetricCounter;
    public CustomMetricsService(MeterRegistry meterRegistry) {
        customMetricCounter = Counter.builder(<font>"custom_metric_name")
          .description(
"Description of custom metric")
          .tags(
"environment", "development")
          .register(meterRegistry);
    }
    public void incrementCustomMetric() {
        customMetricCounter.increment();
    }
}

在此示例中,我們定義了一個名為custom_metric_name的自定義計數器指標。該計數器可以遞增以跟蹤應用程式中的特定事件,例如使用者註冊或登入嘗試。

透過注入MeterRegistry,我們註冊了自定義指標,使其可供 Prometheus 抓取。

2.監控和警報的最佳實踐
讓我們回顧一下這項工作的一些最佳實踐:

  • 在 Prometheus 中設定警報規則:根據應用程式特定的指標和閾值定義警報規則。這種主動方法有助於在問題影響使用者之前識別和解決問題。
  • 監控關鍵業務交易:除了系統執行狀況之外,還跟蹤代表關鍵業務功能的指標,例如訂單完成情況或支付交易。
  • 安全訪問指標:確保指標端點受到保護,以防止未經授權的訪問。根據需要利用 Spring Security 配置訪問控制。
  • 定期檢查指標和警報:定期檢查配置的指標和警報,以確保它們與運營和業務需求保持相關性。隨著應用程式的發展調整閾值和指標。

透過實施這些高階配置並遵循最佳實踐,我們可以實現強大的監控和警報設定,不僅可以保護我們的應用程式,還可以深入瞭解其效能和使用模式。

相關文章