這篇文章將簡介怎麼運用 APM client 和 server 端的函式庫來做應用程式層級的監控。
在使用者操作前端網頁時,如果發生了不可預期的錯誤,我們該怎麼記錄起來? 在還沒有使用其他工具前,如果要監控並記錄錯誤,直觀通常就是寫出像是底下的程式,透過實作 logMyErrors
及搭配的後端 API 來協助。
let data;
try {
// 需要測試的語句
data = getData(); // 可拋出例外的函數
} catch (e) {
data = "unknown";
logMyErrors(e); // 把例外物件傳給錯誤處理器
}
當然也有其他工具像是最近幾年也蠻多人使用的 Sentry,不過這系列主要是討論 Elastic Stack,APM 的存在就是為了簡化實作的部分,提供了:
主要提供兩個大家會想知道的答案 (根本只有攻城獅才想知道?!!XDDD)
一套完整的 APM 會由以下組成
APM 記錄了不同類型的資訊:
最重要的就是要先下載並安裝 APM server,裝在本機跑起來之後預設會是 http://localhost:8200
,然後會傳到 http://localhost:9200
的 Elasticsearch,把 apm-server.yml
中的 apm-server.rum.enabled
,使用 Elastic Cloud 的話就是要注意要記得選有 APM 的,選對就會看到如下圖,接著點 kibana 首頁的 Add APM 照著教學裡面自動帶入的參數使用即可。
確認選到有 APM 模組的
按照下圖範例中自動帶入的連結、token
APM agents 主要分成兩種,需要自行加入到專案中,請依照自己常撰寫的語言進行下載配置,下面介紹的是 JS 的部分,其中 serviceName 是用來分類用的,可自行命名。
npm install -S @elastic/apm-rum
var apm = ininApm({
// Override service name from package.json
// Allowed characters: a-z, A-Z, 0-9, -, _, and space
serviceName: "virus-and-where-to-find-them",
// Use if APM Server requires a token
secretToken: "",
// Set custom APM Server URL (default: http://localhost:8200)
serverUrl:
"https://e9047bd2f1e84a619b8462911fe9378b.apm.asia-east1.gcp.elastic-cloud.com:443",
});
APM agents 在配置好後通常會自動蒐集相關可以蒐集的數據資訊,應該理論上就可以從這些 client 或 Server 中蒐集的數據找到程式的效能瓶頸,當然其他進階的部分還是要看相關 API 進行相關程式碼撰寫,初步可以看出的相關資訊可能如下:
進行網頁操作後產生的數據範例