首頁 Java java教程 使用 Actuator、Prometheus 和 Grafana 建立現代應用程式的可觀測性和監控

使用 Actuator、Prometheus 和 Grafana 建立現代應用程式的可觀測性和監控

Jan 05, 2025 am 06:15 AM

在當今分散式系統和微服務的世界中,確保我們的應用程式可觀察和可監控與建構核心功能同樣重要。我們已經設定了關鍵功能,例如NGINX負載平衡器速率限制器斷路器,下一步是專注於可觀察性和監控

在這篇文章中,我們將逐步介紹如何將Spring Boot ActuatorPrometheusGrafana 添加到我們的應用程式中,以建立強大的可觀察性堆。這將幫助我們可視化應用程式的運行狀況、追蹤效能指標並快速有效地解決問題。


什麼是可觀察性?

可觀察性是指根據系統產生的資料來了解系統內部狀態的能力。可觀察性的三大支柱是:

  1. 指標:可量化的資料點(例如請求率、記憶體使用率、CPU 使用率)。
  2. 日誌:事件記錄(例如錯誤、警告或業務事件)。
  3. 痕跡:在請求流經多個服務時追蹤請求。

透過專注於指標和日誌,我們可以建立強大的儀表板和警報,確保您的應用程式保持高效能和可靠性。


為什麼可觀測性對我們的應用程式很重要

我們目前的應用程式架構已經擁有必要的元件:

  • NGINX 負載平衡器:跨伺服器分配流量。
  • 速率限制器:透過限制請求數量來防止過載。
  • 斷路器:透過停止對失敗服務的呼叫來確保復原能力。

然而,雖然這些工具提高了效能和可靠性,但它們並沒有告訴我們為什麼某些東西可能會失敗或我們的系統在負載下的表現如何。 ActuatorPrometheusGrafana 等可觀察性工具將:

  • 追蹤即時指標應用程式運作狀況和效能。
  • 幫助可視化趨勢和潛在瓶頸。
  • 當指標超過關鍵閾值時觸發警報。

可觀察性堆疊

將這些依賴項新增至您的 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/看到一個儀表板,例如:

Building Observability and Monitoring for Modern Applications with Actuator, Prometheus and Grafana

普羅米修斯的儀表板

但是,這並不酷。我們想要查看一些圖表,為此我們使用 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:

Building Observability and Monitoring for Modern Applications with Actuator, Prometheus and Grafana

在 Grafana 上配置 Prometheus

點擊按鈕“儲存並測試”,如果一切正常,您可以開始選擇儀表板。

儀表板

前往 Grafana Dashboards 並選擇適合您的儀表板。

為此,我選擇 Spring Boot Resilience4j Circuit Breaker (3.x)

如果一切正常,您將看到以下內容:

Building Observability and Monitoring for Modern Applications with Actuator, Prometheus and Grafana

斷路器圖

隨意瀏覽其他儀表板。


最後的話

透過將ActuatorPrometheusGrafana 整合到我們的應用程式中,我們在建立高度可觀察的系統方面邁出了重要一步。透過適當的指標、日誌記錄和監控,您將能夠:

  • 全面了解您的應用程式和基礎架構。
  • 主動偵測並解決問題。
  • 最佳化效能和可靠性。

有了這些工具,我們不僅可以有效地監控我們的系統,還可以為未來自信地擴展奠定基礎。


?參考

  • Grafana 文件
  • 普羅米修斯文件

?專案庫

  • Github 上的專案儲存庫

?跟我說話

  • 領英
  • Github
  • 投資組合

以上是使用 Actuator、Prometheus 和 Grafana 建立現代應用程式的可觀測性和監控的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1653
14
CakePHP 教程
1413
52
Laravel 教程
1304
25
PHP教程
1251
29
C# 教程
1224
24
公司安全軟件導致應用無法運行?如何排查和解決? 公司安全軟件導致應用無法運行?如何排查和解決? Apr 19, 2025 pm 04:51 PM

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

如何將姓名轉換為數字以實現排序並保持群組中的一致性? 如何將姓名轉換為數字以實現排序並保持群組中的一致性? Apr 19, 2025 pm 11:30 PM

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

如何使用MapStruct簡化系統對接中的字段映射問題? 如何使用MapStruct簡化系統對接中的字段映射問題? Apr 19, 2025 pm 06:21 PM

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

如何優雅地獲取實體類變量名構建數據庫查詢條件? 如何優雅地獲取實體類變量名構建數據庫查詢條件? Apr 19, 2025 pm 11:42 PM

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

IntelliJ IDEA是如何在不輸出日誌的情況下識別Spring Boot項目的端口號的? IntelliJ IDEA是如何在不輸出日誌的情況下識別Spring Boot項目的端口號的? Apr 19, 2025 pm 11:45 PM

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

Java對像如何安全地轉換為數組? Java對像如何安全地轉換為數組? Apr 19, 2025 pm 11:33 PM

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

電商平台SKU和SPU數據庫設計:如何兼顧用戶自定義屬性和無屬性商品? 電商平台SKU和SPU數據庫設計:如何兼顧用戶自定義屬性和無屬性商品? Apr 19, 2025 pm 11:27 PM

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

如何利用Redis緩存方案高效實現產品排行榜列表的需求? 如何利用Redis緩存方案高效實現產品排行榜列表的需求? Apr 19, 2025 pm 11:36 PM

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

See all articles