天天看點

APM 追蹤 Java 應用性能

> 在分布式系統下,如何去發現某一些服務的工作性能情況,以及追蹤一次會話相關的服務調用呢,通過 Elastic APM 服務,就可以很簡單的對不同開發語言的程式進行統一監控。

#### 架構設計

涉及到 Elastic Stack 中 Metricbeat 是用于采集 Kubernetes 相關的性能名額, Elasticsearch 是用于對于資料落地存儲和搜尋的引擎, Kibana 是用于對資料可視化的工具。

APM 追蹤 Java 應用性能

本例子采用 Java 開發語言,由于 Java Agent 是在 Class 被裝載到 ClassLoader 之前進行攔截并插入自定義的位元組碼,是以可以實作無侵入式的零代碼修改監控。

#### APM

APM 工具用于觀測應用的運作情況,例如是否線上、資源使用情況、請求情況、響應時間等等,通過 APM 工具記錄每一個請求的詳細情況,進而最大程式的知道應用的情況而采取一些優化的手段。

Span 是指一次鍊路的調用,例如是一次通路資料庫的動作,或者是一次 RPC 的調用,Span 中還記錄自身的 id,調用鍊路來源的父 id,時間戳,标記資訊以及調用資訊等。

Trace 是指一次完整的調用鍊的跟蹤,包括一個或多個 Span 構成,例如在分布式系統下,使用者在前台購買了一個商品,這個行為就會産生一次或多次 Trace,其中一個 Trace 下可能有多個 Span 調用。

APM 追蹤 Java 應用性能

#### 實施方法

##### Java Application

克隆 Java 應用源碼

git clone

https://github.com/elastic/opbeans-java.git

打包成 Jar 包

cd opbeans-java/opbeans

mvn package

APM 追蹤 Java 應用性能

##### Java Agent

通過 Java Agent 注入位元組流進行追蹤 Java 應用的運作情況

./elastic-apm-agent-1.18.1.jar \
-Delastic.apm.service_name=opbeans-java \
-Delastic.apm.server_urls=http://apm:8200 \
-Delastic.apm.secret_token=xxx \
-Delastic.apm.application_packages=co.elastic.apm.opbeans -jar \
./target/opbeans-0.0.1-SNAPSHOT.jar      
APM 追蹤 Java 應用性能

#### 可視化展示

通過 Kibana 中的 Dashboard 功能

展示目前 Java 應用的運作情況

APM 追蹤 Java 應用性能
APM 追蹤 Java 應用性能
APM 追蹤 Java 應用性能