fbpx

Elastic APM 是什麼 ? 效能監控功能介紹、基本架構與4種事件類型、2個應用場景,看這篇就夠了!

Elastic APM 是什麼 ? 

Elastic APM (Application Performance Monitoring) 是一個免費開放,基於 Elastic Stack 的監測工具,能夠即時監控、觀測、分析應用程式及服務的效能。〔更多關於 Elastic Stack 介紹請參考 10 分鐘帶你了解 Elastic (ELK) 是什麼?

Elastic APM 透過收集前後端的請求/回應、資料庫查詢、快取調用、外部 HTTP 請求…等工作的響應時間與各種指標,幫助開發人員快速檢測、診斷並修正效能瓶頸。

Elastic APM 還會自動收集未處理的錯誤和異常,在錯誤發生時立即識別、發出告警,開發人員更可以鎖定特定錯誤發生的次數、頻率,藉此探索更深層的效能問題肇因。

為什麼用 APM 監控服務很重要?

現今的應用程序在高度分佈式的基礎架構上運行,這些應用程式由各種元件組成,監控起來非常複雜。

透過 APM 觀測應用程式與元件的日誌 (Log)、指標 (Metric)、軌跡 (Trace),並透過儀表板呈現這些數據,可以更輕鬆排除故障和管理效能。〔更多細節請參考Observability 3 本柱+Profile 打造完整可觀測性解決方案

舉例來說,若有多個服務同時運行在同一台主機上,透過 APM 可以分析每個服務消耗的資源,例如 CPU、記憶體和流量,這有助於確定特定 API 在哪裡花費過多時間,或哪些服務佔用了不必要的資源,服務效能監控還有助於優化資源分配,確保所有服務高效運行。

APM 包含哪些功能? 

根據 Gartner 的說法,APM 工具需要滿足三個主要標準功能

  1. 前端監控
    包括 PC 端和行動端用戶的用戶體驗監控,以及全面的事務監控,在文章後段我們將提到 RUM (真實用戶監測),即屬於這個範疇。
  2. 應用程式的發現、追蹤和診斷
    包含各種應用程式元素 (application elements) 的自動發現,如 Web 伺服器、平台、框架、微服務等,確認它們彼此的關係並診斷代碼。最後,追蹤應用程式如何響應用戶請求。
  3. 分析
    記錄應用程式生成的所有數據,然後使用各種技術 (如ML) 來發現有意義的模式。它可以協助找到效能問題的根本原因,並預測未來可能發生的問題。

Elastic APM 除了具備這三個標準功能,更在 2022 年 Gartner 針對多家 APM 供應商的調查報告中,被評鑑為「遠見者 (Visionaries)」,意味 Elastic 具備專有 agent 的技術、分佈式追蹤觀察應用程式完整事務行為的能力。

Elastic Gartner Magic Qaudrant

Elastic APM 的基本架構

簡單介紹 APM 功能、用途以及重要性後,本章節將說明 APM 的架構。〔註:本章節的詳細內容請參考原廠文件 Components and documentation

Elastic APM 由四個元件組成:APM Agent、APM Server、ElasticsearchKibana

Elastic APM 架構

Elastic APM 架構圖

APM Agent

APM Agent 用於檢測代碼,並在應用程式運行時收集效能相關的數據和錯誤資訊,這些數據會發送到 APM Server。APM Agent 提供各種語言撰寫成的函式庫 (Library),使用者可以直接套用在既有程式中,包含 Go、iOS、Java、.NET、Node.js、PHP、Python、Ruby、JavaScript Real User Monitoring (RUM),每種語言的 agent 官方都有提供文件,可自行查看。

APM Server

APM Server 負責從 APM agent 接收效能數據,它被設計成獨立的組件以保持輕量以及避開安全性風險,並提高整個 Elastic Stack 的兼容性。

APM Server 驗證和處理來自 APM agent 的事件後,會將數據轉換為 Elasticsearch 文檔進行索引、儲存,這些數據可以透過 Kibana APM 查看。

Elasticsearch

Elasticsearch 用於儲存 APM 效能指標等數據,它是一個高度可擴展的免費和開放的全文搜索和分析引擎,能夠近乎實時地快速儲存、搜索和分析大量數據。關於 Elasticsearch 更詳細的介紹,請看我們的介紹文章 10 分鐘了解強大搜尋引擎 ー ElasticsearchElasticsearch 介紹 – 基本概念篇

Kibana APM app

Kibana 是一個免費開放的視覺化分析平台,用來和 Elasticsearch 搭配服用的 UI 工具,它可以搜索、查看及分析儲存在 Elasticsearch 中的數據。更多 Kibana 的介紹請看我們的介紹文章 Kibana – 通往 Elastic Stack 的窗口10 個能透過 Kibana 儀表版(Dashboard)解決的常見問題

Elastic APM 的四種資料模型

Elastic APM Agent 從檢測的應用程式中擷取不同類型的資訊,稱為「事件 (events)」,事件包含跨度 (spans)、事務 (transactions)、錯誤 (errors) 和指標 (metrics)。除此之外,事件還可以包含額外的元數據 (metadata),進一步豐富數據並讓監控更全面。

以下針對跨度、事務、錯誤和指標簡單介紹。

跨度 Spans

跨度是特定代碼執行的資訊,紀錄某個活動的開始與結束,並且它們可能與其他跨度具有父/子 (上/下層)關係。APM agent 會自動檢測函式庫以從應用程式中擷取跨度,你可以使用 agent API 對特定代碼路徑進行自定義的檢測。預設情況下,跨度會存在跨度索引中,與事務的索引分開。

丟棄的跨度 (dropped spans)

出於效能考量,APM agent 會選擇採樣或忽略跨度,以此來避免極端狀況,例如超過 100 個跨度的長時間運行的事務,以免 agent 和 APM server 過載。當這種情況發生時,APM 將顯示丟棄的跨度數。

遺失的跨度 (Missing spans)

agent 會將跨度與其事務分別傳送到 APM server,因此可能導致跨度遺失。由於 agent 知道一個事務應該有多少跨度,如果預期跨度數不等於 APM server 接收到的跨度數,APM 應用程式將計算並顯示差異。

事務 Transactions

事務是一種特殊的跨度,兩者互相關聯,它們描述了由檢測服務的 Elastic APM Agent 捕獲的事件。事務可以視為的最高級別的事件,例如請求伺服器回應、批次作業、背景執行的工作或自定義事務類型…等。

一個事務會包含:

  • 事務的時間戳
  • UID、type、name
  • 事務發生時環境的資訊

    • Service 的 environment、framework、language
    • Host 的 architecture、hostname、IP
    • Process 的 args、PID、PPID
    • URL 的 full、domain、port、query
    • User 的 email、ID、username

  • 其他使用者自定義的欄位資訊

錯誤 Errors

當錯誤事件發生時,會產生包含錯誤當下的 exception 資訊或 Log。錯誤的資訊包含:

  • 錯誤當下的 stack trace 會記錄在 exception、 log 中,可用於除錯
  • culprit 表示錯誤的來源
  • 與錯誤發生時相關的事務,紀錄在 transaction.id.
  • 記錄錯誤當時環境的資訊:

    • Service 的 environment, framework, language
    • Host 的 architecture, hostname, IP
    • Process 的 args, PID, PPID
    • URL 的 full, domain, port, query
    • User 的 email, ID, username

  • 其他使用者自定義的欄位資訊

指標 Metrics

APM Agent 會自動擷取基本的主機層級 (host-level) 的指標,包括系統、Process 層級的 CPU 和記憶體指標。agent 的特定指標也可以擷取,例如 Java agent 中的 JVM metrics、Go agent 運行的 Go metrics 等。

Elastic APM 的應用場景

APM 基本介紹完畢,我們來看看兩個應用 Elastic APM 的場景。

1. Elastic APM 實現視覺化的分佈式追蹤

當一個 trace (軌跡) 遍歷多個服務,從頭到尾追蹤某個請求 (request),就稱為分佈式追蹤。分佈式追蹤透過追蹤整個請求,來分析整個微服務架構的效能—從最一開始前端網站上的請求,一直到後端資料庫的查詢,具體來說可以找出應用程式在哪裡花費多少時間、在哪裡發生錯誤以及在哪裡形成效能瓶頸。

越來越多企業採用微服務架構,這些服務由不同團隊管理、使用不同程式語言、部署/運行在並不同的容器中。因此了解不同服務拓撲的狀況和效能,對於解決問題和提高可靠性和效率是很重要的。

Elastic APM 支援分佈式追蹤,在一個視圖中分析整個微服務架構的效能。APM UI 中的時間線可視化顯示了所連接的各個服務的所有事務的瀑布視圖:

APM UI 視覺化

APM UI 中還可以針對每個應用程式的追蹤深入探索,查看主機或容器的指標和日誌檔,更快地找到問題的根本原因

APM UI 視覺化

APM UI 視覺化

2. Elastic APM 真實用戶監控 (RUM)

真實用戶監控 RUM (Real User Monitoring) 必須先安裝 Elastic Stack 和 Elastic APM 才能使用(參考原廠文章)。RUM 可以收集前端用戶與 client 端(例如網頁瀏覽器)的互動,幫助我們從真實的使用者行為來了解使用者的體驗,根據這些資訊來優化與提升效能。RUM 的實際應用包含:

  • 找到效能瓶頸,例如發現站點效能對訪問者體驗的影響
  • 藉由用戶 agent 的資訊,可以確定他們最常用的瀏覽器、裝置和平台是哪些,據此來優化應用程式
  • 結合地理位置和個別用戶的效能數據,可以了解網站在全球不同區域的效能
  • RUM 可針對應用程式的服務級別協議 (SLA) 提供洞見和測量數據
  • RUM 可以收集一段時間內用戶訪問和點擊行為的資訊,這些資訊可以做為開發新功能的依據

Elastic APM UI

結論

Elastic APM 是一個強大的監測工具,可幫助開發人員即時追蹤應用程式和服務的效能。尤其是當應用程式在高度分佈式的基礎架構上運行時,APM 監控服務更是重要,透過 APM 可以輕鬆排除故障、管理效能、優化資源分配,確保服務高效運行。

馬上開始使用 Elastic APM 成為你的監測工具,提高服務效能吧!你可以下載 Elastic APM Server 在地端運行,也可以創建一個 Elastic Cloud 集群來試用。當然,你也可以直接聯繫我們,讓我們為你服務!

相關文章