iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 4
0
Elastic Stack on Cloud

前端三分鐘 X Elastic Stack系列 第 4

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

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

APM 簡介

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

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

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

解決的痛點:

  • 方便分析服務是耗什麼資源 (CPU、記憶體、流量)
  • 可以更快的知道哪裡 (某個 API) 花太多時間
  • 可以用來記錄流程面 (非系統掛掉) 的錯誤
    https://ithelp.ithome.com.tw/upload/images/20200906/201300260jvJoBHHVE.jpg

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++) {
    fetch("/");
    fetch("/slow");
    if (index % 17) {
      fetch("/error");
    }
  }
}

安裝 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({
  // 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",
});

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

Kibana 監看 APM

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

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

    時間維度的圖表
    https://ithelp.ithome.com.tw/upload/images/20200906/20130026ELSZpdvXd4.jpg

    各 API 分析,Slow 明顯比較慢
    https://ithelp.ithome.com.tw/upload/images/20200906/20130026iXkyIuoh4j.jpg

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

    可以看出發生的行數
    https://ithelp.ithome.com.tw/upload/images/20200906/20130026JeD8TydYvD.jpg

  • Metrics 基本硬體資訊紀錄

    https://ithelp.ithome.com.tw/upload/images/20200906/20130026bU5pmxDIzy.jpg

  • Service Map 所有的服務地圖

    https://ithelp.ithome.com.tw/upload/images/20200906/20130026NUysYvVZu1.jpg


上一篇
Elastic Metric Quick Start: 監控 Nginx 伺服器狀態 (3)
下一篇
Elastic Observability 簡介: 淺談 Observability 的四大功能 Logs、Metrics、Apm、Uptime (5)
系列文
前端三分鐘 X Elastic Stack31

尚未有邦友留言

立即登入留言