「譯」生產環境下的Node.js——開源監控工具

【譯】生產環境下的Node.js——開源監控工具

你認為Node.js應用程序可以擁有的最重要的功能是什麼? 是花哨的全文模糊匹配搜索,還是用socket進行實時聊天呢? 你能告訴我可以添加到Node.js應用中的最高級,最驚人和最吸引人的功能是什麼麼?

想知道我的麼?高性能和不間斷服務。高性能應用程序需要做好以下三點:

  1. 最短的停機時間;
  2. 可預測的資源使用率;
  3. 根據負載有效擴展

在第1部分,Node.js要監控的關鍵指標中,我們討論了您應該監控的關鍵Node.js指標,以便了解應用程序的運行狀況。 我還解釋了你應該避免的Node.js中的錯誤做法,例如阻塞線程和造成內存洩漏,還有一些巧妙的技巧可以用來提高應用程序的性能,比如使用集群模塊創建工作進程和將長時間運行的任務從主線程分離開來用獨立線程運行。

在本文中,我將描述如何使用5種不同的開源工具監控Node.js應用程序。它們可能沒有像Sematext或Datadog那樣功能全面,但它們是開源產品,可以完全由自己控制。

「譯」生產環境下的Node.js——開源監控工具

Appmetrics

Node應用指標監控看板顯示了運行中的Node.js應用程序的性能數據。這是一個簡單的模塊,在Node.js入口文件的頂部應用並初始化。你可以通過在終端中運行以下命令從npm安裝。

$ npm install appmetrics-dash
複製代碼

Appmetrics提供了一個非常易於使用的Web儀表板。為了獲得所有由應用程序創建的HTTP服務的儀表板,你需要做的是在app.js(或者以其他命名的入口文件)文件中添加以下代碼段。

// Before all other 'require' statements
require('appmetrics-dash').attach()
複製代碼

之後你將通過這個請求路徑/appmetrics-dash中看到大量有用的指標。

  • CPU Profiling
  • HTTP傳入請求
  • HTTP吞吐量
  • 平均響應時間(前5名)
  • CPU
  • 內存
  • 堆(Heap)
  • 事件循環時間(Event Loop Times)
  • 環境
  • 其他請求
  • HTTP出站請求

此工具不僅顯示指標。它允許您直接從儀表板生成Node.js報告和堆快照(Heap Snapshots)。 除此之外,您還可以使用Flame Graphs,非常酷的開源工具。

「譯」生產環境下的Node.js——開源監控工具

Express Status Monitor

Express.js是當前Node.js開發人員的的首選框架。 Express Status Monitor是一個非常簡單的獨立模塊,您可以將其添加到Express應用。它公開了一個/status路由,在Socket.io和Chart.js的幫助下報告實時服務器指標。

從npm安裝即可。

$ npm install express-status-monitor
複製代碼

安裝完這個模塊之後,你需要在其他中間件或者路由之前添加它。

app.use(require('express-status-monitor')())
複製代碼

之後一旦你運行你的應用,你就可以通過/status路由檢查你的Node.js指標。

「譯」生產環境下的Node.js——開源監控工具

Prometheus

除非你生活在原始時代,不然你一定聽說過Prometheus。這是目前我們能使用的最著名的開源監控工具。Prometheus 100%開源並由社區驅動。所有的組件在遵從Apache 2 License開源協議並可以從GitHub下載。它是由CNCF(Cloud Native Computing Foundation)管理並已經畢業成員項目之一,跟它同樣的成員項目包括Kubernetes和Fluentd等。

要開始使用Prometheus進行監控,您需要下載最新版本並進行安裝。

$ tar xvfz prometheus-\\*.tar.gz
$ cd prometheus-\\*
複製代碼

然後通過運行可執行文件啟動它,但在運行此命令之前,需要創建一個prometheus.yml文件。 它是一個配置文件,用於配置在哪些targets上,通過抓取HTTP端點數據監控哪些指標。

# prometheus.yml
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 1s
static_configs:
- targets: ['127.0.0.1:3000']
labels:
service: 'test-prom'
group: 'production'
複製代碼

現在你可以使用Prometheus了。

$ ./prometheus --config.file=prometheus.yml
複製代碼

但是,我很懶,而且我非常喜歡Docker。 所以我的做法是運行官方的Prometheus Docker鏡像,避免下載它的所有麻煩。

Prometheus and Docker

首先,進到Node.js應用程序的根目錄。在這裡,創建一個prometheus-data目錄並將prometheus.yml文件放入其中。完成此操作後,運行Prometheus Docker容器。

獲取正式的Prometheus Docker鏡像並使用docker run命令運行該鏡像。

$ docker run -d \\
--name prometheus \\
--network="host" \\
-v "$(pwd)/prometheus-data":/prometheus-data \\
prom/prometheus \\
--config.file=/prometheus-data/prometheus.yml
複製代碼

我選擇使用-network =“host”運行容器,讓Prometheus容器可以通過本機localhost地址訪問,並且這樣做,Node.js應用程序的也能通過本機HTTP端口訪問到。否則,如果你將Prometheus和Node.js分別運行在容器內,則需要在兩者之間建立一個網絡,以便彼此之間只能相互訪問到。

-v選項用於將prometheus-data目錄從主機映射到容器內的同名目錄。

在Prometheus容器運行後,需要在Node.js應用程序中添加配置的代碼以暴露一個監控數據接口。 首先需要從npm安裝適用於Node.js的Prometheus客戶端。

$ npm install prom-client
複製代碼

接在添加相關Prometheus相關配置代碼

// after all 'require' statements
const client = require('prom-client')
const collectDefaultMetrics = client.collectDefaultMetrics
collectDefaultMetrics({ timeout: 1000 })
app.get('/metrics', (req, res) => {
res.set('Content-Type', client.register.contentType)
res.end(client.register.metrics())
})
複製代碼

接下來你只需運行Node.js應用之後,通過http://localhost:9090/graph就可以看到Prometheus圖表

「譯」生產環境下的Node.js——開源監控工具

Clinic.js

Clinic.js包含三個工具,可幫助診斷和查明Node.js性能問題。它的使用非常簡單。你需要做的就是從npm安裝模塊並運行它。它將為您生成報告,使故障排除變得更加容易。

使用如下命令安裝Clinic.js

$ npm install clinic
複製代碼

一旦安裝完畢,就可以選擇要生成的報告類型了。你可以選擇以下三種報告類型。

  • Doctor
  1. 通過注入探針來收集指標
  2. 評估健康和啟發式
  3. 提供修復推薦
  • Bubbleprof- 一種全新的,完全獨特的方法來分析Node.js代碼
  1. 使用async_hooks收集指標
  2. 跟蹤操作之間的延遲
  3. 創建氣泡圖
  • Flame - 使用火焰圖揭示代碼中的瓶頸和熱路徑
  1. 通過CPU採樣收集指標
  2. 跟蹤棧頂頻率
  3. 創建火焰圖

讓我們從運行Doctor並測試node.js應用程序開始。

$ clinic doctor -- node app.js
複製代碼

在程序運行時,使用壓測工具運行負載測試。

「譯」生產環境下的Node.js——開源監控工具

$ loadtest -n 1000 -c 100 [http://localhost:3000/api](http://localhost:3000/api)
複製代碼

一旦完成運行,停止服務器和Clinic.js Doctor將打開您可以查看的報告。

使用相同的方法,您可以運行Bubbleprof或Flame並獲取相應工具的圖形報告。

「譯」生產環境下的Node.js——開源監控工具

「譯」生產環境下的Node.js——開源監控工具

PM2

使用PM2在生產中運行Node.js應用程序變得更加容易。 它是一個進程管理器,可以輕鬆地讓您以集群模式運行應用程序。通俗來說,它將為您的主機每個CPU核心都生成一個進程。

首先安裝PM2

$ npm install pm2 -g
複製代碼

安裝完成後,如果您的主源文件是app.js,則通過在終端中運行此命令來生成PM2守護程序。

$ pm2 start app.js -i 0
複製代碼

-i 0標誌實例個數。這將以集群模式運行Node.js應用程序,其中數字0表示CPU核心數。你可以手動輸入你想要的任何數字,但讓PM2計算核心個數並自動產生相應個數的工作進程更簡單些。

使用PM2查看Node.js監控數據也很容易

$ pm2 monit
複製代碼

此命令將在終端中打開儀表板。在這裡,您可以監視進程,日誌,循環延遲,進程內存和CPU。

「譯」生產環境下的Node.js——開源監控工具

使用開源工具將監控Node.js方案進行包裝

性能指標對於讓用戶滿意至關重要。在本文中,我向您展示瞭如何使用5種不同的開源工具向Node.js應用程序添加監視。 在瞭解了本系列第1部分Node.js要監控的關鍵指標之後,添加工具來監控現實生活中的應用程序是自然的學習進程。 本系列的最後一部分將介紹使用Sematext進行生產環境下Node.js監控。

如果你想查看示例代碼,這裡是一個包含所有的實例代碼 repo。你還可以克隆下來並選擇任何工具打開。

如果你需要更多軟件的全棧可觀察性,請查看Sematext。 我們正在推動開源我們的產品併產生影響。

原文:Node.js Open-Source Monitoring Tools

  • Prometheus操作指南
  • Prometheus 入門與實踐
"


分享到:


相關文章: