使用 Actuator、Prometheus 和 Grafana 建立現代應用程式的可觀測性和監控
在當今分散式系統和微服務的世界中,確保我們的應用程式可觀察和可監控與建構核心功能同樣重要。我們已經設定了關鍵功能,例如NGINX負載平衡器、速率限制器和斷路器,下一步是專注於可觀察性和監控。
在這篇文章中,我們將逐步介紹如何將Spring Boot Actuator、Prometheus 和Grafana 添加到我們的應用程式中,以建立強大的可觀察性堆。這將幫助我們可視化應用程式的運行狀況、追蹤效能指標並快速有效地解決問題。
什麼是可觀察性?
可觀察性是指根據系統產生的資料來了解系統內部狀態的能力。可觀察性的三大支柱是:
- 指標:可量化的資料點(例如請求率、記憶體使用率、CPU 使用率)。
- 日誌:事件記錄(例如錯誤、警告或業務事件)。
- 痕跡:在請求流經多個服務時追蹤請求。
透過專注於指標和日誌,我們可以建立強大的儀表板和警報,確保您的應用程式保持高效能和可靠性。
為什麼可觀測性對我們的應用程式很重要
我們目前的應用程式架構已經擁有必要的元件:
- NGINX 負載平衡器:跨伺服器分配流量。
- 速率限制器:透過限制請求數量來防止過載。
- 斷路器:透過停止對失敗服務的呼叫來確保復原能力。
然而,雖然這些工具提高了效能和可靠性,但它們並沒有告訴我們為什麼某些東西可能會失敗或我們的系統在負載下的表現如何。 Actuator、Prometheus 和 Grafana 等可觀察性工具將:
- 追蹤即時指標應用程式運作狀況和效能。
- 幫助可視化趨勢和潛在瓶頸。
- 當指標超過關鍵閾值時觸發警報。
可觀察性堆疊
將這些依賴項新增至您的 pom.xml 檔案:
<dependency> <groupId>io.github.resilience4j</groupId> <artifactId>resilience4j-micrometer</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>1.14.1</version> </dependency>
更新 application.properties 的設定
resilience4j.circuitbreaker.metrics.enabled=true management.health.circuitbreakers.enabled=true management.endpoints.web.exposure.include=health,metrics,circuitbreakers,prometheus management.endpoint.health.show-details=always management.endpoint.health.access=unrestricted management.endpoint.prometheus.access=unrestricted management.prometheus.metrics.export.enabled=true
解釋
management.endpoints.web.exposure.include=健康、指標、斷路器、普羅米修斯
此行從執行器公開 URI,因此我們可以使用以下 URI:
- 執行器/
- 執行器/健康,
- 執行器/指標,
- 執行器/斷路器,
- 執行器/普羅米修斯
將 prometheus 與 docker 一起使用
在我們的 docker-compose.yaml 檔案中,我們為 prometheus 建立一個服務:
<dependency> <groupId>io.github.resilience4j</groupId> <artifactId>resilience4j-micrometer</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>1.14.1</version> </dependency>
普羅米修斯的配置文件
在專案的根目錄下建立一個名為 prometheus 的資料夾,並在其中建立一個名為 prometheus.yaml 的檔案
resilience4j.circuitbreaker.metrics.enabled=true management.health.circuitbreakers.enabled=true management.endpoints.web.exposure.include=health,metrics,circuitbreakers,prometheus management.endpoint.health.show-details=always management.endpoint.health.access=unrestricted management.endpoint.prometheus.access=unrestricted management.prometheus.metrics.export.enabled=true
現在,當我們跑步時:
prometheus: image: prom/prometheus:latest ports: - "9090:9090" networks: - app_network volumes: - ./prometheus/prometheus.yaml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus
prometheus 容器將啟動,並使用來自 URI 執行器的指標/來自我們的 spring-boot-servers 的指標。
我們可以在http://localhost:9090/看到一個儀表板,例如:
但是,這並不酷。我們想要查看一些圖表,為此我們使用 Grafana。
添加格拉法納
使用其他服務更新您的 docker compose 檔案:
global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'spring-boot-app' metrics_path: '/actuator/prometheus' static_configs: - targets: - 'spring-server-1:8080' - 'spring-server-2:8080' labels: environment: development application: spring-boot
現在您可以透過http://localhost:3000存取grafana儀表板
首先他們會詢問您的憑證,只需輸入 admin 作為使用者名稱和密碼。
配置普羅米修斯
在左側選單中,前往連接>;新增連接並蒐索 Prometheus
像這樣設定連線 URL:
點擊按鈕“儲存並測試”,如果一切正常,您可以開始選擇儀表板。
儀表板
前往 Grafana Dashboards 並選擇適合您的儀表板。
為此,我選擇 Spring Boot Resilience4j Circuit Breaker (3.x)
如果一切正常,您將看到以下內容:
隨意瀏覽其他儀表板。
最後的話
透過將Actuator、Prometheus 和Grafana 整合到我們的應用程式中,我們在建立高度可觀察的系統方面邁出了重要一步。透過適當的指標、日誌記錄和監控,您將能夠:
- 全面了解您的應用程式和基礎架構。
- 主動偵測並解決問題。
- 最佳化效能和可靠性。
有了這些工具,我們不僅可以有效地監控我們的系統,還可以為未來自信地擴展奠定基礎。
?參考
- Grafana 文件
- 普羅米修斯文件
?專案庫
- Github 上的專案儲存庫
?跟我說話
- 領英
- Github
- 投資組合
以上是使用 Actuator、Prometheus 和 Grafana 建立現代應用程式的可觀測性和監控的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

在使用IntelliJIDEAUltimate版本啟動Spring...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...
