
創作人:胡征南
審稿人:楊振濤
應用程式性能管理(Application Performance Management)簡稱 APM。主要功能為監視和管理軟體應用程式性能和可用性。
Elastic APM 是一款基于Elastic 技術棧的免費及開放的性能監控系統。用于實時監控軟體服務和應用程式的各項性能名額,如:請求通路的各項名額、通路耗時、資料庫查詢、緩存調用、外部 HTTP 請求等。便于開發人員快速排查和修複各種性能問題。
Elastic APM 也會自動采集各種系統異常。開發人員可以通過追蹤異常的程式棧,識别系統異常發生的時間和次數。
自動采集的系統名額也是 Elastic APM 一個非常重要的資料源。采集次元主要包括,主控端級别和服務代理(Agent)級别,如:使用 Java 語言系統編寫的應用程式的 JVM 名額,Go 語言運作環境的運作名額等。
Elastic APM 由4個元件組成:APM 代理、APM 服務端、Elasticsearch 和 Kibana。
圖1
APM Agent
APM Agent 為通過與應用服務相同的語言編寫的開源類庫。通過按照其他應用程式服務一樣安裝代理。安裝完成之後,即可通過代理收集各項應用程式名額和運作時異常。收集的資料将在本都緩存較短時間後發送至 APM Server。
支援的語言主要包括:Go、Java、.NET、Node.js、Python、Ruby、JavaScript。
APM Server
APM Server 是一款收集 APM Agent 資料、可獨立部署的開源應用程式。APM Server 使得代理變得輕量級、防範安全風險、并提高了 Elastic 技術棧的跨語言能力。APM Server 将通過 APM Agent 收集的資料進行驗證、處理後存入對應的 Elasticsearch 索引。經過幾秒種後,就可以通過 Kibana APM 應用觀測到可視化後的應用程式性能資料了。
Elasticsearch
Elasticsearch 是一款高度可伸縮的全文檢索和分析引擎。用于近實時存儲、搜尋和分析大量資料。在 Elastic APM 中,Elasticsearch 用于存儲和聚合性能監控名額。
Kibana
Kibana 是一款将 Elasticsearch 資料進行分析和可視化的開源資料分析平台。用于對檢索、展示、操作 Elasticsearch 中存儲的資料。
APM術語
Service
在 APM agent 配置中進行設定,以将特定的 APM agent 組辨別為單個服務,這是一種邏輯上辨別一組事務的方法。
Transaction
組成一個服務的請求和響應,例如登入 api 調用,每個調用由單獨的 span 組成。
Span
事務中的單個事件,例如方法調用,資料庫查詢或緩存插入或檢索,即需要花費時間才能完成的任何事件。
Erorrs
具有比對的異常或日志消息的異常組。
Trace
代表請求的整個過程
。
它們之間的關系可以用如下的圖來表示:
圖2
分布式 Tracing
當請求從一個微服務流向另一個微服務時,追蹤器添加邏輯以建立唯一的追蹤識别代碼, 跨度 id
圖3
圖4
圖5
APM的安裝和使用
啟動步驟
配置啟動 APM 主要包含三個步驟:安裝 APM Server、配置 APM Agent、在 Kibana 中配置可視化面闆。
步驟一:安裝 APM Server
- 安裝
通過 APM 服務端位址下載下傳合适的服務端安裝包。
下載下傳位址 : https://www.elastic.co/cn/downloads/apm
- 設定和配置
通過
apm-server setup [FLAGS]
可以設定APM 服務端
FLAGS :,
-h
檢視幫助。
--help
設定關聯 Elasticsearch 索引管理,包括:索引模闆、生命周期管理政策、寫入别名。
--index-management
注冊定義在
--pipelines
中的管道。
ingest/pipeline/definition.json
配置示例:
apm-server setup --index-management
apm-server setup --pipelines
- 啟動
通過啟動指令啟動 APM 服務端,啟動指令:
./apm-server -e
指定輸出 Elasticsearch 及 APM 服務端
./apm-server -e -E output.elasticsearch.hosts=ElasticsearchAddress:9200 -E apm-server.host=localhost:8200
步驟二:配置APM Agent
- 下載下傳 APM 代理 可以通過 Maven Central 下載下傳代理 Jar 包,不需要再項目中引入依賴,
下載下傳位址: https://search.maven.org/search?q=a:elastic-apm-agent
- 使用 javaagent 參數啟動應用,并設定好對應的配置項。
elastic.apm.service_name
為服務名稱
elastic.apm.server_urls
為服務端請求位址
elastic.apm.application_packages
為項目包路徑
- 啟動參數示例:
java -javaagent:/path/to/elastic-apm-agent-<version>.jar \
-Delastic.apm.service_name=my-application \
-Delastic.apm.server_urls=http://localhost:8200 \
-Delastic.apm.secret_token= \
-Delastic.apm.application_packages=org.example \
-jar my-application.jar
步驟三:在 Kibana 檢視可視化面闆
- 啟動 Kibana
- 在 Kibana 中 可觀測性(Observability) 菜單下選擇 APM,如圖1
圖6 Observability 菜單中選擇APM
圖7 服務健康狀态視圖
圖8 服務鍊路追蹤視圖
圖9 服務拓撲圖視圖
Service Map
APM 的 服務拓撲( Service map )功能可以實時顯示應用架構的服務拓撲圖。可以展示服務是如何連接配接及服務相關名額,如:事務處理耗時、每分鐘請求數量、每分鐘錯誤數量等。APM 服務拓撲圖也可以結合機器學習功能,基于異常檢測得得分的實時健康狀态顯示。以上功能可用于幫助開發人員快速、可視化的觀測到服務的狀态和健康程度。
APM 服務拓撲圖有兩種顯示方式,如下圖所示:
- 全局顯示:所有安裝了APM用戶端的服務及它們的連接配接關系。
- 指定服務顯示:高亮選中服務的連接配接關系。
圖10
服務拓撲是通過開箱即用的服務鍊路追蹤實作的。即:未正确配置追蹤服務的項目不會被追蹤到,也不會在服務拓撲圖中顯示。
服務拓撲圖中選擇關注的服務,可以檢視對應服務的詳細資訊。
圖11
通過機器學習自動檢測事務調用得分,并在服務拓撲圖中通過圖例顯示。
異常得分小于25,服務處于健康狀态 |
---|
最大異常得分介于 26-74,服務可能處于亞健康狀态 |
最大異常得分大于 75,服務出于不健康狀态 |
表1
服務拓撲圖中有兩種形狀的節點。
圓形:檢測到的服務,圖示取決于使用了那種代理。
鑽石形:資料庫,外部系統和消息。根據已知的實體顯示對于的圖示,如 Elasticsearch 的圖示。
參考文獻
創作人簡介:
胡征南,杭州光雲科技 Java 開發專家,獲 ECE 認證、CNCF K8S 認證。