這系列文章有在我的網站整理成 GitBook 的格式,較易閱讀,提供大家參考。
Elastic APM 是一個能讓你『即時』監控、觀察、分析應用程式及服務的工具,透過收集應用程式內元件之間溝通時的記錄,收集包含各種詳細與效能相關的資訊,例如以下的資訊:
除了效能相關的資訊之外,如果處理中有發生例外狀況的錯誤,甚至是程式錯誤發生時的 stacktrace 也都會被 APM 收集,另外也會順便收集某些有支援的系統或運作環境相關的 metrics,例如:JVM metrics, Go runtime metrics。
Elastic APM 的基本架構如上圖共包含四個主要的元件:
Elastic APM 的資料,每一筆都會是一個事件 (event),而這些事件總共有四種的類型:
除此之外,events 當中都可以在 APM Agent 端自行加上我們自己想收集的額外資訊,並定義在擴充的欄位當中。
以下分別對四種資料類型進行說明。
Spans (跨度,可理解成片刻的一小段時間),表示一個活動的開始到結束的記錄,也就是代表一段程式執行時發生的資訊,並且因為一連串執行與處理的過程中,一個 Span 可能也會與其他的 Span 有上、下層的關係,在 Span 裡面會記錄:
transaction.id
:屬於哪一個 Transaction。parent.id
:如果是另個 Transaction 或是 Span 有上、下層關係時,會記錄他的上層。name
。type
、subtype
、action
。stacktrace
的資訊。Transactions (交易),針對一個相對於 Span 更高層級的事件 (event) 的請求與回應,例如:發送一個外部的 Request、批次的作業處理、背景執行的工作、或是在程式執行中自行定義的一個處理行為…等,都可以是一個 Transaction,在一個 Transaction 之中,可以包含 0 到多個 Spans,Transaction 裡面會記錄:
timestamp
。unique id
、type
、name
。environment
、framework
、language
。hostname
、IP
。pid
。domain
、port
、query string
。labels
或 custom
欄位的資訊。Errors (錯誤),當 APM Agent 收到 Errors 的資訊時,會產生 Errors 這樣的 event,並且在裡面會記錄發生當時的 exception
資訊,或是 Error 發生當下的 logs
,Error 裡面會記錄:
exception
或 error log
所收集到的 stacktrace
資訊。culprit
記錄錯誤發生的地方。transaction.id
。environment
、framework
、language
。hostname
、IP
。pid
。domain
、port
、query string
。labels
或 custom
欄位的資訊。Metrics (指標),APM Agent 會收集一些最基本的主機層級 (host-level) 的 metrics,例如:
trasc-id
、span-id
、parent-id
,來實現分散式追縱的功能,讓我們能透過 Kibana 能輕易的觀察一個橫跨多個服務的請求,過程中哪個環節的執行效能較慢、或是在發生錯誤時能快速的查看歷程中發生什麼樣的事。查看最新 Elasticsearch 或是 Elastic Stack 教育訓練資訊: https://training.onedoggo.com
歡迎追蹤我的 FB 粉絲頁: 喬叔 - Elastic Stack 技術交流
不論是技術分享的文章、公開線上分享、或是實體課程資訊,都會在粉絲頁通知大家哦!