標籤:

如何通過 SOFALookout & Prometheus 監控 SpringBoot 項目

如何通過 SOFALookout & Prometheus 監控 SpringBoot 項目

來自專欄 sofastack5 人贊了文章

SOFA (Scalable Open Financial Architecture ) 是螞蟻金服自主研發的金融級分散式中間件,包含了構建金融級雲原生架構所需的各個組件,在螞蟻金服內部經過了將近 10 年的實踐以及發展。

SOFA 目前包含了微服務研發框架,RPC 框架,服務註冊中心,分散式定時任務,限流/熔斷框架,動態配置推送,分散式鏈路追蹤,Metrics 監控度量,分散式高可用消息隊列,分散式事務框架,分散式資料庫代理層,Service Mesh 等組件,是一套分散式架構的完整解決方案,也是在金融場景里錘鍊出來的最佳實踐。

本文知識點:

SOFALookout , 是一個利用多維度的 Metrics 對目標系統進行度量和監控的項目,SOFALookout 項目分為客戶端部分與伺服器端部分。

由於伺服器端代碼暫未開源,本文將手把手教你如何將 SOFALookout 的客戶端採集到的 Metrics 上報給 Prometheus 進行監控。

SOFALookout

實操:

通過四步,實現通過 SOFALookout & Prometheus 監控 SpringBoot 項目

1. 創建個簡單 SpringBoot 的 demo 項目

  • 創建 demo 工程

可以通過 start.spring.io/ 創建個 demo 項目(附加個 Web 模塊便於演示)。 或者也可以本地快速構建項目,在 *nix系統創建項目結構 mkdir -p demo/src/main/java/hello:

demo└── src └── main └── java └── hello

  • 創建個 pom.xml 文件

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.alipay.sofa</groupId> <artifactId>lookout-prom-integation-demo</artifactId> <version>0.1.0</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.2.RELEASE</version> </parent> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-releases</id> <name>Spring Releases</name> <url>https://repo.spring.io/libs-release</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-releases</id> <name>Spring Releases</name> <url>https://repo.spring.io/libs-release</url> </pluginRepository> </pluginRepositories></project>

  • 創建個啟動類

在 hello 的包下創建 Application.java文件

package hello;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}

2. 配置生效 Prometheus 的 Exports

  • 在 pom.xml 中添加依賴

增加 "lookout-sofa-boot-starter","lookout-reg-prometheus" 兩個模塊的依賴,版本用最新的(這裡以 1.4.1 為例)

<dependency> <groupId>com.alipay.sofa.lookout</groupId> <artifactId>lookout-sofa-boot-starter</artifactId> <version>1.4.1</version></dependency><dependency> <groupId>com.alipay.sofa.lookout</groupId> <artifactId>lookout-reg-prometheus</artifactId> <version>1.4.1</version></dependency>

  • 新增應用配置文件

首先創建個資源目錄mkdir -p demo/src/main/resources,然後新建個 application.properties 文件(或 YAML 文件)。

echo "spring.application.name=demo" > demo/src/main/resources/application.properties

需要注意的是應用名是必須指定的!

  • 檢查啟動狀態

經過上面簡單的配置,就可以運行 demo 了,並訪問 http://localhost:9494進行確認

? demo curl http://localhost:9494/<html><head><title>Lookout Client Exporter</title></head><body><h1>Lookout Client Exporter</h1><p><a href="/metrics">Metrics</a></p></body></html>%

默認 Jvm 的相關指標已經可以獲得了。

3. 部署 Prometheus 服務

確認 demo 應用在 9494 埠已經正常提供服務後,就可以編輯一個 prometheus.yml 來抓取該 demo 項目信息,假設本機 IP 地址為 10.15.232.101,那麼可以配置如下的 prometheus.yml

scrape_configs: - job_name: lookout-client scrape_interval: 5s static_configs: - targets: [10.15.232.101:9494]

目標的 IP 地址可以是LAN地址,不要是 localhost,要保證 prometheus 容器內部可以訪問到。

有了上面的配置文件之後,可以再到本地通過 Docker 來啟動 Prometheus:

docker run -d -p 9090:9090 -v $PWD/prometheus.yml:/etc/prometheus/prometheus.yml --name prom prom/prometheus:master

然後通過瀏覽器訪問: http://localhost:9090,再通過 PromQL 查詢即可查詢到對應的 Metrics (比如:http://localhost:9090/graph?g0.range_input=1h&g0.expr=jvm_memory_heap_used&g0.tab=0)。

客戶端更多內置的 Metrics 指標 (github.com/alipay/sofa-)

4. 通過 Lookout SDK 新增業務埋點

下面我們演示如何統計某個 web 服務被請求的次數,首頁在 demo 應用中新增個 RestController 代碼如下:

...import com.alipay.lookout.api.*;@Autowiredprivate Registry registry;@GetMapping("/echo/{words}")public String echo(@PathVariable String words) { Id id = registry.createId("http_requests_total") .withTag("host", NetworkUtil.getLocalAddress().getHostName()); registry.counter(id).inc(); return words;}

重啟應用,並訪問:

? demo curl http://localhost:8080/echo/hellohello%

每訪問一次,請求計數器自增一次。然後我們可以在 Prometheus 控制台進行查看(時間跨度可以選擇短一點,比如 1~5 分鐘)。

總結:

以上內容演示了 Count 型 Metrics 的使用,更多使用說明和 Metrics 類型可以參考 SOFALookout (github.com/alipay/sofa-) 的 WIKI 文檔。

歡迎大家共同打造 SOFAStack github.com/alipay


推薦閱讀:

什麼項目是寶寶早教的首要?
列個清單吧,給你項目經理應該要知道的25個管理事項
四大人氣健身項目最適合男性健身
非腸不可古法焗腸項目介紹
最敏捷 — AI 任務調度 IT 項目全流程管理平台

TAG:Spring | 項目 |