Elastic APM Quick Start 用 APM 傳送 Node.js 服務狀態到 Elasticsearch

Lin Yen-Cheng on 2020-09-04 4 min. read

這篇文章會示範如何安裝並使用 APM (Application Performance Monitoring) 傳送 Node.js 服務狀態到 Elasticsearch 中,並使用 Kibana 即時監控相關資料。

APM 簡介

APM 是 Application Performance Monitoring 的縮寫,主要是即時監控軟體服務的工具,會蒐集效能相關資訊像是 request 回應時間、資料庫 query 時間等等,幫助我們更快找到效能瓶頸去修正。

為什麼服務的監控很重要?

  • 同一台主機可能很多服務,要知道哪些服務是耗哪些資源才有優化方向

解決的痛點:

  • 方便分析服務是耗什麼資源 (CPU、記憶體、流量)
  • 可以更快的知道哪裡 (某個 API) 花太多時間
  • 可以用來記錄流程面 (非系統掛掉) 的錯誤
    SendError

Node.js 實作

Server 端實作大致分成幾個步驟

  • npm install express --save
  • 開 API
    • / 一般 API
    • /slow 回應很慢的 API
    • /erro 拋出錯誤的 API
const app = require("express")();

app.get("/", function (req, res) {
  res.json("Hello World!");
});

app.get("/slow", function (req, res) {
  setTimeout(() => {
    res.json("Hello World!");
  }, 50);
});

app.get("/error", function (req, res) {
  apm.captureError(err);
  res.status(500);
});

app.listen(3000);

Client 端就是在瀏覽器一直打 API,方便我們之後看報表

function test() {
  for (let index = 0; index < 999; index++) &#123;
    fetch("/");
    fetch("/slow");
    if (index % 17) &#123;
      fetch("/error");
    &#125;
  &#125;
&#125;

安裝 APM

  1. npm install elastic-apm-node --save
  2. 把 APM 引入並放在程式最前面
  3. 補上 apm.captureError(err);
// Add this to the VERY top of the first file loaded in your app
var apm = require("elastic-apm-node").start(&#123;
  // Override service name from package.json
  // Allowed characters: a-z, A-Z, 0-9, -, _, and space
  serviceName: "",

  // Use if APM Server requires a token
  secretToken: "",

  // Set custom APM Server URL (default: http://localhost:8200)
  serverUrl:
    "https://18f3dcb3963748b7b2014755329bded7.apm.asia-east1.gcp.elastic-cloud.com:443",
&#125;);

app.get("/error", function (req, res) &#123;
  var err = new Error("Ups, something broke!");
  apm.captureError(err);
  res.status(500);
&#125;);

Kibana 監看 APM

目標是讓 APM 的紀錄進來,所以到 Kibana 選單中 Observability 的 APM 監控,有幾個方便的功能:

  • Transactions 記錄各個 API 花了多少時間

    時間維度的圖表
    Transaction

    各 API 分析,Slow 明顯比較慢
    Performance

  • Errors 記錄錯誤是在哪裏發生

    可以看出發生的行數
    Error

  • Metrics 基本硬體資訊紀錄

    Metrics

  • Service Map 所有的服務地圖

    ServiceMap


喜歡這篇文章,請幫忙拍拍手喔 🤣

share