開發與維運

APM-Elastic Stack 實戰手冊

作者:胡徵南

應用程序性能管理(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

  1. 安裝

通過 APM 服務端地址下載合適的服務端安裝包。

下載地址 :https://www.elastic.co/cn/downloads/apm

  1. 設置和配置

通過 apm-server setup [FLAGS] 可以設置APM 服務端

FLAGS :

-h, --help 查看幫助。

--index-management 設置關聯 Elasticsearch 索引管理,包括:索引模板、生命週期管理策略、寫入別名。

--pipelines 註冊定義在 ingest/pipeline/definition.json 中的管道。

配置示例:

apm-server setup --index-management

apm-server setup --pipelines

  1. 啟動

通過啟動命令啟動 APM 服務端,啟動命令:

./apm-server -e

指定輸出 Elasticsearch 及 APM 服務端

./apm-server -e -E output.elasticsearch.hosts=ElasticsearchAddress:9200 -E apm-server.host=localhost:8200

步驟二:配置APM Agent

  1. 下載 APM 代理 可以通過 Maven Central 下載代理 Jar 包,不需要再項目中引入依賴,

下載地址:https://search.maven.org/search?q=a:elastic-apm-agent

  1. 使用 javaagent 參數啟動應用,並設置好對應的配置項。

elastic.apm.service_name 為服務名稱

elastic.apm.server_urls 為服務端請求地址

elastic.apm.application_packages 為項目包路徑

  1. 啟動參數示例:
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 查看可視化面板

  1. 啟動 Kibana
  2. 在 Kibana 中 可觀測性(Observability) 菜單下選擇 APM,如圖1

圖6 Observability 菜單中選擇APM

圖7 服務健康狀態視圖

圖8 服務鏈路追蹤視圖

圖9 服務拓撲圖視圖

Service Map

APM 的 服務拓撲( Service map )功能可以實時顯示應用架構的服務拓撲圖。可以展示服務是如何連接及服務相關指標,如:事務處理耗時、每分鐘請求數量、每分鐘錯誤數量等。APM 服務拓撲圖也可以結合機器學習功能,基於異常檢測得得分的實時健康狀態顯示。以上功能可用於幫助開發人員快速、可視化的觀測到服務的狀態和健康程度。

APM 服務拓撲圖有兩種顯示方式,如下圖所示:

  1. 全局顯示:所有安裝了APM客戶端的服務及它們的連接關係。
  2. 指定服務顯示:高亮選中服務的連接關係。

圖10

服務拓撲是通過開箱即用的服務鏈路追蹤實現的。即:未正確配置追蹤服務的項目不會被追蹤到,也不會在服務拓撲圖中顯示。

服務拓撲圖中選擇關注的服務,可以查看對應服務的詳細信息。

圖11

通過機器學習自動檢測事務調用得分,並在服務拓撲圖中通過圖例顯示。

異常得分小於25,服務處於健康狀態
最大異常得分介於 26-74,服務可能處於亞健康狀態
最大異常得分大於 75,服務出於不健康狀態

表1

服務拓撲圖中有兩種形狀的節點。

圓形:檢測到的服務,圖標取決於使用了那種代理。

鑽石形:數據庫,外部系統和消息。根據已知的實體顯示對於的圖標,如 Elasticsearch 的圖標。

參考文獻

Leave a Reply

Your email address will not be published. Required fields are marked *