Pandora.js 專業的 Node.js 應用監控管理器,阿里開源

TLDR

Github: github.com/midwayjs/pa…, 歡迎 PR、Issue 和 Star.javascript

Pandora.js 阿里巴巴產出的一個Node.js 應用監控管理器,可讓您對本身的 Node.js 應用瞭若指掌,咱們的目標就是讓應用可管理、可度量、可追蹤。html

咱們自 2014 年開始使用 Node.js 並參與運維工做,Pandora.js 是淘寶 Midway 團隊這些年對企業環境 Node.js 運維監控的一個沉澱與總結。在發展的過程當中,咱們大量使用了社區的開源軟件,此次 Pandora.js 的開源是對社區的回饋。但願 Pandora.js 能讓 Node.js 更好的應用在專業的商業場景上,給予它更好的基礎監控運維能力去服務大規模商業場景。java

同時,這也是阿里巴巴開源的第一個使用了類型系統的 Node.js 軟件。它使用的是 TypeScript,爲 Pandora.js 帶來了史無前例的邏輯健壯性。node

歡迎您來體驗,同時更歡迎您基於 Pandora.js 建構您的 Node.js 運維基礎設施。git

什麼是 Pandora.js

就像前面提到的同樣,Pandora.js 是一個 Node.js 應用監控管理器。它集成了多種類型的能力諸如:監控、鏈路追蹤、調試、進程管理等等。一個一個講太過凌亂,這裏分爲幾個大範疇:github

  1. 讓業務更易追蹤
    • 基於 Open-tracing 實現了業務鏈路追蹤系統。
    • 實時追蹤每一個請求鏈路,讓每次請求再也不是黑盒。在運行時直觀的看出接口或頁面慢在哪裏、錯在哪裏、超時在哪裏。
    • 能夠實時追蹤多種基礎中間件的用量及錯誤,諸如: MySQL、Mongose、Redis 等等。
  2. 讓應用更易度量
    • 實現了軟件行業上通用的 Metrics 系統。
    • 自帶多種監控指標實現,從操做系統指標到 Node.js Runtime,從 HTTP QPS 到中間件用量。
    • 支持多種監控指標類型(Metrics 類型),您能夠基於這些指標類型,輕鬆地建構您的業務監控指標。
  3. 讓系統更加健壯
    • 故障演練擴展,能夠模擬大部分基礎中間件的不能夠用狀態。這是從淘寶屢次大促中沉澱下來的斷網演習工具。
    • 遠程調試擴展,基於 Dashboard 的能力能夠實時調試您的線上進程,線上業務問題再也不抓瞎。
  4. 讓應用更易管理
    • 進程管理管理能力,提供了基礎的進程守護和 Cluster 能力。
    • 基礎服務管理能力來知足中間件管理等場景,提供了依賴管理和標準的啓停接口。
    • 提供了進程間通訊的基礎能力。

上面提到的所有能力和數據,所有經過 RESTFul 接口或文本日誌透出,您能夠輕鬆的將其集成進您的監控管理系統(爲了更好的配套,在不遠的未來咱們也會將咱們的私有監控管理平臺開源)。npm

這樣的歸納仍是有些枯燥與難以理解,接下來會經過 Pandora.js dashboard 的界面介紹幾個主要特性,Pandora.js dashboard 是一個與 Pandora.js 相配套的單機可視化儀表。而後在文章的最後是一個能夠跑起來的例子~json

業務鏈路追蹤 - Trace

鏈路追蹤是第一個要介紹的重量級特性,能夠追蹤每一個業務請求的全過程,在運行時直觀的看出接口或頁面慢在哪裏、錯在哪裏、超時在哪裏。api

聽上去很厲害的樣子,但實際使用起來很簡單。您只須要簡單的使用 Pandora.js 來啓動您的應用,而後打開 Pandora.js dashboard 就能夠看到您的業務鏈路的所有細節:promise

輕鬆識別慢鏈路和錯誤鏈路

undefined | center

調用了,哪裏耗時多,一目瞭然

undefined | center

應用度量

默認的應用度量 - Built-in Metrics

Pandora.js 爲您默認提供了近百項開箱即用的默認監控指標,讓您輕鬆的開始監控您的應用。

默認提供了,Node.js Runtime 指標,操做系統指標,HTTP Incoming 指標等等。

Node.js 指標,包含大量運行時指標

undefined | center

操做系統指標,包含 Load、CPU、內存、磁盤、網絡、TCP 等各類指標

undefined | center

自定義的應用度量 - Custom Metrics

應用運行在生產環境,咱們有太多想要知道和觀察的數據了。以往咱們都是寫不少日誌文件,查看分析十分麻煩。Pandora.js 的 Metrics 提供了 Gauge(瞬時)、Counter(計數)、Meter(流速)、Histogram(直方圖) 等多種度量類型,您能夠輕易地完成大部分的應用或業務指標。

下面是一個例子:

根據 Email 去 Gravatar 獲取用戶的 Profile。而後我想統計有多少次成功了,多少次失敗了。(這個例子在文章後面有附上)

const {MetricsClientUtil} = require('dorapan'); // dorapan 是 pandora 的一個客戶端 sdk
const client = MetricsClientUtil.getMetricsClient(); // 得到 Metrics 客戶端

// 建立兩個 Counter (計數)類型的指標
const successCounter = client.getCounter('custom', 'custom.gravatar.success');
const failCounter = client.getCounter('custom', 'custom.gravatar.fail');

// ...此處省略若干代碼

const userAvatars = {};
const promises = [];
for(const user of rows) {
  const profileUrl = gravatar.profile_url(user.email);
   promises.push(urllib.request(profileUrl, {
     followRedirect: true, dataType: 'json'
   }).then((res) => {
     if(typeof res.data === 'object') {
	   successCounter.inc(1);
       userAvatars[user.email] = res.data;
     } else {
	   failCounter.inc(1);
	 }
   }));
}
await Promise.all(promises);
複製代碼

能夠看到 Metrics 中已經出現了 Custom 分組:

undefined | center

固然還有更多的 Metrics 類型能夠實踐,請具體參見文檔

一個簡單的例子

這個例子的演示依賴兩個部件:

  1. Pandora.js 命令行工具:來啓動和監控應用。
  2. Pandora.js dashboard:Pandora.js 的 單機版 GUI。

安裝

您最好在 Linux 系統安裝,同時 Pandora.js 依賴 Node.js >= 8.0.0 (也就是當前的 LTS 版本。咱們在 macOS 上指標有部分實現也能夠。若是您是 Windows 用戶的話,我只能說歡迎 PR)。

  1. 安裝 Pandora.js 命令行工具:
$ npm i pandora -g
複製代碼

安好後您會得到一個 pandora 命令。

  1. 安裝 Pandora.js dashboard
$ npm i pandora-dashboard -g
複製代碼

而後您就能夠啓動 Pandora.js dashboard 了。

$ pandora start --name dashboard `pandora-dashboard-dir`
複製代碼

上面有個 command substitution pandora-dashboard-dir,它是 Pandora.js 注入的一個全局命令。用來輸出 Pandora.js dashboard 的目錄,而後 Pandora.js 會把它當成一個普通的項目來啓動。

安裝完 Dashboard 以後打開 http://127.0.0.1:9081,您能夠看到 Dashboard 這個應用,這就是 Pandora.js dashborad 本身。

啓動一個簡單的 MySQL CRUD 的例子

我找到一個 Node.js 的 簡單 MySQL CRUD 的例子來進行接下來的演示。固然我爲了演示還作了一些修改。示例項目在 Github,Clone 它您也能夠跑跑試試看。

在這個例子裏主入口爲 server.js,在項目根目錄運行下面的命令來初始化。

$ pandora init server.js 
? Which type do you like to generate ? (Use arrow keys)
  fork 
❯ cluster 
複製代碼

我選擇了 Cluster,不過您能夠選擇任意一個,這兩個選項的行爲就像 PM2 同樣。Fork 簡單拉起 server.js ,而 Cluster 則用 Node.js 的 Cluster 模塊啓動 server.js (即 Master / Worker 模型)。

在初始化完後,將會生成一個 procfile.js 文件。這個文件用來定義項目結構,就像 PM2 的 Process file 同樣。其實 procfile 就是 Process File 的簡寫。

而後咱們運行 pandora start 來啓動應用:

$ pandora start
Starting rest-crud at /xx/xxx/rest-crud
rest-crud started successfully! Run command [ pandora log rest-crud ] to get more information
複製代碼

先放問下 http://127.0.0.1:300/api/user 查看下簡單的 CRUD 例子,稍微作點操做。

而後讓咱們無視 Run command [ pandora log rest-crud ] 這個提示,直接打開 http://127.0.0.1:9081/,而後您將看到:

undefined | center

點擊 Standard Output 按鈕來查看控制檯輸出:

undefined | center

點擊 Trace 查看全部的鏈路:

undefined | center

點擊 Metrics 查看全部的 Metrics 指標:

undefined | center

這只是開始

Node.js 應用在運維方面依舊仍是很薄弱,Pandora.js 所作的也只是一點點工做,幫忙開發者更加了解本身的應用,在問題來臨時,再也不迷惘,再也不慌亂。

四年間,咱們看到了 Node 的興起,工具鏈的完善,也看到了應用場景的萎縮,產品的各類迭代和意外,唏噓之餘,依舊得作好份內之事,讓 Node 在部門,在集團,乃至在業界都能有一些成長和突破,同時讓本身看清和選擇一條路,堅決的走下去。

最後,再一次歡迎您來體驗,嘗試基於 Pandora.js 來建構您的 Node.js 運維基礎設施,讓天下沒有難管理的應用。

相關文章
相關標籤/搜索