如何通過 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 工程
可以通過 http://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 指標 (https://github.com/alipay/sofa-lookout/wiki/client-ext-metrics)
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 (https://github.com/alipay/sofa-lookout) 的 WIKI 文檔。
歡迎大家共同打造 SOFAStack https://github.com/alipay
推薦閱讀:
※什麼項目是寶寶早教的首要?
※列個清單吧,給你項目經理應該要知道的25個管理事項
※四大人氣健身項目最適合男性健身
※非腸不可古法焗腸項目介紹
※最敏捷 — AI 任務調度 IT 項目全流程管理平台